• Gavin Shan's avatar
    vfio/pci: Restore MSIx message prior to enabling · b8f02af0
    Gavin Shan authored
    The MSIx vector table lives in device memory, which may be cleared as
    part of a backdoor device reset. This is the case on the IBM IPR HBA
    when the BIST is run on the device. When assigned to a QEMU guest,
    the guest driver does a pci_save_state(), issues a BIST, then does a
    pci_restore_state(). The BIST clears the MSIx vector table, but due
    to the way interrupts are configured the pci_restore_state() does not
    restore the vector table as expected. Eventually this results in an
    EEH error on Power platforms when the device attempts to signal an
    interrupt with the zero'd table entry.
    
    Fix the problem by restoring the host cached MSI message prior to
    enabling each vector.
    Reported-by: default avatarWen Xiong <wenxiong@linux.vnet.ibm.com>
    Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    b8f02af0
vfio_pci_intrs.c 19.8 KB