summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorJonathan Cavitt <jonathan.cavitt@intel.com>2025-12-22 20:20:00 +0000
committerRodrigo Vivi <rodrigo.vivi@intel.com>2025-12-23 16:43:49 -0500
commitac1317df039d9e4a05e5acac4159e5c2021600aa (patch)
treeb4f2e9c60b714f94af13d9c5972aa3490fedc54b /drivers/gpu
parentb5179dbd1c14743ae80f0aaa28eaaf35c361608f (diff)
drm/xe/guc: READ/WRITE_ONCE ct->state
Use READ_ONCE and WRITE_ONCE when operating on ct->state to prevent the compiler form ignoring important modifications to its value. Suggested-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Jonathan Cavitt <jonathan.cavitt@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> Link: https://patch.msgid.link/20251222201957.63245-6-jonathan.cavitt@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/xe/xe_guc_ct.c7
-rw-r--r--drivers/gpu/drm/xe/xe_guc_ct.h6
2 files changed, 10 insertions, 3 deletions
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index f2148a8bf208..dfbf76037b04 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -529,7 +529,12 @@ static void guc_ct_change_state(struct xe_guc_ct *ct,
if (ct->g2h_outstanding)
xe_pm_runtime_put(ct_to_xe(ct));
ct->g2h_outstanding = 0;
- ct->state = state;
+
+ /*
+ * WRITE_ONCE pairs with READ_ONCEs in xe_guc_ct_initialized and
+ * xe_guc_ct_enabled.
+ */
+ WRITE_ONCE(ct->state, state);
xe_gt_dbg(gt, "GuC CT communication channel %s\n",
state == XE_GUC_CT_STATE_STOPPED ? "stopped" :
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.h b/drivers/gpu/drm/xe/xe_guc_ct.h
index 5599939f8fe1..767365a33dee 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.h
+++ b/drivers/gpu/drm/xe/xe_guc_ct.h
@@ -30,12 +30,14 @@ void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p, bool want_ctb)
static inline bool xe_guc_ct_initialized(struct xe_guc_ct *ct)
{
- return ct->state != XE_GUC_CT_STATE_NOT_INITIALIZED;
+ /* READ_ONCE pairs with WRITE_ONCE in guc_ct_change_state. */
+ return READ_ONCE(ct->state) != XE_GUC_CT_STATE_NOT_INITIALIZED;
}
static inline bool xe_guc_ct_enabled(struct xe_guc_ct *ct)
{
- return ct->state == XE_GUC_CT_STATE_ENABLED;
+ /* READ_ONCE pairs with WRITE_ONCE in guc_ct_change_state. */
+ return READ_ONCE(ct->state) == XE_GUC_CT_STATE_ENABLED;
}
static inline void xe_guc_ct_irq_handler(struct xe_guc_ct *ct)