diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-05-11 12:59:32 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-05-11 12:59:37 +0200 | 
| commit | 7961386fe9596e6bf03d09948a73c5df9653325b (patch) | |
| tree | 60fa2586a0d340ef8f7473956eef17430d8250c7 /arch/sh/mm/consistent.c | |
| parent | aa47b7e0f89b9998dad4d1667447e8cb7703ff4e (diff) | |
| parent | 091bf7624d1c90cec9e578a18529f615213ff847 (diff) | |
| download | olio-linux-3.10-7961386fe9596e6bf03d09948a73c5df9653325b.tar.xz olio-linux-3.10-7961386fe9596e6bf03d09948a73c5df9653325b.zip  | |
Merge commit 'v2.6.30-rc5' into sched/core
Merge reason: sched/core was on .30-rc1 before, update to latest fixes
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/sh/mm/consistent.c')
| -rw-r--r-- | arch/sh/mm/consistent.c | 31 | 
1 files changed, 24 insertions, 7 deletions
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index edcd5fbf965..e098ec158dd 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c @@ -10,11 +10,22 @@   * for more details.   */  #include <linux/mm.h> +#include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/dma-mapping.h> +#include <linux/dma-debug.h> +#include <linux/io.h>  #include <asm/cacheflush.h>  #include <asm/addrspace.h> -#include <asm/io.h> + +#define PREALLOC_DMA_DEBUG_ENTRIES	4096 + +static int __init dma_init(void) +{ +	dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES); +	return 0; +} +fs_initcall(dma_init);  void *dma_alloc_coherent(struct device *dev, size_t size,  			   dma_addr_t *dma_handle, gfp_t gfp) @@ -45,6 +56,9 @@ void *dma_alloc_coherent(struct device *dev, size_t size,  	split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order);  	*dma_handle = virt_to_phys(ret); + +	debug_dma_alloc_coherent(dev, size, *dma_handle, ret_nocache); +  	return ret_nocache;  }  EXPORT_SYMBOL(dma_alloc_coherent); @@ -56,12 +70,15 @@ void dma_free_coherent(struct device *dev, size_t size,  	unsigned long pfn = dma_handle >> PAGE_SHIFT;  	int k; -	if (!dma_release_from_coherent(dev, order, vaddr)) { -		WARN_ON(irqs_disabled());	/* for portability */ -		for (k = 0; k < (1 << order); k++) -			__free_pages(pfn_to_page(pfn + k), 0); -		iounmap(vaddr); -	} +	WARN_ON(irqs_disabled());	/* for portability */ + +	if (dma_release_from_coherent(dev, order, vaddr)) +		return; + +	debug_dma_free_coherent(dev, size, vaddr, dma_handle); +	for (k = 0; k < (1 << order); k++) +		__free_pages(pfn_to_page(pfn + k), 0); +	iounmap(vaddr);  }  EXPORT_SYMBOL(dma_free_coherent);  |