[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(&gt->uc.guc.pc));


More information about the Intel-xe mailing list