Commit 92a99ea439c4 ("ASoC: dapm: Use more aggressive caching") only invalidates necessary caches to improve the cache hit rate. However, in snd_soc_dapm_add_path(), the cache is too aggressive which results in wrong state of the audio map. E.g. imaging the following examples during snd_soc_instantiate_card(): time 1: at the beginning in:-1 in:-1 in:-1 out:-1 out:-1 out:-1 A -----> B Spk time 2: after someone called snd_soc_dapm_new_widgets() (e.g. create_fill_widget_route_map() in sound/soc/codecs/hdac_hdmi.c) in:0 in:0 in:0 out:0 out:0 out:1 A ----> B Spk time 3: route added to Spk in:0 in:0 in:0 out:0 out:0 out:1 A ----> B ----> Spk time N: route added from SIGGEN in:1 in:0 in:0 in:0 out:0 out:0 out:0 out:1 SIGGEN ----> A ----> B ----> Spk In the end, the path will not power on but it should be. At time 2, the caches have been polluted. At time 3, it will not get the correct state if snd_soc_dapm_add_path() does not invalidate "out" of B and A. time 3 (expected result): in:0 in:0 in:0 out:1 out:1 out:1 A ----> B ----> Spk Signed-off-by: Tzung-Bi Shih <tzungbi@xxxxxxxxxx> --- sound/soc/soc-dapm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index a5178845065b..2914f3adb333 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -2722,7 +2722,7 @@ static int snd_soc_dapm_add_path(struct snd_soc_dapm_context *dapm, dapm_mark_dirty(widgets[dir], "Route added"); } - if (dapm->card->instantiated && path->connect) + if (path->connect) dapm_path_invalidate(path); return 0; -- 2.19.1.930.g4563a0d9d0-goog _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel