diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 38570998a19b..37b10045572e 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c @@ -332,8 +332,10 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires, if (delta > (int64_t)dev->min_delta_ns) { delta = min(delta, (int64_t) dev->max_delta_ns); clc = ((unsigned long long) delta * dev->mult) >> dev->shift; - if (!dev->set_next_event((unsigned long) clc, dev)) + if (!dev->set_next_event((unsigned long) clc, dev)) { + dev->next_event_forced = 0; return 0; + } } if (dev->next_event_forced) diff --git a/kernel/time/tick-oneshot.c b/kernel/time/tick-oneshot.c index 7472597f3225..bf411472d4f7 100644 --- a/kernel/time/tick-oneshot.c +++ b/kernel/time/tick-oneshot.c @@ -34,6 +34,7 @@ int tick_program_event(ktime_t expires, int force) */ clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT_STOPPED); dev->next_event = KTIME_MAX; + dev->next_event_forced = 0; return 0; } @@ -43,6 +44,7 @@ int tick_program_event(ktime_t expires, int force) * before using it. */ clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT); + dev->next_event_forced = 0; } return clockevents_program_event(dev, expires, force);