Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea1b0d39 authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by Ingo Molnar
Browse files

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: default avatarFUJITA 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: default avatarIngo Molnar <mingo@elte.hu>
parent de957628
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -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


+3 −14
Original line number Original line Diff line number Diff line
@@ -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
	}
	}
}
}


+0 −2
Original line number Original line Diff line number Diff line
@@ -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;
}
}