Commit a31fba5d68cebf8f5fefd03e079dab94875e25f5

Authored by Joerg Roedel
1 parent 948408ba3e

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  
... ... @@ -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);