Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/xe/xe_gt_debugfs: Update handling of xe_force_wake_get return

With xe_force_wake_get() now returning the refcount-incremented
domain mask, a non-zero return value in the case of XE_FORCEWAKE_ALL does
not necessarily indicate success. Use xe_force_wake_ref_has_domain()
determine the status of the call.

Modify the return handling of xe_force_wake_get() accordingly and
pass the return value to xe_force_wake_put().

v3
- return xe_wakeref_t instead of int in xe_force_wake_get()
- xe_force_wake_put() error doesn't need to be checked. It internally
WARNS on domain ack failure.

v5
- return unsigned int for xe_force_wake_get()

v6
- use helper xe_force_wake_ref_has_domain()

Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Badal Nilawar <badal.nilawar@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241014075601.2324382-16-himal.prasad.ghimiray@intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

authored by

Himal Prasad Ghimiray and committed by
Rodrigo Vivi
85d54760 7fe17fa5

+6 -7
+6 -7
drivers/gpu/drm/xe/xe_gt_debugfs.c
··· 90 90 struct xe_device *xe = gt_to_xe(gt); 91 91 struct xe_hw_engine *hwe; 92 92 enum xe_hw_engine_id id; 93 - int err; 93 + unsigned int fw_ref; 94 94 95 95 xe_pm_runtime_get(xe); 96 - err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL); 97 - if (err) { 96 + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL); 97 + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL)) { 98 98 xe_pm_runtime_put(xe); 99 - return err; 99 + xe_force_wake_put(gt_to_fw(gt), fw_ref); 100 + return -ETIMEDOUT; 100 101 } 101 102 102 103 for_each_hw_engine(hwe, gt, id) 103 104 xe_hw_engine_print(hwe, p); 104 105 105 - err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL); 106 + xe_force_wake_put(gt_to_fw(gt), fw_ref); 106 107 xe_pm_runtime_put(xe); 107 - if (err) 108 - return err; 109 108 110 109 return 0; 111 110 }