diff options
Diffstat (limited to 'drivers/iommu/intel_irq_remapping.c')
| -rw-r--r-- | drivers/iommu/intel_irq_remapping.c | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index e0b18f3ae9a..af8904de1d4 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)  {  	struct dmar_drhd_unit *drhd;  	int ir_supported = 0; +	int ioapic_idx;  	for_each_drhd_unit(drhd) {  		struct intel_iommu *iommu = drhd->iommu; @@ -748,13 +749,20 @@ int __init parse_ioapics_under_ir(void)  		}  	} -	if (ir_supported && ir_ioapic_num != nr_ioapics) { -		printk(KERN_WARNING -		       "Not all IO-APIC's listed under remapping hardware\n"); -		return -1; +	if (!ir_supported) +		return 0; + +	for (ioapic_idx = 0; ioapic_idx < nr_ioapics; ioapic_idx++) { +		int ioapic_id = mpc_ioapic_id(ioapic_idx); +		if (!map_ioapic_to_ir(ioapic_id)) { +			pr_err(FW_BUG "ioapic %d has no mapping iommu, " +			       "interrupt remapping will be disabled\n", +			       ioapic_id); +			return -1; +		}  	} -	return ir_supported; +	return 1;  }  int __init ir_dev_scope_init(void)  |