From 497f6ad7f0b04b265bcccf2624f798556ab3cafb Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 19 Oct 2012 16:51:24 +0200 Subject: [PATCH] IOMMU: fail HPET MSI setup on AMD 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 Acked-by: Wei Wang --- xen/drivers/passthrough/iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 2e19555748..3f14a37661 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -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() -- 2.30.2