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

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

x86: Use x86_platform for iommu_shutdown



This patch cleans up pci_iommu_shutdown() a bit to use
x86_platform (similar to how IA64 initializes an IOMMU driver).

This adds iommu_shutdown() to x86_platform to avoid calling
every IOMMUs' shutdown functions in pci_iommu_shutdown() in
order. The IOMMU shutdown functions are platform specific (we
don't have multiple different IOMMU hardware) so the current way
is pointless.

An IOMMU driver sets x86_platform.iommu_shutdown to the shutdown
function if necessary.

Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: joerg.roedel@amd.com
LKML-Reference: <20091027163358F.fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 7c9abfb8
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -30,12 +30,10 @@ extern void amd_iommu_detect(void);
extern irqreturn_t amd_iommu_int_handler(int irq, void *data);
extern void amd_iommu_flush_all_domains(void);
extern void amd_iommu_flush_all_devices(void);
extern void amd_iommu_shutdown(void);
extern void amd_iommu_apply_erratum_63(u16 devid);
#else
static inline int amd_iommu_init(void) { return -ENODEV; }
static inline void amd_iommu_detect(void) { }
static inline void amd_iommu_shutdown(void) { }
#endif

#endif /* _ASM_X86_AMD_IOMMU_H */
+0 −4
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ extern int gart_iommu_aperture_disabled;

extern void early_gart_iommu_check(void);
extern void gart_iommu_init(void);
extern void gart_iommu_shutdown(void);
extern void __init gart_parse_options(char *);
extern void gart_iommu_hole_init(void);

@@ -51,9 +50,6 @@ static inline void early_gart_iommu_check(void)
static inline void gart_iommu_init(void)
{
}
static inline void gart_iommu_shutdown(void)
{
}
static inline void gart_parse_options(char *options)
{
}
+1 −1
Original line number Diff line number Diff line
#ifndef _ASM_X86_IOMMU_H
#define _ASM_X86_IOMMU_H

extern void pci_iommu_shutdown(void);
static inline void iommu_shutdown_noop(void) {}
extern void no_iommu_init(void);
extern struct dma_map_ops nommu_dma_ops;
extern int force_iommu, no_iommu;
+1 −0
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ struct x86_platform_ops {
	unsigned long (*calibrate_tsc)(void);
	unsigned long (*get_wallclock)(void);
	int (*set_wallclock)(unsigned long nowtime);
	void (*iommu_shutdown)(void);
};

extern struct x86_init_ops x86_init;
+1 −5
Original line number Diff line number Diff line
@@ -1297,6 +1297,7 @@ int __init amd_iommu_init(void)
	else
		printk(KERN_INFO "AMD-Vi: Lazy IO/TLB flushing enabled\n");

	x86_platform.iommu_shutdown = disable_iommus;
out:
	return ret;

@@ -1323,11 +1324,6 @@ free:
	goto out;
}

void amd_iommu_shutdown(void)
{
	disable_iommus();
}

/****************************************************************************
 *
 * Early detect code. This code runs at IOMMU detection time in the DMA
Loading