include/linux/dma-mapping.h: add dma_zalloc_coherent()

Lots of driver code does a dma_alloc_coherent() and then zeroes out the
memory with a memset.  Make it easy for them.

Cc: Alexandre Bounine <alexandre.bounine@idt.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Andrew Morton 2011-11-02 13:39:33 -07:00 committed by Linus Torvalds
parent c736de60ae
commit 842fa69f3e
2 changed files with 17 additions and 0 deletions

View file

@ -50,6 +50,13 @@ specify the GFP_ flags (see kmalloc) for the allocation (the
implementation may choose to ignore flags that affect the location of implementation may choose to ignore flags that affect the location of
the returned memory, like GFP_DMA). the returned memory, like GFP_DMA).
void *
dma_zalloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t flag)
Wraps dma_alloc_coherent() and also zeroes the returned memory if the
allocation attempt succeeded.
void void
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
dma_addr_t dma_handle) dma_addr_t dma_handle)

View file

@ -1,6 +1,7 @@
#ifndef _LINUX_DMA_MAPPING_H #ifndef _LINUX_DMA_MAPPING_H
#define _LINUX_DMA_MAPPING_H #define _LINUX_DMA_MAPPING_H
#include <linux/string.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/dma-attrs.h> #include <linux/dma-attrs.h>
@ -117,6 +118,15 @@ static inline int dma_set_seg_boundary(struct device *dev, unsigned long mask)
return -EIO; return -EIO;
} }
static inline void *dma_zalloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t flag)
{
void *ret = dma_alloc_coherent(dev, size, dma_handle, flag);
if (ret)
memset(ret, 0, size);
return ret;
}
#ifdef CONFIG_HAS_DMA #ifdef CONFIG_HAS_DMA
static inline int dma_get_cache_alignment(void) static inline int dma_get_cache_alignment(void)
{ {