powerpc: Add CONFIG_DMA_API_DEBUG support
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tue, 4 Aug 2009 19:08:28 +0000 (19:08 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 28 Aug 2009 04:24:11 +0000 (14:24 +1000)
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/Kconfig
arch/powerpc/include/asm/dma-mapping.h
arch/powerpc/kernel/dma.c

index 6078253..9e03991 100644 (file)
@@ -121,6 +121,7 @@ config PPC
        select HAVE_ARCH_TRACEHOOK
        select HAVE_LMB
        select HAVE_DMA_ATTRS
+       select HAVE_DMA_API_DEBUG
        select USE_GENERIC_SMP_HELPERS if SMP
        select HAVE_OPROFILE
        select HAVE_SYSCALL_WRAPPERS if PPC64
index 4bd41b4..cb2ca41 100644 (file)
@@ -127,9 +127,15 @@ static inline void *dma_alloc_coherent(struct device *dev, size_t size,
                                       dma_addr_t *dma_handle, gfp_t flag)
 {
        struct dma_map_ops *dma_ops = get_dma_ops(dev);
+       void *cpu_addr;
 
        BUG_ON(!dma_ops);
-       return dma_ops->alloc_coherent(dev, size, dma_handle, flag);
+
+       cpu_addr = dma_ops->alloc_coherent(dev, size, dma_handle, flag);
+
+       debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr);
+
+       return cpu_addr;
 }
 
 static inline void dma_free_coherent(struct device *dev, size_t size,
@@ -138,6 +144,9 @@ static inline void dma_free_coherent(struct device *dev, size_t size,
        struct dma_map_ops *dma_ops = get_dma_ops(dev);
 
        BUG_ON(!dma_ops);
+
+       debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
+
        dma_ops->free_coherent(dev, size, cpu_addr, dma_handle);
 }
 
index c61f70e..21b784d 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <linux/device.h>
 #include <linux/dma-mapping.h>
+#include <linux/dma-debug.h>
 #include <linux/lmb.h>
 #include <asm/bug.h>
 #include <asm/abs_addr.h>
@@ -156,3 +157,13 @@ struct dma_map_ops dma_direct_ops = {
 #endif
 };
 EXPORT_SYMBOL(dma_direct_ops);
+
+#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
+
+static int __init dma_init(void)
+{
+       dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
+
+       return 0;
+}
+fs_initcall(dma_init);