[Intel-gfx] [PATCH] drm/i915: Do not poison i915_request.link on removal

Mika Kuoppala mika.kuoppala at linux.intel.com
Fri Mar 6 15:04:24 UTC 2020


Chris Wilson <chris at chris-wilson.co.uk> writes:

> Do not poison the timeline link on the i915_request to allow both
> forward/backward list traversal under RCU.
>
> [ 9759.139229] RIP: 0010:active_request+0x2a/0x90 [i915]
> [ 9759.139240] Code: 41 56 41 55 41 54 55 48 89 fd 53 48 89 f3 48 83 c5 60 e8 49 de dc e0 48 8b 83 e8 01 00 00 48 39 c5 74 12 48 8d 90 20 fe ff ff <48> 8b 80 50 fe ff ff a8 01 74 11 e8 66 20 dd e0 48 89 d8 5b 5d 41
> [ 9759.139251] RSP: 0018:ffffc9000014ce80 EFLAGS: 00010012
> [ 9759.139260] RAX: dead000000000122 RBX: ffff888817cac040 RCX: 0000000000022000
> [ 9759.139267] RDX: deacffffffffff42 RSI: ffff888817cac040 RDI: ffff888851fee900
> [ 9759.139275] RBP: ffff888851fee960 R08: 000000000000001a R09: ffffffffa04702e0
> [ 9759.139282] R10: ffffffff82187ea0 R11: 0000000000000002 R12: 0000000000000004
> [ 9759.139289] R13: ffffffffa04d5179 R14: ffff8887f994ae40 R15: ffff888857b9a068
> [ 9759.139296] FS:  0000000000000000(0000) GS:ffff88885ed80000(0000) knlGS:0000000000000000
> [ 9759.139304] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 9759.139311] CR2: 00007fff5bdec000 CR3: 00000008534fe001 CR4: 00000000001606e0
> [ 9759.139318] Call Trace:
> [ 9759.139325]  <IRQ>
> [ 9759.139389]  execlists_reset+0x14d/0x310 [i915]
> [ 9759.139400]  ? _raw_spin_unlock_irqrestore+0xf/0x30
> [ 9759.139445]  ? fwtable_read32+0x90/0x230 [i915]
> [ 9759.139499]  execlists_submission_tasklet+0xf6/0x150 [i915]
> [ 9759.139508]  tasklet_action_common.isra.17+0x32/0xa0
> [ 9759.139516]  __do_softirq+0x114/0x3dc
> [ 9759.139525]  ? handle_irq_event_percpu+0x59/0x70
> [ 9759.139533]  irq_exit+0xa1/0xc0
> [ 9759.139540]  do_IRQ+0x76/0x150
> [ 9759.139547]  common_interrupt+0xf/0xf
> [ 9759.139554]  </IRQ>
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>

Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>

> ---
>  drivers/gpu/drm/i915/i915_request.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
> index 66efd16c4850..5de3989b6c4f 100644
> --- a/drivers/gpu/drm/i915/i915_request.c
> +++ b/drivers/gpu/drm/i915/i915_request.c
> @@ -290,7 +290,7 @@ bool i915_request_retire(struct i915_request *rq)
>  	spin_unlock_irq(&rq->lock);
>  
>  	remove_from_client(rq);
> -	list_del_rcu(&rq->link);
> +	__list_del_entry(&rq->link); /* poison neither prev/next (RCU walks) */
>  
>  	intel_context_exit(rq->context);
>  	intel_context_unpin(rq->context);
> -- 
> 2.25.1


More information about the Intel-gfx mailing list