[Intel-gfx] [PATCH 1/2] drm/i915/execlists: Protect peeking at execlists->active

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Oct 9 15:38:43 UTC 2019


On 09/10/2019 11:09, Chris Wilson wrote:
> Now that we dropped the engine->active.lock serialisation from around
> process_csb(), direct submission can run concurrently to the interrupt
> handler. As such execlists->active may be advanced as we dequeue,
> dropping the reference to the request. We need to employ our RCU request
> protection to ensure that the request is not freed too early.
> 
> Fixes: df403069029d ("drm/i915/execlists: Lift process_csb() out of the irq-off spinlock")
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>   drivers/gpu/drm/i915/gt/intel_lrc.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
> index 6db762c509b8..7ea58335f04c 100644
> --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
> @@ -1289,7 +1289,7 @@ static void virtual_xfer_breadcrumbs(struct virtual_engine *ve,
>   static struct i915_request *
>   last_active(const struct intel_engine_execlists *execlists)
>   {
> -	struct i915_request * const *last = execlists->active;
> +	struct i915_request * const *last = READ_ONCE(execlists->active);
>   
>   	while (*last && i915_request_completed(*last))
>   		last++;
> @@ -1981,8 +1981,11 @@ static void process_csb(struct intel_engine_cs *engine)
>   static void __execlists_submission_tasklet(struct intel_engine_cs *const engine)
>   {
>   	lockdep_assert_held(&engine->active.lock);
> -	if (!engine->execlists.pending[0])
> +	if (!engine->execlists.pending[0]) {
> +		rcu_read_lock(); /* protect peeking at execlists->active */
>   		execlists_dequeue(engine);
> +		rcu_read_unlock();
> +	}
>   }
>   
>   /*
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list