瀏覽代碼

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>
Andrew Morton 13 年之前
父節點
當前提交
842fa69f3e
共有 2 個文件被更改,包括 17 次插入0 次删除
  1. 7 0
      Documentation/DMA-API.txt
  2. 10 0
      include/linux/dma-mapping.h

+ 7 - 0
Documentation/DMA-API.txt

@@ -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)

+ 10 - 0
include/linux/dma-mapping.h

@@ -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)
 {
 {