drm/i915/gem: Take timeline->mutex to walk list-of-requests
Though the context is closed and so no more requests can be added to the timeline, retirement can still be removing requests. It can even be removing the very request we are inspecting and so cause us to wander into dead links. Serialise with the retirement by taking the timeline->mutex used for guarding the timeline->requests list. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112404 Fixes:4a31741521
("drm/i915/gem: Refine occupancy test in kill_context()") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191129151845.1092933-1-chris@chris-wilson.co.uk (cherry picked from commit7ce596a803
) Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
This commit is contained in:
parent
3cc44feb98
commit
3ee1a9f5d0
|
@ -368,7 +368,7 @@ static struct intel_engine_cs *active_engine(struct intel_context *ce)
|
|||
if (!ce->timeline)
|
||||
return NULL;
|
||||
|
||||
rcu_read_lock();
|
||||
mutex_lock(&ce->timeline->mutex);
|
||||
list_for_each_entry_reverse(rq, &ce->timeline->requests, link) {
|
||||
if (i915_request_completed(rq))
|
||||
break;
|
||||
|
@ -378,7 +378,7 @@ static struct intel_engine_cs *active_engine(struct intel_context *ce)
|
|||
if (engine)
|
||||
break;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
mutex_unlock(&ce->timeline->mutex);
|
||||
|
||||
return engine;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue