Hi, On Mon, Oct 10, 2016 at 1:04 PM, Brian Norris <briannorris at chromium.org> wrote: > Hi Doug, > > On Mon, Oct 10, 2016 at 11:47:57AM -0700, Doug Anderson wrote: >> diff --git a/kernel/time/timer.c b/kernel/time/timer.c >> index 32bf6f75a8fe..ab03c7e403a4 100644 >> --- a/kernel/time/timer.c >> +++ b/kernel/time/timer.c >> @@ -1898,12 +1898,29 @@ EXPORT_SYMBOL(msleep_interruptible); >> >> static void __sched do_usleep_range(unsigned long min, unsigned long max) >> { >> + ktime_t start, end; >> ktime_t kmin; >> u64 delta; >> + unsigned long elapsed = 0; >> + int ret; >> + >> + start = ktime_get(); >> + do { >> + kmin = ktime_set(0, min * NSEC_PER_USEC); > > I believe 'min' is unmodified throughout, and therefore 'kmin' is > computed to be the same minimum timeout in each loop. Shouldn't this be > decreasing on each iteration of the loop? (i.e., either your compute > 'kmin' differently here, or you recompute 'min' based on the elapsed > time?) Yes, I stupidly changed something at the last second and then didn't test again after my stupid change. Fix coming soon with all comments addressed. Sorry for posting broken code. :( :( :( -Doug