[PATCH] ASoC: dapm: Use less aggressive caching to ensure correctness

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux