Re: [Intel-gfx] [PATCH v2] drm/i915/execlists: Always clear ring_pause if we do not submit

2019-06-24 Thread Mika Kuoppala
Chris Wilson  writes:

> In the unlikely case (thank you CI!), we may find ourselves wanting to
> issue a preemption but having no runnable requests left. In this case,
> we set the semaphore before computing the preemption and so must unset
> it before forgetting (or else we leave the machine busywaiting until the
> next request comes along and so likely hang).
>
> v2: Replace readback with only a wmb after asserting the semaphore
>
> Signed-off-by: Chris Wilson 
> Cc: Mika Kuoppala 

Reviewed-by: Mika Kuoppala 

> ---
>  drivers/gpu/drm/i915/gt/intel_lrc.c | 5 -
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c 
> b/drivers/gpu/drm/i915/gt/intel_lrc.c
> index 8017efb36f7b..a392186ca40b 100644
> --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
> @@ -240,7 +240,8 @@ ring_set_paused(const struct intel_engine_cs *engine, int 
> state)
>* until the dword is false.
>*/
>   engine->status_page.addr[I915_GEM_HWS_PREEMPT] = state;
> - wmb();
> + if (state)
> + wmb();
>  }
>  
>  static inline struct i915_priolist *to_priolist(struct rb_node *rb)
> @@ -1249,6 +1250,8 @@ static void execlists_dequeue(struct intel_engine_cs 
> *engine)
>   *port = execlists_schedule_in(last, port - execlists->pending);
>   memset(port + 1, 0, (last_port - port) * sizeof(*port));
>   execlists_submit_ports(engine);
> + } else {
> + ring_set_paused(engine, 0);
>   }
>  }
>  
> -- 
> 2.20.1
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

[Intel-gfx] [PATCH v2] drm/i915/execlists: Always clear ring_pause if we do not submit

2019-06-24 Thread Chris Wilson
In the unlikely case (thank you CI!), we may find ourselves wanting to
issue a preemption but having no runnable requests left. In this case,
we set the semaphore before computing the preemption and so must unset
it before forgetting (or else we leave the machine busywaiting until the
next request comes along and so likely hang).

v2: Replace readback with only a wmb after asserting the semaphore

Signed-off-by: Chris Wilson 
Cc: Mika Kuoppala 
---
 drivers/gpu/drm/i915/gt/intel_lrc.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c 
b/drivers/gpu/drm/i915/gt/intel_lrc.c
index 8017efb36f7b..a392186ca40b 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -240,7 +240,8 @@ ring_set_paused(const struct intel_engine_cs *engine, int 
state)
 * until the dword is false.
 */
engine->status_page.addr[I915_GEM_HWS_PREEMPT] = state;
-   wmb();
+   if (state)
+   wmb();
 }
 
 static inline struct i915_priolist *to_priolist(struct rb_node *rb)
@@ -1249,6 +1250,8 @@ static void execlists_dequeue(struct intel_engine_cs 
*engine)
*port = execlists_schedule_in(last, port - execlists->pending);
memset(port + 1, 0, (last_port - port) * sizeof(*port));
execlists_submit_ports(engine);
+   } else {
+   ring_set_paused(engine, 0);
}
 }
 
-- 
2.20.1

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx