Quoting Tvrtko Ursulin (2017-12-13 10:54:55) > > On 13/12/2017 09:48, Chris Wilson wrote: > > It is illegal to perform an immediate free of the struct irq_work from > > inside the irq_work callback (as irq_work_run_list modifies work->flags > > after execution of the work->func()). As we use the irq_work to > > coordinate the freeing of the callback from two different softirq paths, > > we need to defer the kfree from inside our irq_work callback, for which > > we can use kfree_rcu. > > > > Fixes: 81c0ed21aa91 ("drm/i915/fence: Avoid del_timer_sync() from inside a timer") > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > > --- > > drivers/gpu/drm/i915/i915_sw_fence.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c > > index e8ca67a129d2..ac236b88c99c 100644 > > --- a/drivers/gpu/drm/i915/i915_sw_fence.c > > +++ b/drivers/gpu/drm/i915/i915_sw_fence.c > > @@ -367,6 +367,7 @@ struct i915_sw_dma_fence_cb { > > struct dma_fence *dma; > > struct timer_list timer; > > struct irq_work work; > > + struct rcu_head rcu; > > }; > > > > static void timer_i915_sw_fence_wake(struct timer_list *t) > > @@ -406,7 +407,7 @@ static void irq_i915_sw_fence_work(struct irq_work *wrk) > > del_timer_sync(&cb->timer); > > dma_fence_put(cb->dma); > > > > - kfree(cb); > > + kfree_rcu(cb, rcu); > > } > > > > int i915_sw_fence_await_dma_fence(struct i915_sw_fence *fence, > > > > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Ta, applied. Still hopeful this was more than a one-off on my poor Braswell. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx