On Wed, Apr 19, 2023 at 05:23:55PM +0300, Dan Carpenter wrote: > The return -ERANGE error paths need to call mutex_unlock(&priv->lock); > before returning. > > Fixes: 25d21447d896 ("counter: Add Renesas RZ/G2L MTU3a counter driver") > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> The changes in this patch are for rz_mtu3_count_ceiling_write(), so the title of this patch should be fixed. > --- > drivers/counter/rz-mtu3-cnt.c | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > > diff --git a/drivers/counter/rz-mtu3-cnt.c b/drivers/counter/rz-mtu3-cnt.c > index a371bab68499..aeadce5e2853 100644 > --- a/drivers/counter/rz-mtu3-cnt.c > +++ b/drivers/counter/rz-mtu3-cnt.c > @@ -358,19 +358,23 @@ static int rz_mtu3_count_ceiling_write(struct counter_device *counter, > switch (count->id) { > case RZ_MTU3_16_BIT_MTU1_CH: > case RZ_MTU3_16_BIT_MTU2_CH: > - if (ceiling > U16_MAX) > - return -ERANGE; > + if (ceiling > U16_MAX) { > + ret = -ERANGE; > + goto unlock; > + } > priv->mtu_16bit_max[ch_id] = ceiling; > break; > case RZ_MTU3_32_BIT_CH: > - if (ceiling > U32_MAX) > - return -ERANGE; > + if (ceiling > U32_MAX) { > + ret = -ERANGE; > + goto unlock; > + } > priv->mtu_32bit_max = ceiling; > break; > default: > /* should never reach this path */ > - mutex_unlock(&priv->lock); > - return -EINVAL; > + ret = -EINVAL; > + goto unlock; > } Normally, I like "goto unlock" patterns, but I think in this context it makes the flow of code confusing with the mix-match of the switch cases; default case jumps with a goto, but RZ_MTU3_* cases passes will break, yet RZ_MUT3_* failures have a goto path. Rather than a "goto unlock" pattern, I'd prefer to see simply mutex_lock() called for these ceiling checks. That also has the benefit of reducing the number of changes we have to make for this fix. William Breathitt Gray > > pm_runtime_get_sync(ch->dev); > @@ -381,9 +385,9 @@ static int rz_mtu3_count_ceiling_write(struct counter_device *counter, > > rz_mtu3_8bit_ch_write(ch, RZ_MTU3_TCR, RZ_MTU3_TCR_CCLR_TGRA); > pm_runtime_put(ch->dev); > +unlock: > mutex_unlock(&priv->lock); > - > - return 0; > + return ret; > } > > static void rz_mtu3_32bit_cnt_setting(struct counter_device *counter) > -- > 2.39.2 >
Attachment:
signature.asc
Description: PGP signature