Re: [Intel-gfx] [PATCH] drm/i915/gt: Close race between cacheline_retire and free

2020-03-06 Thread Mika Kuoppala
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

2020-03-06 Thread Chris Wilson
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