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 <jo...@kernel.org>
> ---
>  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 <pure.lo...@nexus-software.ie>
_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to