drm/xe/vf: Reset VF GuC state on fini
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Thu, 22 Jan 2026 15:19:24 +0000 (16:19 +0100)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Tue, 27 Jan 2026 20:26:38 +0000 (21:26 +0100)
Unlike native/PF driver, which was explicitly triggering full GuC
reset during driver unwind, the VF driver was not notifying GuC that
it is about to unwind, and this could lead GuC to access stale data,
which in turn could be interpreted as VF's malicious activity.

Add managed action to send to GuC VF_RESET message during GT unwind.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Link: https://patch.msgid.link/20260122151924.3726-1-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_guc.c

index 4436043..2efc467 100644 (file)
@@ -668,6 +668,13 @@ static void guc_fini_hw(void *arg)
        guc_g2g_fini(guc);
 }
 
+static void vf_guc_fini_hw(void *arg)
+{
+       struct xe_guc *guc = arg;
+
+       xe_gt_sriov_vf_reset(guc_to_gt(guc));
+}
+
 /**
  * xe_guc_comm_init_early - early initialization of GuC communication
  * @guc: the &xe_guc to initialize
@@ -772,6 +779,10 @@ int xe_guc_init(struct xe_guc *guc)
                xe->info.has_page_reclaim_hw_assist = false;
 
        if (IS_SRIOV_VF(xe)) {
+               ret = devm_add_action_or_reset(xe->drm.dev, vf_guc_fini_hw, guc);
+               if (ret)
+                       goto out;
+
                ret = xe_guc_ct_init(&guc->ct);
                if (ret)
                        goto out;