| From 75873b83413b95a2de7e6362323dacdd062630f7 Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Thu, 11 Jul 2013 22:32:31 -0700 |
| Subject: 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> |
| (cherry picked from commit 925403f425a4a9c503f2fc295652647b1eb10d82) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/usb/renesas_usbhs/mod_gadget.c | 6 +++--- |
| drivers/usb/renesas_usbhs/mod_host.c | 6 +++--- |
| drivers/usb/renesas_usbhs/pipe.h | 6 +++--- |
| 3 files changed, 9 insertions(+), 9 deletions(-) |
| |
| diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c |
| index 805940c37353..3385aeb5a364 100644 |
| --- a/drivers/usb/renesas_usbhs/mod_gadget.c |
| +++ b/drivers/usb/renesas_usbhs/mod_gadget.c |
| @@ -77,9 +77,9 @@ struct usbhsg_recip_handle { |
| struct usbhsg_gpriv, mod) |
| |
| #define __usbhsg_for_each_uep(start, pos, g, i) \ |
| - for (i = start, pos = (g)->uep + i; \ |
| - i < (g)->uep_size; \ |
| - i++, pos = (g)->uep + i) |
| + for ((i) = start; \ |
| + ((i) < (g)->uep_size) && ((pos) = (g)->uep + (i)); \ |
| + (i)++) |
| |
| #define usbhsg_for_each_uep(pos, gpriv, i) \ |
| __usbhsg_for_each_uep(1, pos, gpriv, i) |
| diff --git a/drivers/usb/renesas_usbhs/mod_host.c b/drivers/usb/renesas_usbhs/mod_host.c |
| index b86815421c8d..e40f565004d0 100644 |
| --- a/drivers/usb/renesas_usbhs/mod_host.c |
| +++ b/drivers/usb/renesas_usbhs/mod_host.c |
| @@ -111,9 +111,9 @@ static const char usbhsh_hcd_name[] = "renesas_usbhs host"; |
| container_of(usbhs_mod_get(priv, USBHS_HOST), struct usbhsh_hpriv, mod) |
| |
| #define __usbhsh_for_each_udev(start, pos, h, i) \ |
| - for (i = start, pos = (h)->udev + i; \ |
| - i < USBHSH_DEVICE_MAX; \ |
| - i++, pos = (h)->udev + i) |
| + for ((i) = start; \ |
| + ((i) < USBHSH_DEVICE_MAX) && ((pos) = (h)->udev + (i)); \ |
| + (i)++) |
| |
| #define usbhsh_for_each_udev(pos, hpriv, i) \ |
| __usbhsh_for_each_udev(1, pos, hpriv, i) |
| diff --git a/drivers/usb/renesas_usbhs/pipe.h b/drivers/usb/renesas_usbhs/pipe.h |
| index b476fde955bf..3e5349879838 100644 |
| --- a/drivers/usb/renesas_usbhs/pipe.h |
| +++ b/drivers/usb/renesas_usbhs/pipe.h |
| @@ -54,9 +54,9 @@ struct usbhs_pipe_info { |
| * pipe list |
| */ |
| #define __usbhs_for_each_pipe(start, pos, info, i) \ |
| - for (i = start, pos = (info)->pipe + i; \ |
| - i < (info)->size; \ |
| - i++, pos = (info)->pipe + i) |
| + for ((i) = start; \ |
| + ((i) < (info)->size) && ((pos) = (info)->pipe + (i)); \ |
| + (i)++) |
| |
| #define usbhs_for_each_pipe(pos, priv, i) \ |
| __usbhs_for_each_pipe(1, pos, &((priv)->pipe_info), i) |
| -- |
| 1.8.5.rc3 |
| |