mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
ASoC: Fix mixed goto and guard() usage
bui duc phuc <phucduc.bui@gmail.com> says: These two patches fix the remaining cases of mixed goto-based error handling and cleanup helpers introduced by the recent guard() conversion patches that have already been merged for the 7.2 development cycle. The cleanup.h guidelines explicitly recommend not mixing goto with cleanup helpers in the same function. Only two functions were left in this state: - sound/soc/samsung/i2s.c: remove the goto-based error path and rely on guard(pm_runtime) for automatic cleanup. - sound/soc/ti/j721e-evm.c: restore mutex_lock()/mutex_unlock() to preserve the existing goto-based error handling. Although these cases do not trigger any build warnings or errors with Clang (W=1), they still violate the cleanup.h guidelines. These patches address those remaining cases and add the appropriate Fixes: tags for the commits that introduced them. Link: https://patch.msgid.link/20260701041310.230725-1-phucduc.bui@gmail.com
This commit is contained in:
commit
e487b00d70
|
|
@ -8,6 +8,7 @@
|
|||
#include <dt-bindings/sound/samsung-i2s.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/io.h>
|
||||
|
|
@ -512,7 +513,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
u32 mod, mask, val = 0;
|
||||
int ret = 0;
|
||||
|
||||
pm_runtime_get_sync(dai->dev);
|
||||
guard(pm_runtime_active)(dai->dev);
|
||||
|
||||
scoped_guard(spinlock_irqsave, &priv->lock)
|
||||
mod = readl(priv->addr + I2SMOD);
|
||||
|
|
@ -537,8 +538,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
&& (mod & cdcon_mask))))) {
|
||||
dev_err(&i2s->pdev->dev,
|
||||
"%s:%d Other DAI busy\n", __func__, __LINE__);
|
||||
ret = -EAGAIN;
|
||||
goto err;
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
if (dir == SND_SOC_CLOCK_IN)
|
||||
|
|
@ -566,7 +566,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
} else {
|
||||
priv->rclk_srcrate =
|
||||
clk_get_rate(priv->op_clk);
|
||||
goto done;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -580,14 +580,14 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
if (WARN_ON(IS_ERR(priv->op_clk))) {
|
||||
ret = PTR_ERR(priv->op_clk);
|
||||
priv->op_clk = NULL;
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(priv->op_clk);
|
||||
if (ret) {
|
||||
clk_put(priv->op_clk);
|
||||
priv->op_clk = NULL;
|
||||
goto err;
|
||||
return ret;
|
||||
}
|
||||
priv->rclk_srcrate = clk_get_rate(priv->op_clk);
|
||||
|
||||
|
|
@ -595,11 +595,10 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
|| (clk_id && !(mod & rsrc_mask))) {
|
||||
dev_err(&i2s->pdev->dev,
|
||||
"%s:%d Other DAI busy\n", __func__, __LINE__);
|
||||
ret = -EAGAIN;
|
||||
goto err;
|
||||
return -EAGAIN;
|
||||
} else {
|
||||
/* Call can't be on the active DAI */
|
||||
goto done;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (clk_id == 1)
|
||||
|
|
@ -607,8 +606,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
break;
|
||||
default:
|
||||
dev_err(&i2s->pdev->dev, "We don't serve that!\n");
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
scoped_guard(spinlock_irqsave, &priv->lock) {
|
||||
|
|
@ -616,13 +614,8 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
|
|||
mod = (mod & ~mask) | val;
|
||||
writel(mod, priv->addr + I2SMOD);
|
||||
}
|
||||
done:
|
||||
pm_runtime_put(dai->dev);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
pm_runtime_put(dai->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
* Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
*/
|
||||
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
|
|
@ -263,7 +264,7 @@ static int j721e_audio_startup(struct snd_pcm_substream *substream)
|
|||
int ret = 0;
|
||||
int i;
|
||||
|
||||
guard(mutex)(&priv->mutex);
|
||||
mutex_lock(&priv->mutex);
|
||||
|
||||
domain->active++;
|
||||
|
||||
|
|
@ -303,6 +304,7 @@ static int j721e_audio_startup(struct snd_pcm_substream *substream)
|
|||
out:
|
||||
if (ret)
|
||||
domain->active--;
|
||||
mutex_unlock(&priv->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user