forked from luck/tmp_suning_uos_patched
dmapool: make DMAPOOL_DEBUG detect corruption of free marker
This can help to catch the case where hardware is writing after dma free. [akpm@linux-foundation.org: tidy code, fix comment, use sizeof(page->offset), use pr_err()] Signed-off-by: Matthieu Castet <matthieu.castet@parrot.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9ff4868e30
commit
5de55b265a
24
mm/dmapool.c
24
mm/dmapool.c
|
@ -332,6 +332,30 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
|
||||||
retval = offset + page->vaddr;
|
retval = offset + page->vaddr;
|
||||||
*handle = offset + page->dma;
|
*handle = offset + page->dma;
|
||||||
#ifdef DMAPOOL_DEBUG
|
#ifdef DMAPOOL_DEBUG
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u8 *data = retval;
|
||||||
|
/* page->offset is stored in first 4 bytes */
|
||||||
|
for (i = sizeof(page->offset); i < pool->size; i++) {
|
||||||
|
if (data[i] == POOL_POISON_FREED)
|
||||||
|
continue;
|
||||||
|
if (pool->dev)
|
||||||
|
dev_err(pool->dev,
|
||||||
|
"dma_pool_alloc %s, %p (corruped)\n",
|
||||||
|
pool->name, retval);
|
||||||
|
else
|
||||||
|
pr_err("dma_pool_alloc %s, %p (corruped)\n",
|
||||||
|
pool->name, retval);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dump the first 4 bytes even if they are not
|
||||||
|
* POOL_POISON_FREED
|
||||||
|
*/
|
||||||
|
print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 16, 1,
|
||||||
|
data, pool->size, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
memset(retval, POOL_POISON_ALLOCATED, pool->size);
|
memset(retval, POOL_POISON_ALLOCATED, pool->size);
|
||||||
#endif
|
#endif
|
||||||
spin_unlock_irqrestore(&pool->lock, flags);
|
spin_unlock_irqrestore(&pool->lock, flags);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user