[Intel-xe] [PATCH v4 4/7] drm/xe/ct: serialise fast_lock during CT disable

Matthew Brost matthew.brost at intel.com
Thu Jul 6 04:00:17 UTC 2023


On Wed, Jul 05, 2023 at 05:06:07PM +0100, Matthew Auld wrote:
> The fast-path CT could be running as we enter a runtime-suspend or
> potentially a GT reset, however here we only use the ct->fast_lock and
> not the full ct->lock. Before disabling the CT, also serialise against
> the fast_lock to ensure any in-progress work finishes before we start
> nuking the CT related stuff. Once we disable ct->enabled and drop the
> lock, any new work should fail gracefully, and anything that was in
> progress should be finished.
> 
> Signed-off-by: Matthew Auld <matthew.auld at intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>

Reviewed-by: Matthew Brost <matthew.brost at intel.com>

> Cc: José Roberto de Souza <jose.souza at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_guc_ct.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> index f8c1a2ca89f7..811518230262 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> @@ -301,8 +301,10 @@ int xe_guc_ct_enable(struct xe_guc_ct *ct)
>  		goto err_out;
>  
>  	mutex_lock(&ct->lock);
> +	spin_lock_irq(&ct->fast_lock);
>  	ct->g2h_outstanding = 0;
>  	ct->enabled = true;
> +	spin_unlock_irq(&ct->fast_lock);
>  	mutex_unlock(&ct->lock);
>  
>  	smp_mb();
> @@ -319,8 +321,10 @@ int xe_guc_ct_enable(struct xe_guc_ct *ct)
>  
>  void xe_guc_ct_disable(struct xe_guc_ct *ct)
>  {
> -	mutex_lock(&ct->lock);
> -	ct->enabled = false;
> +	mutex_lock(&ct->lock); /* Serialise dequeue_one_g2h() */
> +	spin_lock_irq(&ct->fast_lock); /* Serialise CT fast-path */
> +	ct->enabled = false; /* Finally disable CT communication */
> +	spin_unlock_irq(&ct->fast_lock);
>  	mutex_unlock(&ct->lock);
>  
>  	xa_destroy(&ct->fence_lookup);
> -- 
> 2.41.0
> 


More information about the Intel-xe mailing list