|
@@ -337,7 +337,7 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
|
|
|
/* pool_alloc_page() might sleep, so temporarily drop &pool->lock */
|
|
|
spin_unlock_irqrestore(&pool->lock, flags);
|
|
|
|
|
|
- page = pool_alloc_page(pool, mem_flags);
|
|
|
+ page = pool_alloc_page(pool, mem_flags & (~__GFP_ZERO));
|
|
|
if (!page)
|
|
|
return NULL;
|
|
|
|
|
@@ -375,9 +375,14 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- memset(retval, POOL_POISON_ALLOCATED, pool->size);
|
|
|
+ if (!(mem_flags & __GFP_ZERO))
|
|
|
+ memset(retval, POOL_POISON_ALLOCATED, pool->size);
|
|
|
#endif
|
|
|
spin_unlock_irqrestore(&pool->lock, flags);
|
|
|
+
|
|
|
+ if (mem_flags & __GFP_ZERO)
|
|
|
+ memset(retval, 0, pool->size);
|
|
|
+
|
|
|
return retval;
|
|
|
}
|
|
|
EXPORT_SYMBOL(dma_pool_alloc);
|