From: Ingo Molnar Do not set expires_next to KTIME_MAX if a too short timeout is being set - this can result in the clock events device being shut down completely. Found via a stresstest on a C3-lapic-plagued laptop that did very short sleeps. This bug could explain the 'Synaptics hang' that was reported. Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner Cc: Roman Zippel Cc: john stultz Cc: Andi Kleen Signed-off-by: Andrew Morton --- kernel/time/clockevents.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff -puN kernel/time/clockevents.c~updated-add-a-framework-to-manage-clock-event-devices-next_event-calculation-fix kernel/time/clockevents.c --- a/kernel/time/clockevents.c~updated-add-a-framework-to-manage-clock-event-devices-next_event-calculation-fix +++ a/kernel/time/clockevents.c @@ -510,10 +510,8 @@ int clockevents_set_next_event(ktime_t e struct clock_event_device *nextevt = devices->nextevt; int64_t delta = ktime_to_ns(ktime_sub(expires, ktime_get())); - if (delta <= 0 && !force) { - devices->expires_next.tv64 = KTIME_MAX; + if (delta <= 0 && !force) return -ETIME; - } devices->expires_next = expires; _