lkml.org 
[lkml]   [2017]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 033/153] staging: greybus: loopback: fix broken udelay
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Johan Hovold <johan@kernel.org>

    commit 33b8807a6fe10d0e675e0704444373a6fad93188 upstream.

    The loopback driver allows the user to set a minimum delay of up to one
    second to be inserted between test iterations (i.e. request
    submissions). The delay is currently specified in microseconds and is
    implemented using udelay.

    Busy looping for long periods is not just anti-social; udelay must not
    be used for delays longer than a few milliseconds due to the risk of
    integer overflow.

    Replace the broken udelay with a usleep_range with a 100 us range for
    short delays (< 20 ms) and otherwise revert to using msleep.

    Fixes: b36f04fa9417 ("greybus: loopback: Convert thread delay to microseconds")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/staging/greybus/loopback.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    --- a/drivers/staging/greybus/loopback.c
    +++ b/drivers/staging/greybus/loopback.c
    @@ -1051,8 +1051,13 @@ static int gb_loopback_fn(void *data)
    gb_loopback_calculate_stats(gb, !!error);
    }
    gb->send_count++;
    - if (us_wait)
    - udelay(us_wait);
    +
    + if (us_wait) {
    + if (us_wait < 20000)
    + usleep_range(us_wait, us_wait + 100);
    + else
    + msleep(us_wait / 1000);
    + }
    }

    gb_pm_runtime_put_autosuspend(bundle);

    \
     
     \ /
      Last update: 2017-03-10 12:31    [W:7.749 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site