]>
Commit | Line | Data |
---|---|---|
ea78042b SL |
1 | From 12908a3081c979fc2655db7d1112f8d0e63354de Mon Sep 17 00:00:00 2001 |
2 | From: Sasha Levin <sashal@kernel.org> | |
3 | Date: Thu, 7 Mar 2024 11:02:27 +0000 | |
4 | Subject: ASoC: wm_adsp: Fix missing mutex_lock in wm_adsp_write_ctl() | |
5 | ||
6 | From: Richard Fitzgerald <rf@opensource.cirrus.com> | |
7 | ||
8 | [ Upstream commit f193957b0fbbba397c8bddedf158b3bf7e4850fc ] | |
9 | ||
10 | wm_adsp_write_ctl() must hold the pwr_lock mutex when calling | |
11 | cs_dsp_get_ctl(). | |
12 | ||
13 | This was previously partially fixed by commit 781118bc2fc1 | |
14 | ("ASoC: wm_adsp: Fix missing locking in wm_adsp_[read|write]_ctl()") | |
15 | but this only put locking around the call to cs_dsp_coeff_write_ctrl(), | |
16 | missing the call to cs_dsp_get_ctl(). | |
17 | ||
18 | Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> | |
19 | Fixes: 781118bc2fc1 ("ASoC: wm_adsp: Fix missing locking in wm_adsp_[read|write]_ctl()") | |
20 | Link: https://msgid.link/r/20240307110227.41421-1-rf@opensource.cirrus.com | |
21 | Signed-off-by: Mark Brown <broonie@kernel.org> | |
22 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
23 | --- | |
24 | sound/soc/codecs/wm_adsp.c | 3 ++- | |
25 | 1 file changed, 2 insertions(+), 1 deletion(-) | |
26 | ||
27 | diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c | |
28 | index 72b90a7ee4b68..b9c20e29fe63e 100644 | |
29 | --- a/sound/soc/codecs/wm_adsp.c | |
30 | +++ b/sound/soc/codecs/wm_adsp.c | |
31 | @@ -683,11 +683,12 @@ static void wm_adsp_control_remove(struct cs_dsp_coeff_ctl *cs_ctl) | |
32 | int wm_adsp_write_ctl(struct wm_adsp *dsp, const char *name, int type, | |
33 | unsigned int alg, void *buf, size_t len) | |
34 | { | |
35 | - struct cs_dsp_coeff_ctl *cs_ctl = cs_dsp_get_ctl(&dsp->cs_dsp, name, type, alg); | |
36 | + struct cs_dsp_coeff_ctl *cs_ctl; | |
37 | struct wm_coeff_ctl *ctl; | |
38 | int ret; | |
39 | ||
40 | mutex_lock(&dsp->cs_dsp.pwr_lock); | |
41 | + cs_ctl = cs_dsp_get_ctl(&dsp->cs_dsp, name, type, alg); | |
42 | ret = cs_dsp_coeff_write_ctrl(cs_ctl, 0, buf, len); | |
43 | mutex_unlock(&dsp->cs_dsp.pwr_lock); | |
44 | ||
45 | -- | |
46 | 2.43.0 | |
47 |