Re: [PATCH] staging: greybus: loopback: fix broken udelay

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <johan@xxxxxxxxxx>
> ---
>  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.logic@xxxxxxxxxxxxxxxxx>
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux