diff options
-rw-r--r-- | include/linux/dma-debug.h | 20 | ||||
-rw-r--r-- | lib/dma-debug.c | 32 |
2 files changed, 52 insertions, 0 deletions
diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h index e9b903503adb..4985c6c5237e 100644 --- a/include/linux/dma-debug.h +++ b/include/linux/dma-debug.h | |||
@@ -68,6 +68,14 @@ extern void debug_dma_sync_single_range_for_device(struct device *dev, | |||
68 | unsigned long offset, | 68 | unsigned long offset, |
69 | size_t size, int direction); | 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 | #else /* CONFIG_DMA_API_DEBUG */ | 79 | #else /* CONFIG_DMA_API_DEBUG */ |
72 | 80 | ||
73 | static inline void dma_debug_init(u32 num_entries) | 81 | static inline void dma_debug_init(u32 num_entries) |
@@ -136,6 +144,18 @@ static inline void debug_dma_sync_single_range_for_device(struct device *dev, | |||
136 | { | 144 | { |
137 | } | 145 | } |
138 | 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) | ||
156 | { | ||
157 | } | ||
158 | |||
139 | #endif /* CONFIG_DMA_API_DEBUG */ | 159 | #endif /* CONFIG_DMA_API_DEBUG */ |
140 | 160 | ||
141 | #endif /* __DMA_DEBUG_H */ | 161 | #endif /* __DMA_DEBUG_H */ |
diff --git a/lib/dma-debug.c b/lib/dma-debug.c index d1c0ac1831b7..9d11e89c2ee2 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c | |||
@@ -782,3 +782,35 @@ void debug_dma_sync_single_range_for_device(struct device *dev, | |||
782 | } | 782 | } |
783 | EXPORT_SYMBOL(debug_dma_sync_single_range_for_device); | 783 | EXPORT_SYMBOL(debug_dma_sync_single_range_for_device); |
784 | 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); | ||
816 | |||