[PATCH v9 18/26] drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init()

Nilawar, Badal badal.nilawar at intel.com
Wed Oct 16 12:34:34 UTC 2024



On 14-10-2024 13:25, 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>
> ---
>   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);

LGTM.
Reviewed-by: Badal Nilawar <badal.nilawar at intel.com>

Regards,
Badal

>   	xe_pm_runtime_put(stream->oa->xe);
>   	if (stream->override_gucrc)
>   		xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(&gt->uc.guc.pc));



More information about the Intel-xe mailing list