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 | |||
