Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > Since the execlists_active() is no longer protected by the > engine->active.lock, we need to protect the request pointer with RCU to > prevent it being freed as we evaluate whether or not we need to preempt. > > Fixes: df403069029d ("drm/i915/execlists: Lift process_csb() out of the irq-off spinlock") > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_scheduler.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_scheduler.c b/drivers/gpu/drm/i915/i915_scheduler.c > index d2edb527dcb8..010d67f48ad9 100644 > --- a/drivers/gpu/drm/i915/i915_scheduler.c > +++ b/drivers/gpu/drm/i915/i915_scheduler.c > @@ -202,21 +202,26 @@ static void kick_submission(struct intel_engine_cs *engine, > if (prio <= engine->execlists.queue_priority_hint) > return; > > + rcu_read_lock(); > + > /* Nothing currently active? We're overdue for a submission! */ > inflight = execlists_active(&engine->execlists); > if (!inflight) > - return; > + goto unlock; > > /* > * If we are already the currently executing context, don't > * bother evaluating if we should preempt ourselves. > */ > if (inflight->hw_context == rq->hw_context) > - return; > + goto unlock; > > engine->execlists.queue_priority_hint = prio; > if (need_preempt(prio, rq_prio(inflight))) > tasklet_hi_schedule(&engine->execlists.tasklet); > + > +unlock: > + rcu_read_unlock(); > } > > static void __i915_schedule(struct i915_sched_node *node, > -- > 2.24.0.rc2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx