drm/xe/guc: Initialize GuC ID manager sooner
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Sat, 6 Apr 2024 14:39:46 +0000 (16:39 +0200)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 8 Apr 2024 09:22:18 +0000 (11:22 +0200)
The GuC submission cleanup code may depend on the GuC ID manager,
thus we can't initialize it after registering a submission cleanup
action, as reverse cleanup sequence will destroy GuC ID manager
prior to a call to guc_submit_fini().

Move GuC ID manager initialization up, right after managed mutex
initialization, to have it available during guc_submit_fini().

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240406143946.979-2-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_guc_submit.c

index 4c444fddfba6c17f8a76c81d452bdc83a25a4f5d..61e7a8fbd18c7fdee710f04189711a56ca935ecc 100644 (file)
@@ -266,6 +266,10 @@ int xe_guc_submit_init(struct xe_guc *guc)
        if (err)
                return err;
 
+       err = xe_guc_id_mgr_init(&guc->submission_state.idm, ~0);
+       if (err)
+               return err;
+
        err = alloc_submit_wq(guc);
        if (err)
                return err;
@@ -279,15 +283,7 @@ int xe_guc_submit_init(struct xe_guc *guc)
 
        primelockdep(guc);
 
-       err = drmm_add_action_or_reset(&xe->drm, guc_submit_fini, guc);
-       if (err)
-               return err;
-
-       err = xe_guc_id_mgr_init(&guc->submission_state.idm, ~0);
-       if (err)
-               return err;
-
-       return 0;
+       return drmm_add_action_or_reset(&xe->drm, guc_submit_fini, guc);
 }
 
 static void __release_guc_id(struct xe_guc *guc, struct xe_exec_queue *q, u32 xa_count)