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