ASoC: rsnd: tidyup original for_each_rsnd_xxx macro
diff mbox

Message ID 87k3d19lmi.wl%kuninori.morimoto.gx@gmail.com
State Accepted
Commit 00463c113b6ba6506b4f1ebb9b3c5dd249f8750f
Delegated to: Mark Brown
Headers show

Commit Message

Kuninori Morimoto Feb. 12, 2014, 1:15 a.m. UTC
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

Current for_each_rsnd_xxx macro will read out-of-array's
memory after last loop operation.
It was not good C language operation, and the binary which was
compiled by (at least) gcc 4.8.1 is broken
This patch tidyup these issues

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/sh/rcar/adg.c  |    7 ++++---
 sound/soc/sh/rcar/rsnd.h |    7 ++++---
 2 files changed, 8 insertions(+), 6 deletions(-)

Comments

Mark Brown Feb. 12, 2014, 11:59 a.m. UTC | #1
On Tue, Feb 11, 2014 at 05:15:51PM -0800, Kuninori Morimoto wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> 
> Current for_each_rsnd_xxx macro will read out-of-array's
> memory after last loop operation.

Applied, thanks.

Patch
diff mbox

diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
index 8d3a82e..bc8961c 100644
--- a/sound/soc/sh/rcar/adg.c
+++ b/sound/soc/sh/rcar/adg.c
@@ -25,9 +25,10 @@  struct rsnd_adg {
 };
 
 #define for_each_rsnd_clk(pos, adg, i)		\
-	for (i = 0, (pos) = adg->clk[i];	\
-	     i < CLKMAX;			\
-	     i++, (pos) = adg->clk[i])
+	for (i = 0;				\
+	     (i < CLKMAX) &&			\
+	     ((pos) = adg->clk[i]);		\
+	     i++)
 #define rsnd_priv_to_adg(priv) ((struct rsnd_adg *)(priv)->adg)
 
 
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index 8b66dc1..9e4efb4 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -216,9 +216,10 @@  struct rsnd_dai {
 
 #define rsnd_dai_nr(priv) ((priv)->dai_nr)
 #define for_each_rsnd_dai(rdai, priv, i)		\
-	for (i = 0, (rdai) = rsnd_dai_get(priv, i);	\
-	     i < rsnd_dai_nr(priv);			\
-	     i++, (rdai) = rsnd_dai_get(priv, i))
+	for (i = 0;					\
+	     (i < rsnd_dai_nr(priv)) &&			\
+	     ((rdai) = rsnd_dai_get(priv, i));		\
+	     i++)
 
 struct rsnd_dai *rsnd_dai_get(struct rsnd_priv *priv, int id);
 int rsnd_dai_disconnect(struct rsnd_mod *mod);