[alsa-devel] [PATCH] ASoC: fix oops w/ for_each_rtd_codec_dai_rollback() macro
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Fri Oct 26 23:54:43 CEST 2018
A kernel oops happens on an error case (usual missing BE mixer
configuration required by Intel SST driver). Git bisect points to this
macro and an operator precedence issue.
for (; ((i--) >= 0) && ((dai) = rtd->codec_dais[i]);)
The initial code replaced by this macro was
while (--i >= 0) {
codec_dai = rtd->codec_dais[i];
Fix the C operator precedence difference by reverting to pre-decrement
Fixes: 0b7990e3897 ('ASoC: add for_each_rtd_codec_dai() macro')
Cc: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
---
include/sound/soc.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index f1dab1f4b194..70c10a8f3e90 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -1192,7 +1192,7 @@ struct snd_soc_pcm_runtime {
((i) < rtd->num_codecs) && ((dai) = rtd->codec_dais[i]); \
(i)++)
#define for_each_rtd_codec_dai_rollback(rtd, i, dai) \
- for (; ((i--) >= 0) && ((dai) = rtd->codec_dais[i]);)
+ for (; ((--i) >= 0) && ((dai) = rtd->codec_dais[i]);)
/* mixer control */
--
2.17.1
More information about the Alsa-devel
mailing list