Signed-off-by: Quan Xu <quan...@intel.com>
---
 xen/drivers/passthrough/vtd/iommu.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/xen/drivers/passthrough/vtd/iommu.c 
b/xen/drivers/passthrough/vtd/iommu.c
index 1dffc40..17bfb76 100644
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -1068,7 +1068,9 @@ static hw_irq_controller dma_msi_type = {
     .set_affinity = dma_msi_set_affinity,
 };
 
-static int __init iommu_set_interrupt(struct acpi_drhd_unit *drhd)
+static int __init iommu_set_interrupt(struct acpi_drhd_unit *drhd,
+    hw_irq_controller *irq_ctrl, const char *devname, struct msi_desc *msi,
+    void (*irq_handler)(int, void *, struct cpu_user_regs *))
 {
     int irq, ret;
     struct acpi_rhsa_unit *rhsa = drhd_to_rhsa(drhd);
@@ -1084,8 +1086,8 @@ static int __init iommu_set_interrupt(struct 
acpi_drhd_unit *drhd)
     }
 
     desc = irq_to_desc(irq);
-    desc->handler = &dma_msi_type;
-    ret = request_irq(irq, 0, iommu_page_fault, "dmar", iommu);
+    desc->handler = irq_ctrl;
+    ret = request_irq(irq, 0, irq_handler, devname, iommu);
     if ( ret )
     {
         desc->handler = &no_irq_type;
@@ -1094,11 +1096,11 @@ static int __init iommu_set_interrupt(struct 
acpi_drhd_unit *drhd)
         return ret;
     }
 
-    iommu->msi.irq = irq;
-    iommu->msi.msi_attrib.pos = MSI_TYPE_IOMMU;
-    iommu->msi.msi_attrib.maskbit = 1;
-    iommu->msi.msi_attrib.is_64 = 1;
-    desc->msi_desc = &iommu->msi;
+    msi->irq = irq;
+    msi->msi_attrib.pos = MSI_TYPE_IOMMU;
+    msi->msi_attrib.maskbit = 1;
+    msi->msi_attrib.is_64 = 1;
+    desc->msi_desc = msi;
 
     return 0;
 }
@@ -2179,7 +2181,8 @@ int __init intel_vtd_setup(void)
         if ( !vtd_ept_page_compatible(iommu) )
             iommu_hap_pt_share = 0;
 
-        ret = iommu_set_interrupt(drhd);
+        ret = iommu_set_interrupt(drhd, &dma_msi_type, "dmar", 
&drhd->iommu->msi,
+                                  iommu_page_fault);
         if ( ret )
         {
             dprintk(XENLOG_ERR VTDPREFIX, "IOMMU: interrupt setup failed\n");
-- 
1.8.3.2


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to