aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2009-11-10 05:46:16 -0500
committerIngo Molnar <mingo@elte.hu>2009-11-10 06:31:36 -0500
commit9d5ce73a64be2be8112147a3e0b551ad9cd1247b (patch)
tree8593dc2ca29e95b1a25e6f677459f3fe5c68dee9
parentea1b0d3945c7374849235b6ecaea1191ee1d9d50 (diff)
x86: intel-iommu: Convert detect_intel_iommu to use iommu_init hook
This changes detect_intel_iommu() to set intel_iommu_init() to iommu_init hook if detect_intel_iommu() finds the IOMMU. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Cc: chrisw@sous-sol.org Cc: dwmw2@infradead.org Cc: joerg.roedel@amd.com Cc: muli@il.ibm.com LKML-Reference: <1257849980-22640-6-git-send-email-fujita.tomonori@lab.ntt.co.jp> [ -v2: build fix for the !CONFIG_DMAR case ] Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/pci-dma.c2
-rw-r--r--drivers/pci/dmar.c4
-rw-r--r--include/linux/dmar.h15
3 files changed, 8 insertions, 13 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index 5ca44a9301a..bed05e2e589 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -294,8 +294,6 @@ static int __init pci_iommu_init(void)
294 294
295 x86_init.iommu.iommu_init(); 295 x86_init.iommu.iommu_init();
296 296
297 intel_iommu_init();
298
299 no_iommu_init(); 297 no_iommu_init();
300 return 0; 298 return 0;
301} 299}
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
index 22b02c6df85..bce9cd7c755 100644
--- a/drivers/pci/dmar.c
+++ b/drivers/pci/dmar.c
@@ -617,6 +617,10 @@ void __init detect_intel_iommu(void)
617 !dmar_disabled) 617 !dmar_disabled)
618 iommu_detected = 1; 618 iommu_detected = 1;
619#endif 619#endif
620#ifdef CONFIG_X86
621 if (ret)
622 x86_init.iommu.iommu_init = intel_iommu_init;
623#endif
620 } 624 }
621 early_acpi_os_unmap_memory(dmar_tbl, dmar_tbl_size); 625 early_acpi_os_unmap_memory(dmar_tbl, dmar_tbl_size);
622 dmar_tbl = NULL; 626 dmar_tbl = NULL;
diff --git a/include/linux/dmar.h b/include/linux/dmar.h
index 4a2b162c256..5de4c9e5856 100644
--- a/include/linux/dmar.h
+++ b/include/linux/dmar.h
@@ -208,16 +208,9 @@ struct dmar_atsr_unit {
208 u8 include_all:1; /* include all ports */ 208 u8 include_all:1; /* include all ports */
209}; 209};
210 210
211/* Intel DMAR initialization functions */
212extern int intel_iommu_init(void); 211extern int intel_iommu_init(void);
213#else 212#else /* !CONFIG_DMAR: */
214static inline int intel_iommu_init(void) 213static inline int intel_iommu_init(void) { return -ENODEV; }
215{ 214#endif /* CONFIG_DMAR */
216#ifdef CONFIG_INTR_REMAP 215
217 return dmar_dev_scope_init();
218#else
219 return -ENODEV;
220#endif
221}
222#endif /* !CONFIG_DMAR */
223#endif /* __DMAR_H__ */ 216#endif /* __DMAR_H__ */