[PATCH v9 18/26] drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init()
Nirmoy Das
nirmoy.das at linux.intel.com
Tue Oct 15 15:21:40 UTC 2024
On 10/14/2024 9:55 AM, Himal Prasad Ghimiray wrote:
> 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 ()
> to 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 from xe_force_wake_get()
>
> v6
> - Use helper xe_force_wake_ref_has_domain()
>
> Cc: Ashutosh Dixit <ashutosh.dixit at intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das at intel.com>
> ---
> drivers/gpu/drm/xe/xe_oa.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index bbe03db0c401..5951ea175533 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -837,7 +837,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>
> xe_oa_free_oa_buffer(stream);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> xe_pm_runtime_put(stream->oa->xe);
>
> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
> @@ -1353,6 +1353,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> {
> struct xe_oa_unit *u = param->hwe->oa_unit;
> struct xe_gt *gt = param->hwe->gt;
> + unsigned int fw_ref;
> int ret;
>
> stream->exec_q = param->exec_q;
> @@ -1413,7 +1414,11 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
>
> /* Take runtime pm ref and forcewake to disable RC6 */
> xe_pm_runtime_get(stream->oa->xe);
> - XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL)) {
> + ret = -ETIMEDOUT;
> + goto err_fw_put;
> + }
>
> ret = xe_oa_alloc_oa_buffer(stream);
> if (ret)
> @@ -1455,7 +1460,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> err_free_oa_buf:
> xe_oa_free_oa_buffer(stream);
> err_fw_put:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(stream->oa->xe);
> if (stream->override_gucrc)
> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
More information about the Intel-xe
mailing list