Commit a31fba5d68cebf8f5fefd03e079dab94875e25f5
1 parent
948408ba3e
Exists in
master
and in
4 other branches
dma-debug: add checks for sync_single_sg_*
Impact: add debug callbacks for dma_sync_sg_* functions Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Showing 2 changed files with 52 additions and 0 deletions Side-by-side Diff
include/linux/dma-debug.h
... | ... | @@ -68,6 +68,14 @@ |
68 | 68 | unsigned long offset, |
69 | 69 | size_t size, int direction); |
70 | 70 | |
71 | +extern void debug_dma_sync_sg_for_cpu(struct device *dev, | |
72 | + struct scatterlist *sg, | |
73 | + int nelems, int direction); | |
74 | + | |
75 | +extern void debug_dma_sync_sg_for_device(struct device *dev, | |
76 | + struct scatterlist *sg, | |
77 | + int nelems, int direction); | |
78 | + | |
71 | 79 | #else /* CONFIG_DMA_API_DEBUG */ |
72 | 80 | |
73 | 81 | static inline void dma_debug_init(u32 num_entries) |
... | ... | @@ -133,6 +141,18 @@ |
133 | 141 | unsigned long offset, |
134 | 142 | size_t size, |
135 | 143 | int direction) |
144 | +{ | |
145 | +} | |
146 | + | |
147 | +static inline void debug_dma_sync_sg_for_cpu(struct device *dev, | |
148 | + struct scatterlist *sg, | |
149 | + int nelems, int direction) | |
150 | +{ | |
151 | +} | |
152 | + | |
153 | +static inline void debug_dma_sync_sg_for_device(struct device *dev, | |
154 | + struct scatterlist *sg, | |
155 | + int nelems, int direction) | |
136 | 156 | { |
137 | 157 | } |
138 | 158 |
lib/dma-debug.c
... | ... | @@ -781,4 +781,36 @@ |
781 | 781 | check_sync(dev, dma_handle, size, offset, direction, false); |
782 | 782 | } |
783 | 783 | EXPORT_SYMBOL(debug_dma_sync_single_range_for_device); |
784 | + | |
785 | +void debug_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, | |
786 | + int nelems, int direction) | |
787 | +{ | |
788 | + struct scatterlist *s; | |
789 | + int i; | |
790 | + | |
791 | + if (unlikely(global_disable)) | |
792 | + return; | |
793 | + | |
794 | + for_each_sg(sg, s, nelems, i) { | |
795 | + check_sync(dev, s->dma_address, s->dma_length, 0, | |
796 | + direction, true); | |
797 | + } | |
798 | +} | |
799 | +EXPORT_SYMBOL(debug_dma_sync_sg_for_cpu); | |
800 | + | |
801 | +void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, | |
802 | + int nelems, int direction) | |
803 | +{ | |
804 | + struct scatterlist *s; | |
805 | + int i; | |
806 | + | |
807 | + if (unlikely(global_disable)) | |
808 | + return; | |
809 | + | |
810 | + for_each_sg(sg, s, nelems, i) { | |
811 | + check_sync(dev, s->dma_address, s->dma_length, 0, | |
812 | + direction, false); | |
813 | + } | |
814 | +} | |
815 | +EXPORT_SYMBOL(debug_dma_sync_sg_for_device); |