--- x/kernel/time/alarmtimer.c +++ y/kernel/time/alarmtimer.c @@ -549,11 +549,15 @@ static enum alarmtimer_restart alarm_han si_private = ++ptr->it_requeue_pending; if (posix_timer_event(ptr, si_private) && ptr->it_interval) { + ktime_t nspj = NSEC_PER_SEC / HZ; + + if (nspj <= ptr->it_interval) + nspj = ptr->it_interval; /* * Handle ignored signals and rearm the timer. This will go * away once we handle ignored signals proper. */ - ptr->it_overrun += alarm_forward_now(alarm, ptr->it_interval); + ptr->it_overrun += alarm_forward_now(alarm, nspj); ++ptr->it_requeue_pending; ptr->it_active = 1; result = ALARMTIMER_RESTART;