|
@@ -280,17 +280,22 @@ static int clockevents_program_min_delta(struct clock_event_device *dev)
|
|
|
static int clockevents_program_min_delta(struct clock_event_device *dev)
|
|
static int clockevents_program_min_delta(struct clock_event_device *dev)
|
|
|
{
|
|
{
|
|
|
unsigned long long clc;
|
|
unsigned long long clc;
|
|
|
- int64_t delta;
|
|
|
|
|
|
|
+ int64_t delta = 0;
|
|
|
|
|
+ int i;
|
|
|
|
|
|
|
|
- delta = dev->min_delta_ns;
|
|
|
|
|
- dev->next_event = ktime_add_ns(ktime_get(), delta);
|
|
|
|
|
|
|
+ for (i = 0; i < 10; i++) {
|
|
|
|
|
+ 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;
|
|
|
|
|
+ if (dev->set_next_event((unsigned long) clc, dev) == 0)
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return -ETIME;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#endif /* CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST */
|
|
#endif /* CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST */
|