ARM: DMA: add support for DMA debugging
Add ARM support for the DMA debug infrastructure, which allows the DMA API usage to be debugged. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -554,17 +554,20 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||
struct scatterlist *s;
|
||||
int i, j;
|
||||
|
||||
BUG_ON(!valid_dma_direction(dir));
|
||||
|
||||
for_each_sg(sg, s, nents, i) {
|
||||
s->dma_address = dma_map_page(dev, sg_page(s), s->offset,
|
||||
s->dma_address = __dma_map_page(dev, sg_page(s), s->offset,
|
||||
s->length, dir);
|
||||
if (dma_mapping_error(dev, s->dma_address))
|
||||
goto bad_mapping;
|
||||
}
|
||||
debug_dma_map_sg(dev, sg, nents, nents, dir);
|
||||
return nents;
|
||||
|
||||
bad_mapping:
|
||||
for_each_sg(sg, s, i, j)
|
||||
dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir);
|
||||
__dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dma_map_sg);
|
||||
@@ -585,8 +588,10 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||
struct scatterlist *s;
|
||||
int i;
|
||||
|
||||
debug_dma_unmap_sg(dev, sg, nents, dir);
|
||||
|
||||
for_each_sg(sg, s, nents, i)
|
||||
dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir);
|
||||
__dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_unmap_sg);
|
||||
|
||||
@@ -611,6 +616,8 @@ void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
|
||||
__dma_page_dev_to_cpu(sg_page(s), s->offset,
|
||||
s->length, dir);
|
||||
}
|
||||
|
||||
debug_dma_sync_sg_for_cpu(dev, sg, nents, dir);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_sync_sg_for_cpu);
|
||||
|
||||
@@ -635,5 +642,16 @@ void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
|
||||
__dma_page_cpu_to_dev(sg_page(s), s->offset,
|
||||
s->length, dir);
|
||||
}
|
||||
|
||||
debug_dma_sync_sg_for_device(dev, sg, nents, dir);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_sync_sg_for_device);
|
||||
|
||||
#define PREALLOC_DMA_DEBUG_ENTRIES 4096
|
||||
|
||||
static int __init dma_debug_do_init(void)
|
||||
{
|
||||
dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
|
||||
return 0;
|
||||
}
|
||||
fs_initcall(dma_debug_do_init);
|
||||
|
||||
Reference in New Issue
Block a user