lkml.org 
[lkml]   [2013]   [Jul]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 017/145] usb: gadget: f_mass_storage: add missing memory barrier for thread_wakeup_needed
    Date
    3.8.13.5 -stable review patch.  If anyone has any objections, please let me know.

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

    From: UCHINO Satoshi <satoshi.uchino@toshiba.co.jp>

    commit d68c277b501889b3a50c179d1c3d704db7947b83 upstream.

    Without this memory barrier, the file-storage thread may fail to
    escape from the following while loop, because it may observe new
    common->thread_wakeup_needed and old bh->state which are updated by
    the callback functions.

    /* Wait for the CBW to arrive */
    while (bh->state != BUF_STATE_FULL) {
    rc = sleep_thread(common);
    if (rc)
    return rc;
    }

    Signed-off-by: UCHINO Satoshi <satoshi.uchino@toshiba.co.jp>
    Acked-by: Michal Nazarewicz <mina86@mina86.com>
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/usb/gadget/f_mass_storage.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
    index 5d027b3..452e4f6 100644
    --- a/drivers/usb/gadget/f_mass_storage.c
    +++ b/drivers/usb/gadget/f_mass_storage.c
    @@ -427,6 +427,7 @@ static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
    /* Caller must hold fsg->lock */
    static void wakeup_thread(struct fsg_common *common)
    {
    + smp_wmb(); /* ensure the write of bh->state is complete */
    /* Tell the main thread that something has happened */
    common->thread_wakeup_needed = 1;
    if (common->thread_task)
    @@ -646,6 +647,7 @@ static int sleep_thread(struct fsg_common *common)
    }
    __set_current_state(TASK_RUNNING);
    common->thread_wakeup_needed = 0;
    + smp_rmb(); /* ensure the latest bh->state is visible */
    return rc;
    }

    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-07-18 01:21    [W:4.089 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site