lkml.org 
[lkml]   [2018]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 013/104] usb: renesas_usbhs: tidyup original usbhsx_for_each_xxx macro
    3.2.101-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

    commit 925403f425a4a9c503f2fc295652647b1eb10d82 upstream.

    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>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    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(-)

    --- a/drivers/usb/renesas_usbhs/mod_gadget.c
    +++ b/drivers/usb/renesas_usbhs/mod_gadget.c
    @@ -76,9 +76,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)
    --- a/drivers/usb/renesas_usbhs/mod_host.c
    +++ b/drivers/usb/renesas_usbhs/mod_host.c
    @@ -131,9 +131,9 @@ static const char usbhsh_hcd_name[] = "r
    __usbhsh_for_each_hpipe(0, pos, hpriv, i)

    #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)
    --- 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)
    \
     
     \ /
      Last update: 2018-03-12 04:52    [W:2.396 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site