From: "Summers, Stuart" <stuart.summers@intel.com>
To: "intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>,
"Brost, Matthew" <matthew.brost@intel.com>
Subject: Re: [PATCH v4 10/12] drm/xe: Add exec queue active vfunc
Date: Tue, 13 Jan 2026 21:32:58 +0000 [thread overview]
Message-ID: <ea9d5cbec2dfd68f0cc2f54834b28055ca29ab92.camel@intel.com> (raw)
In-Reply-To: <20260113025232.3504648-11-matthew.brost@intel.com>
On Mon, 2026-01-12 at 18:52 -0800, Matthew Brost wrote:
> If an exec queue is inactive (e.g., not registered or scheduling is
> disabled), TLB invalidations are not issued for that queue. Add a
> virtual function to determine the active state, which TLB
> invalidation
> logic can hook into.
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> ---
> drivers/gpu/drm/xe/xe_exec_queue_types.h | 2 ++
> drivers/gpu/drm/xe/xe_execlist.c | 7 +++++++
> drivers/gpu/drm/xe/xe_guc_submit.c | 6 ++++++
> 3 files changed, 15 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h
> b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> index d3e2789cf5bc..9cca558c5809 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
> +++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> @@ -298,6 +298,8 @@ struct xe_exec_queue_ops {
> void (*resume)(struct xe_exec_queue *q);
> /** @reset_status: check exec queue reset status */
> bool (*reset_status)(struct xe_exec_queue *q);
> + /** @active: check exec queue is active */
> + bool (*active)(struct xe_exec_queue *q);
> };
>
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_execlist.c
> b/drivers/gpu/drm/xe/xe_execlist.c
> index 46c17a18a3f4..e4a2674f48c7 100644
> --- a/drivers/gpu/drm/xe/xe_execlist.c
> +++ b/drivers/gpu/drm/xe/xe_execlist.c
> @@ -469,6 +469,12 @@ static bool
> execlist_exec_queue_reset_status(struct xe_exec_queue *q)
> return false;
> }
>
> +static bool execlist_exec_queue_active(struct xe_exec_queue *q)
> +{
> + /* NIY */
> + return false;
> +}
> +
> static const struct xe_exec_queue_ops execlist_exec_queue_ops = {
> .init = execlist_exec_queue_init,
> .kill = execlist_exec_queue_kill,
> @@ -481,6 +487,7 @@ static const struct xe_exec_queue_ops
> execlist_exec_queue_ops = {
> .suspend_wait = execlist_exec_queue_suspend_wait,
> .resume = execlist_exec_queue_resume,
> .reset_status = execlist_exec_queue_reset_status,
> + .active = execlist_exec_queue_active,
> };
>
> int xe_execlist_init(struct xe_gt *gt)
> diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c
> b/drivers/gpu/drm/xe/xe_guc_submit.c
> index be8fa76baf1d..19282e5ca897 100644
> --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> @@ -2203,6 +2203,11 @@ static bool guc_exec_queue_reset_status(struct
> xe_exec_queue *q)
> return exec_queue_reset(q) ||
> exec_queue_killed_or_banned_or_wedged(q);
> }
>
> +static bool guc_exec_queue_active(struct xe_exec_queue *q)
> +{
> + return exec_queue_enabled(q) &&
> !exec_queue_pending_disable(q);
So I think the requirement here is !exec_queue_pending_disable &&
!exec_queue_destroyed rather than exec_queue_enabled... But if the
context isn't enabled (set runnable to true in GuC), it means hardware
shouldn't be touching any of the associated memory anyway and we
shouldn't be issuing any invalidations, so this still looks ok to me.
It means we'll be doing full invalidations for those I think though
which could add some performance impact in the time between register
and enable. For now though as long as this is working (still doing some
testing on my end and I had some questions in a later patch), we can go
with this.
Thanks,
Stuart
> +}
> +
> /*
> * All of these functions are an abstraction layer which other parts
> of Xe can
> * use to trap into the GuC backend. All of these functions, aside
> from init,
> @@ -2222,6 +2227,7 @@ static const struct xe_exec_queue_ops
> guc_exec_queue_ops = {
> .suspend_wait = guc_exec_queue_suspend_wait,
> .resume = guc_exec_queue_resume,
> .reset_status = guc_exec_queue_reset_status,
> + .active = guc_exec_queue_active,
> };
>
> static void guc_exec_queue_stop(struct xe_guc *guc, struct
> xe_exec_queue *q)
next prev parent reply other threads:[~2026-01-13 21:33 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-13 2:52 [PATCH v4 00/12] Context based TLB invalidations Matthew Brost
2026-01-13 2:52 ` [PATCH v4 01/12] drm/xe: Add normalize_invalidation_range Matthew Brost
2026-01-13 2:52 ` [PATCH v4 02/12] drm/xe: Make usm.asid_to_vm allocation use GFP_NOWAIT Matthew Brost
2026-01-13 2:52 ` [PATCH v4 03/12] drm/xe: Add has_ctx_tlb_inval to device info Matthew Brost
2026-01-13 21:24 ` Summers, Stuart
2026-01-13 2:52 ` [PATCH v4 04/12] drm/xe: Add xe_device_asid_to_vm helper Matthew Brost
2026-01-13 2:52 ` [PATCH v4 05/12] drm/xe: Add vm to exec queues association Matthew Brost
2026-01-13 21:26 ` Summers, Stuart
2026-01-13 2:52 ` [PATCH v4 06/12] drm/xe: Taint TLB invalidation seqno lock with GFP_KERNEL Matthew Brost
2026-01-13 2:52 ` [PATCH v4 07/12] drm/xe: Rename send_tlb_inval_ppgtt to send_tlb_inval_asid_ppgtt Matthew Brost
2026-01-13 2:52 ` [PATCH v4 08/12] drm/xe: Add send_tlb_inval_ppgtt helper Matthew Brost
2026-01-13 2:52 ` [PATCH v4 09/12] drm/xe: Add xe_tlb_inval_idle helper Matthew Brost
2026-01-13 2:52 ` [PATCH v4 10/12] drm/xe: Add exec queue active vfunc Matthew Brost
2026-01-13 21:32 ` Summers, Stuart [this message]
2026-01-13 22:16 ` Matthew Brost
2026-01-13 22:21 ` Summers, Stuart
2026-01-14 21:17 ` Summers, Stuart
2026-01-13 2:52 ` [PATCH v4 11/12] drm/xe: Add context-based invalidation to GuC TLB invalidation backend Matthew Brost
2026-01-13 21:23 ` Summers, Stuart
2026-01-13 22:08 ` Matthew Brost
2026-01-13 23:25 ` Summers, Stuart
2026-01-14 0:25 ` Matthew Brost
2026-01-13 2:52 ` [PATCH v4 12/12] drm/xe: Enable context TLB invalidations for CI Matthew Brost
2026-01-13 3:00 ` ✓ CI.KUnit: success for Context based TLB invalidations (rev4) Patchwork
2026-01-13 3:41 ` ✓ Xe.CI.BAT: " Patchwork
2026-01-13 9:45 ` ✓ Xe.CI.Full: " Patchwork
2026-01-16 0:25 ` [PATCH v4 00/12] Context based TLB invalidations Summers, Stuart
2026-01-16 1:52 ` Matthew Brost
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ea9d5cbec2dfd68f0cc2f54834b28055ca29ab92.camel@intel.com \
--to=stuart.summers@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox