Commit 0e514878 authored by Nirmoy Das's avatar Nirmoy Das
Browse files

drm/i915: Implement for_each_sgt_daddr_next



Implement a way to iterate over sgt with pre-initialized
sgt_iter state.

Signed-off-by: default avatarNirmoy Das <nirmoy.das@intel.com>
Reviewed-by: default avatarOak Zeng <oak.zeng@intel.com>
Reviewed-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230926083742.14740-4-nirmoy.das@intel.com
parent b3527499
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -171,6 +171,9 @@ struct intel_gt;
#define for_each_sgt_daddr(__dp, __iter, __sgt) \
	__for_each_sgt_daddr(__dp, __iter, __sgt, I915_GTT_PAGE_SIZE)

#define for_each_sgt_daddr_next(__dp, __iter) \
	__for_each_daddr_next(__dp, __iter, I915_GTT_PAGE_SIZE)

struct i915_page_table {
	struct drm_i915_gem_object *base;
	union {
+10 −0
Original line number Diff line number Diff line
@@ -91,6 +91,16 @@ static inline struct scatterlist *__sg_next(struct scatterlist *sg)
	     ((__dp) = (__iter).dma + (__iter).curr), (__iter).sgp;	\
	     (((__iter).curr += (__step)) >= (__iter).max) ?		\
	     (__iter) = __sgt_iter(__sg_next((__iter).sgp), true), 0 : 0)
/**
 * __for_each_daddr_next - iterates over the device addresses with pre-initialized iterator.
 * @__dp:	Device address (output)
 * @__iter:	'struct sgt_iter' (iterator state, external)
 * @__step:	step size
 */
#define __for_each_daddr_next(__dp, __iter, __step)                  \
	for (; ((__dp) = (__iter).dma + (__iter).curr), (__iter).sgp;   \
	     (((__iter).curr += (__step)) >= (__iter).max) ?            \
	     (__iter) = __sgt_iter(__sg_next((__iter).sgp), true), 0 : 0)

/**
 * for_each_sgt_page - iterate over the pages of the given sg_table