When Interrupt Remapping is used, after Dom0 S3, Dom0's filesystem
might become inaccessible as the SATA disk's MSI interrupt becomes
buggy. The cause is: After set_msi_affinity() or setup_msi_irq()
invokes write_msi_msg(), entry->msg records the remappable format
message; during S3 resume, Dom0 invokes the PHYSDEVOP_restore_msi
hypercall to restore the MSI registers of devices, and in
pci_restore_msi_state() -> write_msi_msg(), the 'entry->msg' of
remappable format is passed, but in write_msi_msg() -> ... ->
msi_msg_to_remap_entry(), the 'msg' is assumed to be in compatibility
format. As a result, after s3, the IRTE is corrupted.
Actually the only users of 'entry->msg' are pci_restore_msi_state()
and dump_msi(). That's why we don't have issue except Dom0 S3.
Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
static void write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
{
+ entry->msg = *msg;
+
if ( iommu_enabled )
iommu_update_ire_from_msi(entry, msg);
default:
BUG();
}
- entry->msg = *msg;
}
void set_msi_affinity(unsigned int irq, cpumask_t mask)