Re: [Intel-gfx] [PATCH] drm/i915/gt: Close race between cacheline_retire and free
Chris Wilson writes: > If the cacheline may still be busy, atomically mark it for future > release, and only if we can determine that it will never be used again, > immediately free it. > > Closes: https://gitlab.freedesktop.org/drm/intel/issues/1392 > Signed-off-by: Chris Wilson > Cc: Tvrtko Ursulin > Cc: Mika Kuoppala > Cc: Matthew Auld Reviewed-by: Mika Kuoppala > --- > drivers/gpu/drm/i915/gt/intel_timeline.c | 8 ++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.c > b/drivers/gpu/drm/i915/gt/intel_timeline.c > index 54e1e55f3c81..91debbc97c9a 100644 > --- a/drivers/gpu/drm/i915/gt/intel_timeline.c > +++ b/drivers/gpu/drm/i915/gt/intel_timeline.c > @@ -192,11 +192,15 @@ static void cacheline_release(struct > intel_timeline_cacheline *cl) > > static void cacheline_free(struct intel_timeline_cacheline *cl) > { > + if (!i915_active_acquire_if_busy(&cl->active)) { > + __idle_cacheline_free(cl); > + return; > + } > + > GEM_BUG_ON(ptr_test_bit(cl->vaddr, CACHELINE_FREE)); > cl->vaddr = ptr_set_bit(cl->vaddr, CACHELINE_FREE); > > - if (i915_active_is_idle(&cl->active)) > - __idle_cacheline_free(cl); > + i915_active_release(&cl->active); > } > > int intel_timeline_init(struct intel_timeline *timeline, > -- > 2.25.1 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH] drm/i915/gt: Close race between cacheline_retire and free
If the cacheline may still be busy, atomically mark it for future release, and only if we can determine that it will never be used again, immediately free it. Closes: https://gitlab.freedesktop.org/drm/intel/issues/1392 Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin Cc: Mika Kuoppala Cc: Matthew Auld --- drivers/gpu/drm/i915/gt/intel_timeline.c | 8 ++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.c b/drivers/gpu/drm/i915/gt/intel_timeline.c index 54e1e55f3c81..91debbc97c9a 100644 --- a/drivers/gpu/drm/i915/gt/intel_timeline.c +++ b/drivers/gpu/drm/i915/gt/intel_timeline.c @@ -192,11 +192,15 @@ static void cacheline_release(struct intel_timeline_cacheline *cl) static void cacheline_free(struct intel_timeline_cacheline *cl) { + if (!i915_active_acquire_if_busy(&cl->active)) { + __idle_cacheline_free(cl); + return; + } + GEM_BUG_ON(ptr_test_bit(cl->vaddr, CACHELINE_FREE)); cl->vaddr = ptr_set_bit(cl->vaddr, CACHELINE_FREE); - if (i915_active_is_idle(&cl->active)) - __idle_cacheline_free(cl); + i915_active_release(&cl->active); } int intel_timeline_init(struct intel_timeline *timeline, -- 2.25.1 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx