diff options
author | Peter Ujfalusi <peter.ujfalusi@linux.intel.com> | 2023-09-14 15:47:25 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-09-14 15:32:43 +0100 |
commit | bb0216d4db9ecaa51af45d8504757becbe5c050d (patch) | |
tree | a4c7ef8ee62158821c60f1f9d416804168c9685a /sound | |
parent | 6ba59c008f08e84b3c87be10f3391c9735e4f833 (diff) | |
download | linux-stable-bb0216d4db9ecaa51af45d8504757becbe5c050d.tar.gz linux-stable-bb0216d4db9ecaa51af45d8504757becbe5c050d.tar.bz2 linux-stable-bb0216d4db9ecaa51af45d8504757becbe5c050d.zip |
ASoC: SOF: sof-audio: Fix DSP core put imbalance on widget setup failure
In case the widget setup fails we should only decrement the core usage
count if the sof_widget_free_unlocked() has not been called as part of
the error handling.
sof_widget_free_unlocked() calls snd_sof_dsp_core_put() and the additional
core_put will cause imbalance in core usage count.
Use the existing use_count_decremented to handle this issue.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20230914124725.17397-1-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/sof/sof-audio.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c index e7ef77012c35..e5405f854a91 100644 --- a/sound/soc/sof/sof-audio.c +++ b/sound/soc/sof/sof-audio.c @@ -212,7 +212,8 @@ widget_free: sof_widget_free_unlocked(sdev, swidget); use_count_decremented = true; core_put: - snd_sof_dsp_core_put(sdev, swidget->core); + if (!use_count_decremented) + snd_sof_dsp_core_put(sdev, swidget->core); pipe_widget_free: if (swidget->id != snd_soc_dapm_scheduler) sof_widget_free_unlocked(sdev, swidget->spipe->pipe_widget); |