x86: amd_iommu: Convert amd_iommu_detect() to use iommu_init hook
This changes amd_iommu_detect() to set amd_iommu_init to iommu_init hook if amd_iommu_detect() finds the AMD IOMMU. We can kill the code to check if we found the IOMMU in amd_iommu_init() since amd_iommu_detect() sets amd_iommu_init() only when it found 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-5-git-send-email-fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
de957628ce
commit
ea1b0d3945
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/irqreturn.h>
|
#include <linux/irqreturn.h>
|
||||||
|
|
||||||
#ifdef CONFIG_AMD_IOMMU
|
#ifdef CONFIG_AMD_IOMMU
|
||||||
extern int amd_iommu_init(void);
|
|
||||||
extern int amd_iommu_init_dma_ops(void);
|
extern int amd_iommu_init_dma_ops(void);
|
||||||
extern int amd_iommu_init_passthrough(void);
|
extern int amd_iommu_init_passthrough(void);
|
||||||
extern void amd_iommu_detect(void);
|
extern void amd_iommu_detect(void);
|
||||||
|
@ -32,7 +31,6 @@ extern void amd_iommu_flush_all_domains(void);
|
||||||
extern void amd_iommu_flush_all_devices(void);
|
extern void amd_iommu_flush_all_devices(void);
|
||||||
extern void amd_iommu_apply_erratum_63(u16 devid);
|
extern void amd_iommu_apply_erratum_63(u16 devid);
|
||||||
#else
|
#else
|
||||||
static inline int amd_iommu_init(void) { return -ENODEV; }
|
|
||||||
static inline void amd_iommu_detect(void) { }
|
static inline void amd_iommu_detect(void) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <asm/amd_iommu.h>
|
#include <asm/amd_iommu.h>
|
||||||
#include <asm/iommu.h>
|
#include <asm/iommu.h>
|
||||||
#include <asm/gart.h>
|
#include <asm/gart.h>
|
||||||
|
#include <asm/x86_init.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* definitions for the ACPI scanning code
|
* definitions for the ACPI scanning code
|
||||||
|
@ -1176,19 +1177,10 @@ static struct sys_device device_amd_iommu = {
|
||||||
* functions. Finally it prints some information about AMD IOMMUs and
|
* functions. Finally it prints some information about AMD IOMMUs and
|
||||||
* the driver state and enables the hardware.
|
* the driver state and enables the hardware.
|
||||||
*/
|
*/
|
||||||
int __init amd_iommu_init(void)
|
static int __init amd_iommu_init(void)
|
||||||
{
|
{
|
||||||
int i, ret = 0;
|
int i, ret = 0;
|
||||||
|
|
||||||
|
|
||||||
if (no_iommu) {
|
|
||||||
printk(KERN_INFO "AMD-Vi disabled by kernel command line\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!amd_iommu_detected)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First parse ACPI tables to find the largest Bus/Dev/Func
|
* First parse ACPI tables to find the largest Bus/Dev/Func
|
||||||
* we need to handle. Upon this information the shared data
|
* we need to handle. Upon this information the shared data
|
||||||
|
@ -1344,10 +1336,7 @@ void __init amd_iommu_detect(void)
|
||||||
if (acpi_table_parse("IVRS", early_amd_iommu_detect) == 0) {
|
if (acpi_table_parse("IVRS", early_amd_iommu_detect) == 0) {
|
||||||
iommu_detected = 1;
|
iommu_detected = 1;
|
||||||
amd_iommu_detected = 1;
|
amd_iommu_detected = 1;
|
||||||
#ifdef CONFIG_GART_IOMMU
|
x86_init.iommu.iommu_init = amd_iommu_init;
|
||||||
gart_iommu_aperture_disabled = 1;
|
|
||||||
gart_iommu_aperture = 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -296,8 +296,6 @@ static int __init pci_iommu_init(void)
|
||||||
|
|
||||||
intel_iommu_init();
|
intel_iommu_init();
|
||||||
|
|
||||||
amd_iommu_init();
|
|
||||||
|
|
||||||
no_iommu_init();
|
no_iommu_init();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue