]> www.infradead.org Git - 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)
committerMatthew Auld <matthew.auld@intel.com>
Thu, 10 Oct 2024 08:15:59 +0000 (09:15 +0100)
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: 452bca0edbd0 ("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
drivers/gpu/drm/xe/xe_device.c

index cd241a8e1838b32c2d46edecae32a1418319b5ea..962751c966d16e4cf026b3f94caf92c3d22ad97f 100644 (file)
@@ -1016,13 +1016,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,