]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe: fix unbalanced rpm put() with declare_wedged()
authorMatthew Auld <matthew.auld@intel.com>
Wed, 9 Oct 2024 08:48:10 +0000 (09:48 +0100)
committerLucas De Marchi <lucas.demarchi@intel.com>
Wed, 16 Oct 2024 14:00:22 +0000 (09:00 -0500)
Technically the or_reset() means we call the action on failure, however
that would lead to unbalanced rpm put(). Move the get() earlier to fix
this. It should be extremely unlikely to ever trigger this in practice.

Fixes: 90936a0a4c54 ("drm/xe: Don't suspend device upon wedge")
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241009084808.204432-4-matthew.auld@intel.com
(cherry picked from commit a187c1b0a800565a4db6372268692aff99df7f53)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_device.c

index 5a63d135ba9604c0c225934cf3729440cc495ccf..0a9ffc19e92f46f0578a7c9a1d47254cdc3a2cad 100644 (file)
@@ -980,13 +980,13 @@ void xe_device_declare_wedged(struct xe_device *xe)
                return;
        }
 
+       xe_pm_runtime_get_noresume(xe);
+
        if (drmm_add_action_or_reset(&xe->drm, xe_device_wedged_fini, xe)) {
                drm_err(&xe->drm, "Failed to register xe_device_wedged_fini clean-up. Although device is wedged.\n");
                return;
        }
 
-       xe_pm_runtime_get_noresume(xe);
-
        if (!atomic_xchg(&xe->wedged.flag, 1)) {
                xe->needs_flr_on_fini = true;
                drm_err(&xe->drm,