diff options
-rw-r--r-- | drivers/pci/dmar.c | 10 | ||||
-rw-r--r-- | drivers/pci/intr_remapping.c | 3 | ||||
-rw-r--r-- | include/linux/intel-iommu.h | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c index fba4f6891680..270ed222a075 100644 --- a/drivers/pci/dmar.c +++ b/drivers/pci/dmar.c | |||
@@ -1316,3 +1316,13 @@ int dmar_reenable_qi(struct intel_iommu *iommu) | |||
1316 | 1316 | ||
1317 | return 0; | 1317 | return 0; |
1318 | } | 1318 | } |
1319 | |||
1320 | /* | ||
1321 | * Check interrupt remapping support in DMAR table description. | ||
1322 | */ | ||
1323 | int dmar_ir_support(void) | ||
1324 | { | ||
1325 | struct acpi_table_dmar *dmar; | ||
1326 | dmar = (struct acpi_table_dmar *)dmar_tbl; | ||
1327 | return dmar->flags & 0x1; | ||
1328 | } | ||
diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c index ebfa47b79c5b..ac065144c01c 100644 --- a/drivers/pci/intr_remapping.c +++ b/drivers/pci/intr_remapping.c | |||
@@ -611,6 +611,9 @@ int __init intr_remapping_supported(void) | |||
611 | if (disable_intremap) | 611 | if (disable_intremap) |
612 | return 0; | 612 | return 0; |
613 | 613 | ||
614 | if (!dmar_ir_support()) | ||
615 | return 0; | ||
616 | |||
614 | for_each_drhd_unit(drhd) { | 617 | for_each_drhd_unit(drhd) { |
615 | struct intel_iommu *iommu = drhd->iommu; | 618 | struct intel_iommu *iommu = drhd->iommu; |
616 | 619 | ||
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 482dc91fd53a..4f0a72a9740c 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
@@ -360,4 +360,6 @@ extern void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 qdep, | |||
360 | 360 | ||
361 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 361 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
362 | 362 | ||
363 | extern int dmar_ir_support(void); | ||
364 | |||
363 | #endif | 365 | #endif |