Message ID | tencent_8A7C0C985AE1A1975C25D8DE24010D8B2007@qq.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | ASoC: soc-pcm: add a check for unsupported commands to the soc_pcm_trigger | expand |
On Mon, Mar 11, 2024 at 03:05:48PM +0800, xuhanwu wrote: > > As can be seen from inspection of the immediately > > preceeding handling of start, we're deliberately > > ignoring half the values in each switch. > In kernel version 6.2, when the soc_pcm_trigger function receives a > command parameter cmd set to SNDRV_PCM_TRIGGER_DRAIN, > it returns a value of -EINVAL.The function snd_pcm_drain checks > the returned error value and exits accordingly. The current kernel version is v6.8 (we're in the merge window for v6.9 now) - any changes that you're submitting should be submitted against current code, not v6.2. > In the latest code, when the cmd parameter is set to SNDRV_PCM_TRIGGER_DRAIN, > the return value is 0. If snd_pcm_drain finds that the return value is 0, > it will not execute the goto unlock; Well, it will get to the unlock eventually after going through the for loop so the lock doesn't get leaked AFAICT? I'm not sure what the issue you're seeing here is.
Dear broonie Issue: Before and after Linux version 6.2, when the cmd is SNDRV_PCM_TRIGGER_DRAIN, calling the function soc_pcm_trigger results in different return values. Through your guidance, I've realized that the code logic has been adjusted. I will further deepen my study of the code. Thank you for your guidance. Thank you for your help. xuhanwu
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 77ee103b7..eba737729 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -1173,6 +1173,9 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd) if (r < 0) break; } + break; + default: + return -EINVAL; } /*