diff options
author | Vegard Nossum <vegard.nossum@gmail.com> | 2009-02-21 07:52:37 -0500 |
---|---|---|
committer | Vegard Nossum <vegard.nossum@gmail.com> | 2009-06-15 06:40:13 -0400 |
commit | 9b5cab31897e9e89e36c0c2a89b16b93ff1a971a (patch) | |
tree | 8ebc2d3c5e380f24239b108a447a1158ad1f56c7 | |
parent | 9e730237c2cb479649207da1be2114c28d2fcf51 (diff) |
kmemcheck: add hooks for page- and sg-dma-mappings
This is needed for page allocator support to prevent false positives
when accessing pages which are dma-mapped.
[rebased for mainline inclusion]
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
-rw-r--r-- | arch/x86/include/asm/dma-mapping.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h index d57d0c1857bc..b93405b228b4 100644 --- a/arch/x86/include/asm/dma-mapping.h +++ b/arch/x86/include/asm/dma-mapping.h | |||
@@ -89,8 +89,12 @@ dma_map_sg(struct device *hwdev, struct scatterlist *sg, | |||
89 | { | 89 | { |
90 | struct dma_map_ops *ops = get_dma_ops(hwdev); | 90 | struct dma_map_ops *ops = get_dma_ops(hwdev); |
91 | int ents; | 91 | int ents; |
92 | struct scatterlist *s; | ||
93 | int i; | ||
92 | 94 | ||
93 | BUG_ON(!valid_dma_direction(dir)); | 95 | BUG_ON(!valid_dma_direction(dir)); |
96 | for_each_sg(sg, s, nents, i) | ||
97 | kmemcheck_mark_initialized(sg_virt(s), s->length); | ||
94 | ents = ops->map_sg(hwdev, sg, nents, dir, NULL); | 98 | ents = ops->map_sg(hwdev, sg, nents, dir, NULL); |
95 | debug_dma_map_sg(hwdev, sg, nents, ents, dir); | 99 | debug_dma_map_sg(hwdev, sg, nents, ents, dir); |
96 | 100 | ||
@@ -202,6 +206,7 @@ static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, | |||
202 | dma_addr_t addr; | 206 | dma_addr_t addr; |
203 | 207 | ||
204 | BUG_ON(!valid_dma_direction(dir)); | 208 | BUG_ON(!valid_dma_direction(dir)); |
209 | kmemcheck_mark_initialized(page_address(page) + offset, size); | ||
205 | addr = ops->map_page(dev, page, offset, size, dir, NULL); | 210 | addr = ops->map_page(dev, page, offset, size, dir, NULL); |
206 | debug_dma_map_page(dev, page, offset, size, dir, addr, false); | 211 | debug_dma_map_page(dev, page, offset, size, dir, addr, false); |
207 | 212 | ||