• Alex Williamson's avatar
    vfio-pci: Virtualize PCIe & AF FLR · ddf9dc0e
    Alex Williamson authored
    We use a BAR restore trick to try to detect when a user has performed
    a device reset, possibly through FLR or other backdoors, to put things
    back into a working state.  This is important for backdoor resets, but
    we can actually just virtualize the "front door" resets provided via
    PCIe and AF FLR.  Set these bits as virtualized + writable, allowing
    the default write to set them in vconfig, then we can simply check the
    bit, perform an FLR of our own, and clear the bit.  We don't actually
    have the granularity in PCI to specify the type of reset we want to
    do, but generally devices don't implement both PCIe and AF FLR and
    we'll favor these over other types of reset, so we should generally
    lineup.  We do test whether the device provides the requested FLR type
    to stay consistent with hardware capabilities though.
    
    This seems to fix several instance of devices getting into bad states
    with userspace drivers, like dpdk, running inside a VM.
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Reviewed-by: default avatarGreg Rose <grose@lightfleet.com>
    ddf9dc0e
vfio_pci_config.c 47.7 KB