aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/dma-debug.h20
-rw-r--r--lib/dma-debug.c32
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
71extern void debug_dma_sync_sg_for_cpu(struct device *dev,
72 struct scatterlist *sg,
73 int nelems, int direction);
74
75extern 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
73static inline void dma_debug_init(u32 num_entries) 81static 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
147static inline void debug_dma_sync_sg_for_cpu(struct device *dev,
148 struct scatterlist *sg,
149 int nelems, int direction)
150{
151}
152
153static 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}
783EXPORT_SYMBOL(debug_dma_sync_single_range_for_device); 783EXPORT_SYMBOL(debug_dma_sync_single_range_for_device);
784 784
785void 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}
799EXPORT_SYMBOL(debug_dma_sync_sg_for_cpu);
800
801void 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}
815EXPORT_SYMBOL(debug_dma_sync_sg_for_device);
816