[Intel-gfx] [PATCH v4] drm/i915/execlists: Always clear preempt status on cancelling all

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Jul 16 12:59:16 UTC 2018


On 16/07/2018 13:56, Chris Wilson wrote:
> On reset/wedging, we cancel all pending replies from the HW and we also
> want to cancel an outstanding preemption event. Since we use the same
> function to cancel the pending replies for reset and for a preemption
> event, we can simply clear the active tracking for all.
> 
> v2: Keep execlists_user_end() markup for wedging
> v3: Move assignment to inline to hide the bare assignment.
> v4: Alternate version, use user_end for clearing all leftovers
> 
> Fixes: 60a943245413 ("drm/i915/execlists: Drop clear_gtiir() on GPU reset")
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>   drivers/gpu/drm/i915/intel_lrc.c        | 2 +-
>   drivers/gpu/drm/i915/intel_ringbuffer.h | 6 ++++++
>   2 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 6fef9d130d55..f9fb32efb97f 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -388,7 +388,7 @@ execlists_user_begin(struct intel_engine_execlists *execlists,
>   inline void
>   execlists_user_end(struct intel_engine_execlists *execlists)
>   {
> -	execlists_clear_active(execlists, EXECLISTS_ACTIVE_USER);
> +	execlists_clear_all_active(execlists);

Doesn't seem right to break separation of flag domains.

Regards,

Tvrtko

>   }
>   
>   static inline void
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index d1eee08e5f6b..665b59ba1f45 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -683,6 +683,12 @@ execlists_clear_active(struct intel_engine_execlists *execlists,
>   	__clear_bit(bit, (unsigned long *)&execlists->active);
>   }
>   
> +static inline void
> +execlists_clear_all_active(struct intel_engine_execlists *execlists)
> +{
> +	execlists->active = 0;
> +}
> +
>   static inline bool
>   execlists_is_active(const struct intel_engine_execlists *execlists,
>   		    unsigned int bit)
> 


More information about the Intel-gfx mailing list