diff options
author | Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> | 2023-05-19 22:17:06 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-05-30 14:17:27 +0100 |
commit | dff8caef7a21ed4c9f842cbc17001627a4dc63d2 (patch) | |
tree | ec6dedcb726a588784bd30b3d5eea4ab852ec170 | |
parent | 7bdb0fce080bf04ca171dbb1329ceeedb2abe2b4 (diff) | |
download | linux-stable-dff8caef7a21ed4c9f842cbc17001627a4dc63d2.tar.gz linux-stable-dff8caef7a21ed4c9f842cbc17001627a4dc63d2.tar.bz2 linux-stable-dff8caef7a21ed4c9f842cbc17001627a4dc63d2.zip |
ASoC: Intel: avs: Access path components under lock
commit d849996f7458042af803b7d15a181922834c5249 upstream.
Path and its components should be accessed under lock to prevent
problems with one thread modifying them while other tries to read.
Fixes: c8c960c10971 ("ASoC: Intel: avs: APL-based platforms support")
Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Link: https://lore.kernel.org/r/20230519201711.4073845-3-amadeuszx.slawinski@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | sound/soc/intel/avs/apl.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sound/soc/intel/avs/apl.c b/sound/soc/intel/avs/apl.c index 02683dce277a..1860099c782a 100644 --- a/sound/soc/intel/avs/apl.c +++ b/sound/soc/intel/avs/apl.c @@ -169,6 +169,7 @@ static bool apl_lp_streaming(struct avs_dev *adev) { struct avs_path *path; + spin_lock(&adev->path_list_lock); /* Any gateway without buffer allocated in LP area disqualifies D0IX. */ list_for_each_entry(path, &adev->path_list, node) { struct avs_path_pipeline *ppl; @@ -188,11 +189,14 @@ static bool apl_lp_streaming(struct avs_dev *adev) if (cfg->copier.dma_type == INVALID_OBJECT_ID) continue; - if (!mod->gtw_attrs.lp_buffer_alloc) + if (!mod->gtw_attrs.lp_buffer_alloc) { + spin_unlock(&adev->path_list_lock); return false; + } } } } + spin_unlock(&adev->path_list_lock); return true; } |