[PATCH] drm/xe: Drop EXEC_QUEUE_FLAG_BANNED
Cavitt, Jonathan
jonathan.cavitt at intel.com
Wed Jun 5 21:01:06 UTC 2024
-----Original Message-----
From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Matthew Brost
Sent: Tuesday, June 4, 2024 11:47 AM
To: intel-xe at lists.freedesktop.org
Cc: Brost, Matthew <matthew.brost at intel.com>
Subject: [PATCH] drm/xe: Drop EXEC_QUEUE_FLAG_BANNED
>
> Clean up laying violation of setting q->flags EXEC_QUEUE_FLAG_BANNED bit
> in GuC backend. Move banned to GuC owned bit and report banned status to
> upper layers via reset_status vfunc. This is a slight change in behavior
> as reset_status returns true if wedged or killed bits set too, but in
> all of these cases submission to queue is no longer allowed.
>
> Signed-off-by: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_exec.c | 2 +-
> drivers/gpu/drm/xe/xe_exec_queue.c | 2 +-
> drivers/gpu/drm/xe/xe_exec_queue_types.h | 12 +++++-------
> drivers/gpu/drm/xe/xe_guc_submit.c | 10 ++++++----
> 4 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_exec.c b/drivers/gpu/drm/xe/xe_exec.c
> index 97eeb973e897..4cf6c6ab4866 100644
> --- a/drivers/gpu/drm/xe/xe_exec.c
> +++ b/drivers/gpu/drm/xe/xe_exec.c
> @@ -141,7 +141,7 @@ int xe_exec_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> q->width != args->num_batch_buffer))
> return -EINVAL;
>
> - if (XE_IOCTL_DBG(xe, q->flags & EXEC_QUEUE_FLAG_BANNED)) {
> + if (XE_IOCTL_DBG(xe, q->ops->reset_status(q))) {
> err = -ECANCELED;
> goto err_exec_queue;
> }
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index 27215075c799..cf45df0328da 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -677,7 +677,7 @@ int xe_exec_queue_get_property_ioctl(struct drm_device *dev, void *data,
>
> switch (args->property) {
> case DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN:
> - args->value = !!(q->flags & EXEC_QUEUE_FLAG_BANNED);
> + args->value = q->ops->reset_status(q);
LGTM.
Maybe migrating over to using q->ops->reset_status could be done later, and
instead we could just check the EXEC_QUEUE_STATE_BANNED flag directly for
now, saving the change to reset_status for a separate patch. That way, we'd
have more room to justify this change in the commit message separately from
the one made to the EXEC_QUEUE_FLAG_BANNED. But it's not strictly
necessary, IMO.
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt
> ret = 0;
> break;
> default:
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> index 18d8b2a60928..f0c5f82ce7e3 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
> +++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> @@ -70,18 +70,16 @@ struct xe_exec_queue {
> */
> struct dma_fence *last_fence;
>
> -/* queue no longer allowed to submit */
> -#define EXEC_QUEUE_FLAG_BANNED BIT(0)
> /* queue used for kernel submission only */
> -#define EXEC_QUEUE_FLAG_KERNEL BIT(1)
> +#define EXEC_QUEUE_FLAG_KERNEL BIT(0)
> /* kernel engine only destroyed at driver unload */
> -#define EXEC_QUEUE_FLAG_PERMANENT BIT(2)
> +#define EXEC_QUEUE_FLAG_PERMANENT BIT(1)
> /* for VM jobs. Caller needs to hold rpm ref when creating queue with this flag */
> -#define EXEC_QUEUE_FLAG_VM BIT(3)
> +#define EXEC_QUEUE_FLAG_VM BIT(2)
> /* child of VM queue for multi-tile VM jobs */
> -#define EXEC_QUEUE_FLAG_BIND_ENGINE_CHILD BIT(4)
> +#define EXEC_QUEUE_FLAG_BIND_ENGINE_CHILD BIT(3)
> /* kernel exec_queue only, set priority to highest level */
> -#define EXEC_QUEUE_FLAG_HIGH_PRIORITY BIT(5)
> +#define EXEC_QUEUE_FLAG_HIGH_PRIORITY BIT(4)
>
> /**
> * @flags: flags for this exec queue, should statically setup aside from ban
> diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
> index 47aab04cf34f..4464ba337d12 100644
> --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> @@ -61,6 +61,7 @@ exec_queue_to_guc(struct xe_exec_queue *q)
> #define EXEC_QUEUE_STATE_RESET (1 << 6)
> #define EXEC_QUEUE_STATE_KILLED (1 << 7)
> #define EXEC_QUEUE_STATE_WEDGED (1 << 8)
> +#define EXEC_QUEUE_STATE_BANNED (1 << 9)
>
> static bool exec_queue_registered(struct xe_exec_queue *q)
> {
> @@ -134,12 +135,12 @@ static void set_exec_queue_destroyed(struct xe_exec_queue *q)
>
> static bool exec_queue_banned(struct xe_exec_queue *q)
> {
> - return (q->flags & EXEC_QUEUE_FLAG_BANNED);
> + return atomic_read(&q->guc->state) & EXEC_QUEUE_STATE_BANNED;
> }
>
> static void set_exec_queue_banned(struct xe_exec_queue *q)
> {
> - q->flags |= EXEC_QUEUE_FLAG_BANNED;
> + atomic_or(EXEC_QUEUE_STATE_BANNED, &q->guc->state);
> }
>
> static bool exec_queue_suspended(struct xe_exec_queue *q)
> @@ -189,8 +190,9 @@ static void set_exec_queue_wedged(struct xe_exec_queue *q)
>
> static bool exec_queue_killed_or_banned_or_wedged(struct xe_exec_queue *q)
> {
> - return exec_queue_banned(q) || (atomic_read(&q->guc->state) &
> - (EXEC_QUEUE_STATE_WEDGED | EXEC_QUEUE_STATE_KILLED));
> + return (atomic_read(&q->guc->state) &
> + (EXEC_QUEUE_STATE_WEDGED | EXEC_QUEUE_STATE_KILLED |
> + EXEC_QUEUE_STATE_BANNED));
> }
>
> #ifdef CONFIG_PROVE_LOCKING
> --
> 2.34.1
>
>
More information about the Intel-xe
mailing list