aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/pci-nommu.c
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2008-09-24 07:48:35 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-25 05:02:25 -0400
commit9f6ac57729724b58df81ca5dc005326759a806fe (patch)
treed9ee77c4518d83582bf1de1acf43e1834932f5f3 /arch/x86/kernel/pci-nommu.c
parentafa9fdc2f5f8e4d98f3e77bfa204412cbc181346 (diff)
x86: export pci-nommu's alloc_coherent
This patch exports nommu_alloc_coherent (renamed dma_generic_alloc_coherent). GART needs this function. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/pci-nommu.c')
-rw-r--r--arch/x86/kernel/pci-nommu.c39
1 files changed, 1 insertions, 38 deletions
diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c
index 1c1c98a31d57..c70ab5a5d4c8 100644
--- a/arch/x86/kernel/pci-nommu.c
+++ b/arch/x86/kernel/pci-nommu.c
@@ -72,43 +72,6 @@ static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg,
72 return nents; 72 return nents;
73} 73}
74 74
75static void *
76nommu_alloc_coherent(struct device *hwdev, size_t size,
77 dma_addr_t *dma_addr, gfp_t gfp)
78{
79 unsigned long dma_mask;
80 int node;
81 struct page *page;
82 dma_addr_t addr;
83
84 dma_mask = dma_alloc_coherent_mask(hwdev, gfp);
85
86 gfp |= __GFP_ZERO;
87
88 node = dev_to_node(hwdev);
89again:
90 page = alloc_pages_node(node, gfp, get_order(size));
91 if (!page)
92 return NULL;
93
94 addr = page_to_phys(page);
95 if (!is_buffer_dma_capable(dma_mask, addr, size) && !(gfp & GFP_DMA)) {
96 free_pages((unsigned long)page_address(page), get_order(size));
97 gfp |= GFP_DMA;
98 goto again;
99 }
100
101 if (check_addr("alloc_coherent", hwdev, addr, size)) {
102 *dma_addr = addr;
103 flush_write_buffers();
104 return page_address(page);
105 }
106
107 free_pages((unsigned long)page_address(page), get_order(size));
108
109 return NULL;
110}
111
112static void nommu_free_coherent(struct device *dev, size_t size, void *vaddr, 75static void nommu_free_coherent(struct device *dev, size_t size, void *vaddr,
113 dma_addr_t dma_addr) 76 dma_addr_t dma_addr)
114{ 77{
@@ -116,7 +79,7 @@ static void nommu_free_coherent(struct device *dev, size_t size, void *vaddr,
116} 79}
117 80
118struct dma_mapping_ops nommu_dma_ops = { 81struct dma_mapping_ops nommu_dma_ops = {
119 .alloc_coherent = nommu_alloc_coherent, 82 .alloc_coherent = dma_generic_alloc_coherent,
120 .free_coherent = nommu_free_coherent, 83 .free_coherent = nommu_free_coherent,
121 .map_single = nommu_map_single, 84 .map_single = nommu_map_single,
122 .map_sg = nommu_map_sg, 85 .map_sg = nommu_map_sg,