From: Kaitao Cheng <[email protected]> A later change will make list_for_each_entry() cache the next element before entering the loop body. __intel_gt_unset_wedged() drops timelines->lock while waiting on a fence and then restarts the walk from the list head after the lock is reacquired.
Keep the loop open-coded so the next timeline is selected after that restart logic has run. This preserves the existing lock-drop traversal semantics and prepares the code for the list iterator update. Signed-off-by: Kaitao Cheng <[email protected]> --- drivers/gpu/drm/i915/gt/intel_reset.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c index adff482a6c9c..fe0d87e248a7 100644 --- a/drivers/gpu/drm/i915/gt/intel_reset.c +++ b/drivers/gpu/drm/i915/gt/intel_reset.c @@ -1077,7 +1077,9 @@ static bool __intel_gt_unset_wedged(struct intel_gt *gt) * No more can be submitted until we reset the wedged bit. */ spin_lock(&timelines->lock); - list_for_each_entry(tl, &timelines->active_list, link) { + for (tl = list_first_entry(&timelines->active_list, typeof(*tl), link); + !list_entry_is_head(tl, &timelines->active_list, link); + tl = list_next_entry(tl, link)) { struct dma_fence *fence; fence = i915_active_fence_get(&tl->last_request); -- 2.43.0
