فهرست منبع

kmemcheck: add DMA hooks

This patch hooks into the DMA API to prevent the reporting of the
false positives that would otherwise be reported when memory is
accessed that is also used directly by devices.

[rebased for mainline inclusion]
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
Vegard Nossum 17 سال پیش
والد
کامیت
d7002857de
2فایلهای تغییر یافته به همراه18 افزوده شده و 0 حذف شده
  1. 2 0
      arch/x86/include/asm/dma-mapping.h
  2. 16 0
      include/linux/kmemcheck.h

+ 2 - 0
arch/x86/include/asm/dma-mapping.h

@@ -6,6 +6,7 @@
  * Documentation/DMA-API.txt for documentation.
  * Documentation/DMA-API.txt for documentation.
  */
  */
 
 
+#include <linux/kmemcheck.h>
 #include <linux/scatterlist.h>
 #include <linux/scatterlist.h>
 #include <linux/dma-debug.h>
 #include <linux/dma-debug.h>
 #include <linux/dma-attrs.h>
 #include <linux/dma-attrs.h>
@@ -60,6 +61,7 @@ dma_map_single(struct device *hwdev, void *ptr, size_t size,
 	dma_addr_t addr;
 	dma_addr_t addr;
 
 
 	BUG_ON(!valid_dma_direction(dir));
 	BUG_ON(!valid_dma_direction(dir));
+	kmemcheck_mark_initialized(ptr, size);
 	addr = ops->map_page(hwdev, virt_to_page(ptr),
 	addr = ops->map_page(hwdev, virt_to_page(ptr),
 			     (unsigned long)ptr & ~PAGE_MASK, size,
 			     (unsigned long)ptr & ~PAGE_MASK, size,
 			     dir, NULL);
 			     dir, NULL);

+ 16 - 0
include/linux/kmemcheck.h

@@ -59,6 +59,22 @@ static inline bool kmemcheck_page_is_tracked(struct page *p)
 {
 {
 	return false;
 	return false;
 }
 }
+
+static inline void kmemcheck_mark_unallocated(void *address, unsigned int n)
+{
+}
+
+static inline void kmemcheck_mark_uninitialized(void *address, unsigned int n)
+{
+}
+
+static inline void kmemcheck_mark_initialized(void *address, unsigned int n)
+{
+}
+
+static inline void kmemcheck_mark_freed(void *address, unsigned int n)
+{
+}
 #endif /* CONFIG_KMEMCHECK */
 #endif /* CONFIG_KMEMCHECK */
 
 
 #endif /* LINUX_KMEMCHECK_H */
 #endif /* LINUX_KMEMCHECK_H */