From: Brian Nguyen <brian3.nguyen@intel.com>
To: intel-xe@lists.freedesktop.org
Cc: Brian Nguyen <brian3.nguyen@intel.com>,
Matthew Brost <matthew.brost@intel.com>,
Shuicheng Lin <shuicheng.lin@intel.com>,
Stuart Summers <stuart.summers@intel.com>
Subject: [PATCH v4 2/3] drm/xe: Move page reclaim done_handler to own func
Date: Thu, 5 Mar 2026 17:15:49 +0000 [thread overview]
Message-ID: <20260305171546.67691-7-brian3.nguyen@intel.com> (raw)
In-Reply-To: <20260305171546.67691-5-brian3.nguyen@intel.com>
Originally, page reclamation is handled by the same fence as tlb
invalidation and uses its seqno, so there was no reason to separate out
the handlers. However in hindsight, for readability, and possible
future changes, it seems more beneficial to move this all out to its own
function.
Signed-off-by: Brian Nguyen <brian3.nguyen@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Shuicheng Lin <shuicheng.lin@intel.com>
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
---
drivers/gpu/drm/xe/xe_guc_ct.c | 23 ++++++++---------------
drivers/gpu/drm/xe/xe_page_reclaim.c | 20 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_page_reclaim.h | 3 +++
3 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 496c6c77bee6..581a9c2e28ed 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -31,6 +31,7 @@
#include "xe_guc_submit.h"
#include "xe_guc_tlb_inval.h"
#include "xe_map.h"
+#include "xe_page_reclaim.h"
#include "xe_pm.h"
#include "xe_sleep.h"
#include "xe_sriov_vf.h"
@@ -1629,17 +1630,11 @@ static int process_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
ret = xe_guc_pagefault_handler(guc, payload, adj_len);
break;
case XE_GUC_ACTION_TLB_INVALIDATION_DONE:
- case XE_GUC_ACTION_PAGE_RECLAMATION_DONE:
- /*
- * Page reclamation is an extension of TLB invalidation. Both
- * operations share the same seqno and fence. When either
- * action completes, we need to signal the corresponding
- * fence. Since the handling logic (lookup fence by seqno,
- * fence signalling) is identical, we use the same handler
- * for both G2H events.
- */
ret = xe_guc_tlb_inval_done_handler(guc, payload, adj_len);
break;
+ case XE_GUC_ACTION_PAGE_RECLAMATION_DONE:
+ ret = xe_guc_page_reclaim_done_handler(guc, payload, adj_len);
+ break;
case XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF:
ret = xe_guc_relay_process_guc2pf(&guc->relay, hxg, hxg_len);
break;
@@ -1847,15 +1842,13 @@ static void g2h_fast_path(struct xe_guc_ct *ct, u32 *msg, u32 len)
ret = xe_guc_pagefault_handler(guc, payload, adj_len);
break;
case XE_GUC_ACTION_TLB_INVALIDATION_DONE:
- case XE_GUC_ACTION_PAGE_RECLAMATION_DONE:
- /*
- * Seqno and fence handling of page reclamation and TLB
- * invalidation is identical, so we can use the same handler
- * for both actions.
- */
__g2h_release_space(ct, len);
ret = xe_guc_tlb_inval_done_handler(guc, payload, adj_len);
break;
+ case XE_GUC_ACTION_PAGE_RECLAMATION_DONE:
+ __g2h_release_space(ct, len);
+ ret = xe_guc_page_reclaim_done_handler(guc, payload, adj_len);
+ break;
default:
xe_gt_warn(gt, "NOT_POSSIBLE\n");
}
diff --git a/drivers/gpu/drm/xe/xe_page_reclaim.c b/drivers/gpu/drm/xe/xe_page_reclaim.c
index e13c71a89da2..60b0fda59ce3 100644
--- a/drivers/gpu/drm/xe/xe_page_reclaim.c
+++ b/drivers/gpu/drm/xe/xe_page_reclaim.c
@@ -11,6 +11,7 @@
#include "xe_page_reclaim.h"
#include "xe_gt_stats.h"
+#include "xe_guc_tlb_inval.h"
#include "xe_macros.h"
#include "xe_pat.h"
#include "xe_sa.h"
@@ -130,3 +131,22 @@ int xe_page_reclaim_list_alloc_entries(struct xe_page_reclaim_list *prl)
return page ? 0 : -ENOMEM;
}
+
+/**
+ * xe_guc_page_reclaim_done_handler() - Page reclaim done handler
+ * @guc: guc
+ * @msg: message indicating page reclamation done
+ * @len: length of message
+ *
+ * Page reclamation is an extension of TLB invalidation. Both
+ * operations share the same seqno and fence. When either
+ * action completes, we need to signal the corresponding
+ * fence. Since the handling logic is currently identical, this
+ * function delegates to the TLB invalidation handler.
+ *
+ * Return: 0 on success, -EPROTO for malformed messages.
+ */
+int xe_guc_page_reclaim_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
+{
+ return xe_guc_tlb_inval_done_handler(guc, msg, len);
+}
diff --git a/drivers/gpu/drm/xe/xe_page_reclaim.h b/drivers/gpu/drm/xe/xe_page_reclaim.h
index 3dd103e37beb..0412611f3af7 100644
--- a/drivers/gpu/drm/xe/xe_page_reclaim.h
+++ b/drivers/gpu/drm/xe/xe_page_reclaim.h
@@ -20,6 +20,7 @@ struct xe_tlb_inval;
struct xe_tlb_inval_fence;
struct xe_tile;
struct xe_gt;
+struct xe_guc;
struct xe_vma;
struct xe_guc_page_reclaim_entry {
@@ -122,4 +123,6 @@ static inline void xe_page_reclaim_entries_put(struct xe_guc_page_reclaim_entry
put_page(virt_to_page(entries));
}
+int xe_guc_page_reclaim_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
+
#endif /* _XE_PAGE_RECLAIM_H_ */
--
2.43.0
next prev parent reply other threads:[~2026-03-05 17:15 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-05 17:15 [PATCH v4 0/3] Page Reclamation Fixes Brian Nguyen
2026-03-05 17:15 ` [PATCH v4 1/3] drm/xe: Skip over non leaf pte for PRL generation Brian Nguyen
2026-03-05 17:15 ` Brian Nguyen [this message]
2026-03-05 17:15 ` [PATCH v4 3/3] drm/xe: Skip adding PRL entry to NULL VMA Brian Nguyen
2026-03-06 15:33 ` ✓ CI.KUnit: success for Page Reclamation Fixes (rev4) Patchwork
2026-03-06 16:36 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-03-07 1:53 ` ✓ CI.KUnit: success for Page Reclamation Fixes (rev5) Patchwork
2026-03-07 2:46 ` ✓ Xe.CI.BAT: " Patchwork
2026-03-08 5:33 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-03-11 18:14 ` Nguyen, Brian
2026-03-16 16:44 ` Matt Roper
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=20260305171546.67691-7-brian3.nguyen@intel.com \
--to=brian3.nguyen@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
--cc=shuicheng.lin@intel.com \
--cc=stuart.summers@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