summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>2026-05-07 19:20:20 +0300
committerUmesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>2026-05-08 23:48:40 +0300
commitd243ef6a39c6e712694fac14c337710941f5f260 (patch)
tree270a3cbe11626ba28f18984349ae482c51c9b25f
parente98cf36bf5b5043c5172041e2d24d40139c7f0e9 (diff)
downloadlinux-d243ef6a39c6e712694fac14c337710941f5f260.tar.xz
drm/xe/lrc: Refactor xe_lrc_timestamp to simplify logic
Use a context_active() helper and simplify the timestamp logic. Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Reviewed-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com> Link: https://patch.msgid.link/20260507162016.3888309-16-umesh.nerlige.ramappa@intel.com
-rw-r--r--drivers/gpu/drm/xe/xe_lrc.c35
1 files changed, 15 insertions, 20 deletions
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 66682a678cc2..b31525bd2a4c 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -2585,6 +2585,11 @@ static int get_ctx_timestamp(struct xe_lrc *lrc, u32 engine_id, u64 *reg_ctx_ts)
return 0;
}
+static bool context_active(struct xe_lrc *lrc)
+{
+ return xe_lrc_ctx_timestamp(lrc) == CONTEXT_ACTIVE;
+}
+
/**
* xe_lrc_timestamp() - Current ctx timestamp
* @lrc: Pointer to the lrc.
@@ -2597,33 +2602,23 @@ static int get_ctx_timestamp(struct xe_lrc *lrc, u32 engine_id, u64 *reg_ctx_ts)
*/
u64 xe_lrc_timestamp(struct xe_lrc *lrc)
{
- u64 lrc_ts, reg_ts, new_ts = lrc->ctx_timestamp;
- u32 engine_id;
+ u64 reg_ts, new_ts = lrc->ctx_timestamp;
- lrc_ts = xe_lrc_ctx_timestamp(lrc);
/* CTX_TIMESTAMP mmio read is invalid on VF, so return the LRC value */
- if (IS_SRIOV_VF(lrc_to_xe(lrc))) {
- new_ts = lrc_ts;
- goto done;
- }
-
- if (lrc_ts == CONTEXT_ACTIVE) {
- engine_id = xe_lrc_engine_id(lrc);
- if (!get_ctx_timestamp(lrc, engine_id, &reg_ts))
- new_ts = reg_ts;
+ if (IS_SRIOV_VF(lrc_to_xe(lrc)))
+ return xe_lrc_ctx_timestamp(lrc);
- /* read lrc again to ensure context is still active */
- lrc_ts = xe_lrc_ctx_timestamp(lrc);
- }
+ if (context_active(lrc) &&
+ !get_ctx_timestamp(lrc, xe_lrc_engine_id(lrc), &reg_ts))
+ new_ts = reg_ts;
/*
- * If context switched out, just use the lrc_ts. Note that this needs to
- * be a separate if condition.
+ * If context swicthed out while we were here, just return the latest
+ * LRC CTX TIMESTAMP value.
*/
- if (lrc_ts != CONTEXT_ACTIVE)
- new_ts = lrc_ts;
+ if (!context_active(lrc))
+ return xe_lrc_ctx_timestamp(lrc);
-done:
return new_ts;
}