Commit 925403f425a4a9c503f2fc295652647b1eb10d82

Authored by Kuninori Morimoto
Committed by Felipe Balbi
1 parent 519c6013d3

usb: renesas_usbhs: tidyup original usbhsx_for_each_xxx macro

Current usbhsx_for_each_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

Reported-by: Yusuke Goda <yusuke.goda.sx@renesas.com>
Reviewed-by: Takashi Yoshii <takashi.yoshii.zj@renesas.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>

Showing 3 changed files with 9 additions and 9 deletions Side-by-side Diff

drivers/usb/renesas_usbhs/mod_gadget.c
... ... @@ -77,9 +77,9 @@
77 77 struct usbhsg_gpriv, mod)
78 78  
79 79 #define __usbhsg_for_each_uep(start, pos, g, i) \
80   - for (i = start, pos = (g)->uep + i; \
81   - i < (g)->uep_size; \
82   - i++, pos = (g)->uep + i)
  80 + for ((i) = start; \
  81 + ((i) < (g)->uep_size) && ((pos) = (g)->uep + (i)); \
  82 + (i)++)
83 83  
84 84 #define usbhsg_for_each_uep(pos, gpriv, i) \
85 85 __usbhsg_for_each_uep(1, pos, gpriv, i)
drivers/usb/renesas_usbhs/mod_host.c
... ... @@ -111,9 +111,9 @@
111 111 container_of(usbhs_mod_get(priv, USBHS_HOST), struct usbhsh_hpriv, mod)
112 112  
113 113 #define __usbhsh_for_each_udev(start, pos, h, i) \
114   - for (i = start, pos = (h)->udev + i; \
115   - i < USBHSH_DEVICE_MAX; \
116   - i++, pos = (h)->udev + i)
  114 + for ((i) = start; \
  115 + ((i) < USBHSH_DEVICE_MAX) && ((pos) = (h)->udev + (i)); \
  116 + (i)++)
117 117  
118 118 #define usbhsh_for_each_udev(pos, hpriv, i) \
119 119 __usbhsh_for_each_udev(1, pos, hpriv, i)
drivers/usb/renesas_usbhs/pipe.h
... ... @@ -54,9 +54,9 @@
54 54 * pipe list
55 55 */
56 56 #define __usbhs_for_each_pipe(start, pos, info, i) \
57   - for (i = start, pos = (info)->pipe + i; \
58   - i < (info)->size; \
59   - i++, pos = (info)->pipe + i)
  57 + for ((i) = start; \
  58 + ((i) < (info)->size) && ((pos) = (info)->pipe + (i)); \
  59 + (i)++)
60 60  
61 61 #define usbhs_for_each_pipe(pos, priv, i) \
62 62 __usbhs_for_each_pipe(1, pos, &((priv)->pipe_info), i)