[PATCH v2 6/9] drm/xe: Add xe_migrate_job_lock/unlock helpers

Summers, Stuart stuart.summers at intel.com
Tue Jul 15 22:48:00 UTC 2025


On Wed, 2025-07-02 at 16:42 -0700, Matthew Brost wrote:
> Add xe_migrate_job_lock/unlock helpers is used ensure ordering when
> issuing GT TLB invalidation jobs.
> 
> v2:
>  - Fix multi-line comments (checkpatch)
> 
> Signed-off-by: Matthew Brost <matthew.brost at intel.com>

IMO this could be squashed with the patch after since there aren't any
users in this patch. But the code itself looks ok to me.

> ---
>  drivers/gpu/drm/xe/xe_migrate.c | 36
> +++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_migrate.h |  4 ++++
>  2 files changed, 40 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c
> b/drivers/gpu/drm/xe/xe_migrate.c
> index b5f85162b9ed..1f57adcbb535 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -1917,6 +1917,42 @@ int xe_migrate_access_memory(struct xe_migrate
> *m, struct xe_bo *bo,
>         return IS_ERR(fence) ? PTR_ERR(fence) : 0;
>  }
>  
> +/**
> + * xe_migrate_job_lock() - Lock migrate job lock
> + * @m: The migration context.
> + * @q: Queue associated with the operation which requires a lock
> + *
> + * Lock the migrate job lock if the queue is a migration queue,
> otherwise
> + * assert the VM's dma-resv is held (user queue's have own locking).
> + */
> +void xe_migrate_job_lock(struct xe_migrate *m, struct xe_exec_queue
> *q)
> +{
> +       bool is_migrate = q == m->q;

Maybe not worth it, but we're doing these same calculations in
xe_migrate.c. Should we just add a helper?

Either way for the above 2, the code looks ok to me:
Reviewed-by: Stuart Summers <stuart.summers at intel.com>

Thanks,
Stuart

> +
> +       if (is_migrate)
> +               mutex_lock(&m->job_mutex);
> +       else
> +               xe_vm_assert_held(q->vm);       /* User queues VM's
> should be locked */
> +}
> +
> +/**
> + * xe_migrate_job_unlock() - Unlock migrate job lock
> + * @m: The migration context.
> + * @q: Queue associated with the operation which requires a lock
> + *
> + * Unlock the migrate job lock if the queue is a migration queue,
> otherwise
> + * assert the VM's dma-resv is held (user queue's have own locking).
> + */
> +void xe_migrate_job_unlock(struct xe_migrate *m, struct
> xe_exec_queue *q)
> +{
> +       bool is_migrate = q == m->q;
> +
> +       if (is_migrate)
> +               mutex_unlock(&m->job_mutex);
> +       else
> +               xe_vm_assert_held(q->vm);       /* User queues VM's
> should be locked */
> +}
> +
>  #if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
>  #include "tests/xe_migrate.c"
>  #endif
> diff --git a/drivers/gpu/drm/xe/xe_migrate.h
> b/drivers/gpu/drm/xe/xe_migrate.h
> index fb9839c1bae0..e9d83d320f8c 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.h
> +++ b/drivers/gpu/drm/xe/xe_migrate.h
> @@ -134,4 +134,8 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
>  void xe_migrate_wait(struct xe_migrate *m);
>  
>  struct xe_exec_queue *xe_tile_migrate_exec_queue(struct xe_tile
> *tile);
> +
> +void xe_migrate_job_lock(struct xe_migrate *m, struct xe_exec_queue
> *q);
> +void xe_migrate_job_unlock(struct xe_migrate *m, struct
> xe_exec_queue *q);
> +
>  #endif



More information about the Intel-xe mailing list