On Thu, 19 Oct 2017, Matt Redfearn wrote: > unsigned long long clc; > int64_t delta; > + int i; > > - delta = dev->min_delta_ns; > - dev->next_event = ktime_add_ns(ktime_get(), delta); > + for (i = 0;;) { Bah. What's wrong with for (i = 0; i < 10; i++) { .... if (!(dev->set_next_event((unsigned long) clc, dev)) return 0; } return -ETIME; Hmm? > + delta = dev->min_delta_ns; > + dev->next_event = ktime_add_ns(ktime_get(), delta); > > - if (clockevent_state_shutdown(dev)) > - return 0; > + if (clockevent_state_shutdown(dev)) > + return 0; > > - dev->retries++; > - clc = ((unsigned long long) delta * dev->mult) >> dev->shift; > - return dev->set_next_event((unsigned long) clc, dev); > + dev->retries++; > + clc = ((unsigned long long) delta * dev->mult) >> dev->shift; I'd rather make that: delta = 0; for (i = 0; i < 10; i++) { delta += dev->min_delta_ns; dev->next_event = ktime_add_ns(ktime_get(), delta); clc = ..... ..... That makes it more likely to succeed fast. Hmm? Thanks, tglx