• A
    vfio-pci: Lazy PCI option ROM loading · 6f864e6e
    Alex Williamson 提交于
    During vfio-pci initfn, the device is not always in a state where the
    option ROM can be read.  In the case of graphics cards, there's often
    no per function reset, which means we have host driver state affecting
    whether the option ROM is usable.  Ideally we want to move reading the
    option ROM past any co-assigned device resets to the point where the
    guest first tries to read the ROM itself.
    
    To accomplish this, we switch the memory region for the option rom to
    an I/O region rather than a memory mapped region.  This has the side
    benefit that we don't waste KVM memory slots for a BAR where we don't
    care about performance.  This also allows us to delay loading the ROM
    from the device until the first read by the guest.  We then use the
    PCI config space size of the ROM BAR when setting up the BAR through
    QEMU PCI.
    
    Another benefit of this approach is that previously when a user set
    the ROM to a file using the romfile= option, we still probed VFIO for
    the parameters of the ROM, which can result in dmesg errors about an
    invalid ROM.  We now only probe VFIO to get the ROM contents if the
    guest actually tries to read the ROM.
    Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
    6f864e6e
vfio.c 107.8 KB