aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/intel_irq_remapping.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu/intel_irq_remapping.c')
-rw-r--r--drivers/iommu/intel_irq_remapping.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index e0b18f3ae9a8..af8904de1d44 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -736,6 +736,7 @@ int __init parse_ioapics_under_ir(void)
736{ 736{
737 struct dmar_drhd_unit *drhd; 737 struct dmar_drhd_unit *drhd;
738 int ir_supported = 0; 738 int ir_supported = 0;
739 int ioapic_idx;
739 740
740 for_each_drhd_unit(drhd) { 741 for_each_drhd_unit(drhd) {
741 struct intel_iommu *iommu = drhd->iommu; 742 struct intel_iommu *iommu = drhd->iommu;
@@ -748,13 +749,20 @@ int __init parse_ioapics_under_ir(void)
748 } 749 }
749 } 750 }
750 751
751 if (ir_supported && ir_ioapic_num != nr_ioapics) { 752 if (!ir_supported)
752 printk(KERN_WARNING 753 return 0;
753 "Not all IO-APIC's listed under remapping hardware\n"); 754
754 return -1; 755 for (ioapic_idx = 0; ioapic_idx < nr_ioapics; ioapic_idx++) {
756 int ioapic_id = mpc_ioapic_id(ioapic_idx);
757 if (!map_ioapic_to_ir(ioapic_id)) {
758 pr_err(FW_BUG "ioapic %d has no mapping iommu, "
759 "interrupt remapping will be disabled\n",
760 ioapic_id);
761 return -1;
762 }
755 } 763 }
756 764
757 return ir_supported; 765 return 1;
758} 766}
759 767
760int __init ir_dev_scope_init(void) 768int __init ir_dev_scope_init(void)