aboutsummaryrefslogtreecommitdiff
path: root/sound/soc/sof
diff options
context:
space:
mode:
authorGravatar Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> 2023-05-18 23:44:01 -0700
committerGravatar Mark Brown <broonie@kernel.org> 2023-05-23 16:00:13 +0100
commited67a3404a8806a57c0015ce97bd3e6d61e7aa22 (patch)
tree0d541c837722f7cb2c3cd665c9a8a8fd5f955a5f /sound/soc/sof
parentASoC: SOF: ipc4-topology: Fix an unsigned comparison which can never be negative (diff)
downloadlinux-ed67a3404a8806a57c0015ce97bd3e6d61e7aa22.tar.gz
linux-ed67a3404a8806a57c0015ce97bd3e6d61e7aa22.tar.bz2
linux-ed67a3404a8806a57c0015ce97bd3e6d61e7aa22.zip
ASoC: SOF: Intel: hda-dai: Fix locking in hda_ipc4_pre_trigger()
hda_ipc4_pre_trigger() has two issues: 1. In the default case, we are returning without unlocking the mutex. 2. In case SNDRV_PCM_TRIGGER_STOP: when ret is less than zero it goes to out, unlocks but returns zero instead of a negative value. Fix this by changing the final return value to 'ret' instead of zero, and initialize 'ret' to zero in the start of the function. Fixes: 225f37b578a9 ("ASoC: SOF: ipc4-pcm: reset all pipelines during FE DAI hw_free") Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20230519064404.1659637-1-harshit.m.mogalapalli@oracle.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof')
-rw-r--r--sound/soc/sof/intel/hda-dai-ops.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/soc/sof/intel/hda-dai-ops.c b/sound/soc/sof/intel/hda-dai-ops.c
index 5a508e118e3d..1e58256c8003 100644
--- a/sound/soc/sof/intel/hda-dai-ops.c
+++ b/sound/soc/sof/intel/hda-dai-ops.c
@@ -183,7 +183,7 @@ static int hda_ipc4_pre_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cp
struct sof_ipc4_pipeline *pipeline;
struct snd_sof_widget *swidget;
struct snd_soc_dapm_widget *w;
- int ret;
+ int ret = 0;
w = snd_soc_dai_get_widget(cpu_dai, substream->stream);
swidget = w->dobj.private;
@@ -208,11 +208,11 @@ static int hda_ipc4_pre_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cp
break;
default:
dev_err(sdev->dev, "unknown trigger command %d\n", cmd);
- return -EINVAL;
+ ret = -EINVAL;
}
out:
mutex_unlock(&ipc4_data->pipeline_state_mutex);
- return 0;
+ return ret;
}
static int hda_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai,