RE: [PATCH v3] counter: rz-mtu3-cnt: put runtime PM ref if counter init fails

From: Biju Das

Date: Mon Nov 02 2026 - 02:41:08 EST


Hi Li Youhong,

> -----Original Message-----
> From: Li Youhong <dayou5941@xxxxxxx>
> Sent: 01 November 2026 13:08
> Subject: [PATCH v3] counter: rz-mtu3-cnt: put runtime PM ref if counter init fails
>
> From: Li Youhong <liyouhong@xxxxxxxxxx>
>
> Counter enable takes a runtime PM reference before initialization but only puts it on disable. Drop the
> reference if initialization fails.
>
> Fixes: 0be8907359df ("counter: Add Renesas RZ/G2L MTU3a counter driver")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Li Youhong <liyouhong@xxxxxxxxxx>
> ---
> v3:
> - Set count_is_enabled from enable after either branch succeeds.
> - v2: https://lore.kernel.org/all/20261031142813.2522444-1-dayou5941@xxxxxxx/
>
> v2:
> - Add Cc: stable@xxxxxxxxxxxxxxx.
> - v1: https://lore.kernel.org/all/20261008020506.211566-1-dayou5941@xxxxxxx/
>
> drivers/counter/rz-mtu3-cnt.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/counter/rz-mtu3-cnt.c b/drivers/counter/rz-mtu3-cnt.c index
> 7bfb6979193c..e7fe8bf45164 100644
> --- a/drivers/counter/rz-mtu3-cnt.c
> +++ b/drivers/counter/rz-mtu3-cnt.c
> @@ -506,14 +506,17 @@ static int rz_mtu3_count_enable_write(struct counter_device *counter,
> if (enable) {
> pm_runtime_get_sync(counter->parent);
> ret = rz_mtu3_initialize_counter(counter, count->id);

Reviewed-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>

Now days bots started complaining if pm_runtime_get_sync() fails
Then rz_mtu3_initialize_counter() will lead to kernel crash(sysnchronous abort)
as it is accessing registers without the clk.

Since you have added fixes tag, not sure this to be fixed in this patch??

Cheers,
Biju

> - if (ret == 0)
> - priv->count_is_enabled[count->id] = true;
> + if (ret < 0) {
> + pm_runtime_put(counter->parent);
> + goto exit;
> + }
> } else {
> rz_mtu3_terminate_counter(counter, count->id);
> - priv->count_is_enabled[count->id] = false;
> pm_runtime_put(counter->parent);
> }
>
> + priv->count_is_enabled[count->id] = enable;
> +
> exit:
> mutex_unlock(&priv->lock);
>