mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
ASoC: SOF: sof-audio: Skip unprepare for in-use widgets on error rollback
[ Upstream commit 6f2a43e3d1
]
If the ipc_prepare() callback fails for a module instance, on error rewind
we must skip the ipc_unprepare() call for ones that has positive use count.
The positive use count means that the module instance is in active use, it
cannot be unprepared.
The issue affects capture direction paths with branches (single dai with
multiple PCMs), the affected widgets are in the shared part of the paths.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20240612121203.15468-1-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
9d944d4aa9
commit
e18dfef2b5
@ -488,7 +488,7 @@ sink_prepare:
|
||||
if (ret < 0) {
|
||||
/* unprepare the source widget */
|
||||
if (widget_ops[widget->id].ipc_unprepare &&
|
||||
swidget && swidget->prepared) {
|
||||
swidget && swidget->prepared && swidget->use_count == 0) {
|
||||
widget_ops[widget->id].ipc_unprepare(swidget);
|
||||
swidget->prepared = false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user