IOMMU: fail HPET MSI setup on AMD
authorJan Beulich <jbeulich@suse.com>
Fri, 19 Oct 2012 14:51:24 +0000 (16:51 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 19 Oct 2012 14:51:24 +0000 (16:51 +0200)
While the MSI message format doesn't need adjustment for AMD IOMMUs,
the interrupt remapping tables still need updating. The respective code
has to be able to determine the IOMMU responsible, which currently
requires an associated PCI device. The absence of that device in the
HPET case causes the code to crash, and the code determining the source
ID to be used for HPETs (parse_ivhd_device_special() afaict) isn't even
looking at whether it's dealing with an IO-APIC or a HPET (i.e. ignores
the "variety" structure member). If I tried to fix that, I would have
no way to test that I did things right, so all I can do to fix the
crash is make the setup fail if the IOMMU did not provide a handler
(which, considering the above, is the right thing anyway).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Wei Wang <wei.wang2@amd.com>
xen/drivers/passthrough/iommu.c

index 2e19555748e6765417cd62e4a4cf47c6f8d1f15b..3f14a376618f321586e0866cce62779889081639 100644 (file)
@@ -498,7 +498,7 @@ unsigned int iommu_read_apic_from_ire(unsigned int apic, unsigned int reg)
 int __init iommu_setup_hpet_msi(struct msi_desc *msi)
 {
     const struct iommu_ops *ops = iommu_get_ops();
-    return ops->setup_hpet_msi ? ops->setup_hpet_msi(msi) : 0;
+    return ops->setup_hpet_msi ? ops->setup_hpet_msi(msi) : -ENODEV;
 }
 
 void iommu_resume()