summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@sgi.com>2007-10-16 14:24:58 -0700
committerKyle McMartin <kyle@shortfin.cabal.ca>2007-10-18 00:58:45 -0700
commit6f7d998e94ec7b7f08bd0c72fc05343435d7fa93 (patch)
treea9a211fbf6c72f25d4cd85fd42f349e91bb839de
parentf13cec8447f18cca3a0feb4b83b7ba6fae9e59ae (diff)
downloadlinux-6f7d998e94ec7b7f08bd0c72fc05343435d7fa93.tar.gz
linux-6f7d998e94ec7b7f08bd0c72fc05343435d7fa93.tar.bz2
linux-6f7d998e94ec7b7f08bd0c72fc05343435d7fa93.zip
[PARISC] Use page allocator instead of slab allocator in pci-dma.c
Slab pages obtained via kmalloc are not cacheline aligned. Nor is it advisable to perform VM operations designed for page allocator pages on memory obtained via kmalloc. So replace the page sized allocations in kernel/pci-dma.c with page allocator pages. Signed-off-by: Christoph Lameter <clameter@sgi.com> Cc: Hugh Dickins <hugh@veritas.com> Cc: Grant Grundler <grundler@parisc-linux.org> Cc: Matthew Wilcox <willy@debian.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
-rw-r--r--arch/parisc/kernel/pci-dma.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c
index 23c1388df1f5..41f8e321e34c 100644
--- a/arch/parisc/kernel/pci-dma.c
+++ b/arch/parisc/kernel/pci-dma.c
@@ -569,11 +569,10 @@ static void *fail_alloc_consistent(struct device *dev, size_t size,
static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t flag)
{
- void *addr = NULL;
+ void *addr;
- /* rely on kmalloc to be cacheline aligned */
- addr = kmalloc(size, flag);
- if(addr)
+ addr = (void *)__get_free_pages(flag, get_order(size));
+ if (addr)
*dma_handle = (dma_addr_t)virt_to_phys(addr);
return addr;
@@ -582,7 +581,7 @@ static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
static void pa11_dma_free_noncoherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t iova)
{
- kfree(vaddr);
+ free_pages((unsigned long)vaddr, get_order(size));
return;
}