10 Oct, 2012

3 commits

  • The virq_disabled flag tracks the userspace view of INTx masking
    across interrupt mode changes, but we're not consistently applying
    this to the interrupt and masking handler notion of the device.
    Currently if the user sets DisINTx while in MSI or MSIX mode, then
    returns to INTx mode (ex. rebooting a qemu guest), the hardware has
    DisINTx+, but the management of INTx thinks it's enabled, making it
    impossible to actually clear DisINTx. Fix this by updating the
    handler state when INTx is re-enabled.

    Cc: stable@vger.kernel.org
    Signed-off-by: Alex Williamson

    Alex Williamson
     
  • We need to be ready to recieve an interrupt as soon as we call
    request_irq, so our eventfd context setting needs to be moved
    earlier. Without this, an interrupt from our device or one
    sharing the interrupt line can pass a NULL into eventfd_signal
    and oops.

    Cc: stable@vger.kernel.org
    Signed-off-by: Alex Williamson

    Alex Williamson
     
  • Our mmap path mistakely relied on vma->vm_pgoff to get set in
    remap_pfn_range. After b3b9c293, that path only applies to
    copy-on-write mappings. Set it in our own code.

    Signed-off-by: Alex Williamson

    Alex Williamson
     

09 Oct, 2012

1 commit

  • The VM_RESERVED flag was killed off in commit 314e51b9851b ("mm: kill
    vma flag VM_RESERVED and mm->reserved_vm counter"), and replaced by the
    proper semantic flags (eg "don't core-dump" etc). But there was a new
    use of VM_RESERVED that got missed by the merge.

    Fix the remaining use of VM_RESERVED in the vfio_pci driver, replacing
    the VM_RESERVED flag with VM_DONTEXPAND | VM_DONTDUMP.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

27 Sep, 2012

2 commits


22 Sep, 2012

1 commit

  • vfoi-pci supports a mechanism like KVM's irqfd for unmasking an
    interrupt through an eventfd. There are two ways to shutdown this
    interface: 1) close the eventfd, 2) ioctl (such as disabling the
    interrupt). Both of these do the release through a workqueue,
    which can result in a segfault if two jobs get queued for the same
    virqfd.

    Fix this by protecting the pointer to these virqfds by a spinlock.
    The vfio pci device will therefore no longer have a reference to it
    once the release job is queued under lock. On the ioctl side, we
    still flush the workqueue to ensure that any outstanding releases
    are completed.

    Signed-off-by: Alex Williamson

    Alex Williamson
     

22 Aug, 2012

4 commits


31 Jul, 2012

3 commits

  • Add PCI device support for VFIO. PCI devices expose regions
    for accessing config space, I/O port space, and MMIO areas
    of the device. PCI config access is virtualized in the kernel,
    allowing us to ensure the integrity of the system, by preventing
    various accesses while reducing duplicate support across various
    userspace drivers. I/O port supports read/write access while
    MMIO also supports mmap of sufficiently sized regions. Support
    for INTx, MSI, and MSI-X interrupts are provided using eventfds to
    userspace.

    Signed-off-by: Alex Williamson

    Alex Williamson
     
  • This VFIO IOMMU backend is designed primarily for AMD-Vi and Intel
    VT-d hardware, but is potentially usable by anything supporting
    similar mapping functionality. We arbitrarily call this a Type1
    backend for lack of a better name. This backend has no IOVA
    or host memory mapping restrictions for the user and is optimized
    for relatively static mappings. Mapped areas are pinned into system
    memory.

    Signed-off-by: Alex Williamson

    Alex Williamson
     
  • VFIO is a secure user level driver for use with both virtual machines
    and user level drivers. VFIO makes use of IOMMU groups to ensure the
    isolation of devices in use, allowing unprivileged user access. It's
    intended that VFIO will replace KVM device assignment and UIO drivers
    (in cases where the target platform includes a sufficiently capable
    IOMMU).

    New in this version of VFIO is support for IOMMU groups managed
    through the IOMMU core as well as a rework of the API, removing the
    group merge interface. We now go back to a model more similar to
    original VFIO with UIOMMU support where the file descriptor obtained
    from /dev/vfio/vfio allows access to the IOMMU, but only after a
    group is added, avoiding the previous privilege issues with this type
    of model. IOMMU support is also now fully modular as IOMMUs have
    vastly different interface requirements on different platforms. VFIO
    users are able to query and initialize the IOMMU model of their
    choice.

    Please see the follow-on Documentation commit for further description
    and usage example.

    Signed-off-by: Alex Williamson

    Alex Williamson