On 26/01/17 11:37, Johan Hovold wrote:
> 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 <[email protected]>
> ---
> drivers/staging/greybus/loopback.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/staging/greybus/loopback.c
> b/drivers/staging/greybus/loopback.c
> index 6c2a41c638c3..a8329daf1e57 100644
> --- a/drivers/staging/greybus/loopback.c
> +++ b/drivers/staging/greybus/loopback.c
> @@ -1061,8 +1061,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);
>
Makes sense to me, thanks.
Acked-by: Bryan O'Donoghue <[email protected]>
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel