diff options
author | Muli Ben-Yehuda <mulix@mulix.org> | 2006-01-11 16:44:42 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 22:04:55 -0500 |
commit | 17a941d854a3f7b0bb916fdeee4c9ffdcc19d8d3 (patch) | |
tree | b6b3b55318336adf769bf57141a01a9defbbb202 /arch/x86_64/kernel/setup.c | |
parent | 8a6fdd3e912e0ce6f723431d66baf704bf8a1d26 (diff) |
[PATCH] x86_64: Use function pointers to call DMA mapping functions
AK: I hacked Muli's original patch a lot and there were a lot
of changes - all bugs are probably to blame on me now.
There were also some changes in the fall back behaviour
for swiotlb - in particular it doesn't try to use GFP_DMA
now anymore. Also all DMA mapping operations use the
same core dma_alloc_coherent code with proper fallbacks now.
And various other changes and cleanups.
Known problems: iommu=force swiotlb=force together breaks
needs more testing.
This patch cleans up x86_64's DMA mapping dispatching code. Right now
we have three possible IOMMU types: AGP GART, swiotlb and nommu, and
in the future we will also have Xen's x86_64 swiotlb and other HW
IOMMUs for x86_64. In order to support all of them cleanly, this
patch:
- introduces a struct dma_mapping_ops with function pointers for each
of the DMA mapping operations of gart (AMD HW IOMMU), swiotlb
(software IOMMU) and nommu (no IOMMU).
- gets rid of:
if (swiotlb)
return swiotlb_xxx();
- PCI_DMA_BUS_IS_PHYS is now checked against the dma_ops being set
This makes swiotlb faster by avoiding double copying in some cases.
Signed-Off-By: Muli Ben-Yehuda <mulix@mulix.org>
Signed-Off-By: Jon D. Mason <jdmason@us.ibm.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/x86_64/kernel/setup.c')
-rw-r--r-- | arch/x86_64/kernel/setup.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c index 6810690d6045..e7a4d2cd3968 100644 --- a/arch/x86_64/kernel/setup.c +++ b/arch/x86_64/kernel/setup.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <linux/kexec.h> | 45 | #include <linux/kexec.h> |
46 | #include <linux/cpufreq.h> | 46 | #include <linux/cpufreq.h> |
47 | #include <linux/dmi.h> | 47 | #include <linux/dmi.h> |
48 | #include <linux/dma-mapping.h> | ||
48 | 49 | ||
49 | #include <asm/mtrr.h> | 50 | #include <asm/mtrr.h> |
50 | #include <asm/uaccess.h> | 51 | #include <asm/uaccess.h> |
@@ -63,7 +64,9 @@ | |||
63 | #include <asm/setup.h> | 64 | #include <asm/setup.h> |
64 | #include <asm/mach_apic.h> | 65 | #include <asm/mach_apic.h> |
65 | #include <asm/numa.h> | 66 | #include <asm/numa.h> |
67 | #include <asm/swiotlb.h> | ||
66 | #include <asm/sections.h> | 68 | #include <asm/sections.h> |
69 | #include <asm/gart-mapping.h> | ||
67 | 70 | ||
68 | /* | 71 | /* |
69 | * Machine setup.. | 72 | * Machine setup.. |
@@ -88,11 +91,6 @@ int bootloader_type; | |||
88 | 91 | ||
89 | unsigned long saved_video_mode; | 92 | unsigned long saved_video_mode; |
90 | 93 | ||
91 | #ifdef CONFIG_SWIOTLB | ||
92 | int swiotlb; | ||
93 | EXPORT_SYMBOL(swiotlb); | ||
94 | #endif | ||
95 | |||
96 | /* | 94 | /* |
97 | * Setup options | 95 | * Setup options |
98 | */ | 96 | */ |
@@ -389,11 +387,9 @@ static __init void parse_cmdline_early (char ** cmdline_p) | |||
389 | numa_setup(from+5); | 387 | numa_setup(from+5); |
390 | #endif | 388 | #endif |
391 | 389 | ||
392 | #ifdef CONFIG_GART_IOMMU | ||
393 | if (!memcmp(from,"iommu=",6)) { | 390 | if (!memcmp(from,"iommu=",6)) { |
394 | iommu_setup(from+6); | 391 | iommu_setup(from+6); |
395 | } | 392 | } |
396 | #endif | ||
397 | 393 | ||
398 | if (!memcmp(from,"oops=panic", 10)) | 394 | if (!memcmp(from,"oops=panic", 10)) |
399 | panic_on_oops = 1; | 395 | panic_on_oops = 1; |