drm/xe: fix unbalanced rpm put() with declare_wedged()
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:90936a0a4c("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 commita187c1b0a8) Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
committed by
Lucas De Marchi
parent
03a86c24ae
commit
761f916af4
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user