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