Signed-off-by: Dave Gordon <[email protected]>
Cc: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/i915_drv.h | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 01cde0f..53ff499 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2287,6 +2287,25 @@ __sgt_iter(struct scatterlist *sgl, bool dma)
 }
 
 /**
+ * __sg_next - return the next scatterlist entry in a list
+ * @sg:                The current sg entry
+ *
+ * Description:
+ *   If the entry is the last, return NULL; otherwise, step to the next
+ *   element in the array (@sg@+1). If that's a chain pointer, follow it;
+ *   otherwise just return the pointer to the current element.
+ **/
+static inline struct scatterlist *__sg_next(struct scatterlist *sg)
+{
+#ifdef CONFIG_DEBUG_SG
+       BUG_ON(sg->sg_magic != SG_MAGIC);
+#endif
+       return sg_is_last(sg) ? NULL :
+               likely(!sg_is_chain(++sg)) ? sg :
+               sg_chain_ptr(sg);
+}
+
+/**
  * for_each_sgt_dma - iterate over the DMA addresses of the given sg_table
  * @__dmap:    DMA address (output)
  * @__iter:    'struct sgt_iter' (iterator state, internal)
@@ -2296,7 +2315,7 @@ __sgt_iter(struct scatterlist *sgl, bool dma)
        for ((__iter) = __sgt_iter((__sgt)->sgl, true);                 \
             ((__dmap) = (__iter).ix.dma + (__iter).curr);              \
             (((__iter).curr += PAGE_SIZE) < (__iter).max) ||           \
-               ((__iter) = __sgt_iter(sg_next((__iter).sgp), true), 0))
+               ((__iter) = __sgt_iter(__sg_next((__iter).sgp), true), 0))
 
 /**
  * for_each_sgt_page - iterate over the pages of the given sg_table
@@ -2309,7 +2328,7 @@ __sgt_iter(struct scatterlist *sgl, bool dma)
             ((__pp) = (__iter).ix.pfn == 0 ? NULL :                    \
                   pfn_to_page((__iter).ix.pfn + ((__iter).curr >> 
PAGE_SHIFT)));\
             (((__iter).curr += PAGE_SIZE) < (__iter).max) ||           \
-               ((__iter) = __sgt_iter(sg_next((__iter).sgp), false), 0))
+               ((__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0))
 
 /**
  * Request queue structure.
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to