|
@@ -37,6 +37,10 @@
|
|
|
#include <linux/types.h>
|
|
|
#include <linux/wait.h>
|
|
|
|
|
|
+#if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB_DEBUG_ON)
|
|
|
+#define DMAPOOL_DEBUG 1
|
|
|
+#endif
|
|
|
+
|
|
|
struct dma_pool { /* the pool */
|
|
|
struct list_head page_list;
|
|
|
spinlock_t lock;
|
|
@@ -216,7 +220,7 @@ static struct dma_page *pool_alloc_page(struct dma_pool *pool, gfp_t mem_flags)
|
|
|
page->vaddr = dma_alloc_coherent(pool->dev, pool->allocation,
|
|
|
&page->dma, mem_flags);
|
|
|
if (page->vaddr) {
|
|
|
-#ifdef CONFIG_DEBUG_SLAB
|
|
|
+#ifdef DMAPOOL_DEBUG
|
|
|
memset(page->vaddr, POOL_POISON_FREED, pool->allocation);
|
|
|
#endif
|
|
|
pool_initialise_page(pool, page);
|
|
@@ -239,7 +243,7 @@ static void pool_free_page(struct dma_pool *pool, struct dma_page *page)
|
|
|
{
|
|
|
dma_addr_t dma = page->dma;
|
|
|
|
|
|
-#ifdef CONFIG_DEBUG_SLAB
|
|
|
+#ifdef DMAPOOL_DEBUG
|
|
|
memset(page->vaddr, POOL_POISON_FREED, pool->allocation);
|
|
|
#endif
|
|
|
dma_free_coherent(pool->dev, pool->allocation, page->vaddr, dma);
|
|
@@ -336,7 +340,7 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
|
|
|
page->offset = *(int *)(page->vaddr + offset);
|
|
|
retval = offset + page->vaddr;
|
|
|
*handle = offset + page->dma;
|
|
|
-#ifdef CONFIG_DEBUG_SLAB
|
|
|
+#ifdef DMAPOOL_DEBUG
|
|
|
memset(retval, POOL_POISON_ALLOCATED, pool->size);
|
|
|
#endif
|
|
|
done:
|
|
@@ -391,7 +395,7 @@ void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma)
|
|
|
}
|
|
|
|
|
|
offset = vaddr - page->vaddr;
|
|
|
-#ifdef CONFIG_DEBUG_SLAB
|
|
|
+#ifdef DMAPOOL_DEBUG
|
|
|
if ((dma - page->dma) != offset) {
|
|
|
if (pool->dev)
|
|
|
dev_err(pool->dev,
|