• A
    vfio: vfio-pci device assignment driver · 65501a74
    Alex Williamson 提交于
    This adds the core of the QEMU VFIO-based PCI device assignment driver.
    To make use of this driver, enable CONFIG_VFIO, CONFIG_VFIO_IOMMU_TYPE1,
    and CONFIG_VFIO_PCI in your host Linux kernel config.  Load the vfio-pci
    module.  To assign device 0000:05:00.0 to a guest, do the following:
    
    for dev in $(ls /sys/bus/pci/devices/0000:05:00.0/iommu_group/devices); do
        vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
        device=$(cat /sys/bus/pci/devices/$dev/device)
        if [ -e /sys/bus/pci/devices/$dev/driver ]; then
            echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
        fi
        echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
    done
    
    See Documentation/vfio.txt in the Linux kernel tree for further
    description of IOMMU groups and VFIO.
    
    Then launch qemu including the option:
    
    -device vfio-pci,host=0000:05:00.0
    
    Legacy PCI interrupts (INTx) currently makes use of a kludge where we
    trap BAR accesses and assume the access is in response to an interrupt,
    therefore de-asserting and unmasking the interrupt.  It's not quite as
    targetted as using the EOI for this, but it's self contained and seems
    to work across all architectures.  The side-effect is a significant
    performance slow-down for device in INTx mode.  Some devices, like
    graphics cards, don't really use their interrupt, so this can be turned
    off with the x-intx=off option, which disables INTx alltogether.  This
    should be considered an experimental option until we refine this code.
    Both MSI and MSI-X are supported and avoid these issues.
    Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
    Acked-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
    65501a74
vfio_pci.c 54.6 KB