From: john stultz The reduced ntp rework patch part 2 adds a new ntp_leapsecond() which should replace the existing leapsecond processing. However somehow the chunk which removes the old code got dropped. Probably my fault. Without this patch, its possible the leapsecond TIME_OOP state would not be set for the second following a insertion. Signed-off-by: Andrew Morton --- kernel/timer.c | 52 ----------------------------------------------- 1 files changed, 52 deletions(-) diff -puN kernel/timer.c~time-reduced-ntp-rework-part-2-remove-duplicate kernel/timer.c --- devel/kernel/timer.c~time-reduced-ntp-rework-part-2-remove-duplicate 2006-03-04 02:22:47.000000000 -0800 +++ devel-akpm/kernel/timer.c 2006-03-04 02:22:47.000000000 -0800 @@ -711,58 +711,6 @@ static void second_overflow(void) } /* - * Leap second processing. If in leap-insert state at the end of the - * day, the system clock is set back one second; if in leap-delete - * state, the system clock is set ahead one second. The microtime() - * routine or external clock driver will insure that reported time is - * always monotonic. The ugly divides should be replaced. - */ - switch (time_state) { - case TIME_OK: - if (time_status & STA_INS) - time_state = TIME_INS; - else if (time_status & STA_DEL) - time_state = TIME_DEL; - break; - case TIME_INS: - if (xtime.tv_sec % 86400 == 0) { - xtime.tv_sec--; - wall_to_monotonic.tv_sec++; - /* - * The timer interpolator will make time change - * gradually instead of an immediate jump by one second - */ - time_interpolator_update(-NSEC_PER_SEC); - time_state = TIME_OOP; - clock_was_set(); - printk(KERN_NOTICE "Clock: inserting leap second " - "23:59:60 UTC\n"); - } - break; - case TIME_DEL: - if ((xtime.tv_sec + 1) % 86400 == 0) { - xtime.tv_sec++; - wall_to_monotonic.tv_sec--; - /* - * Use of time interpolator for a gradual change of - * time - */ - time_interpolator_update(NSEC_PER_SEC); - time_state = TIME_WAIT; - clock_was_set(); - printk(KERN_NOTICE "Clock: deleting leap second " - "23:59:59 UTC\n"); - } - break; - case TIME_OOP: - time_state = TIME_WAIT; - break; - case TIME_WAIT: - if (!(time_status & (STA_INS | STA_DEL))) - time_state = TIME_OK; - } - - /* * Compute the phase adjustment for the next second. In PLL mode, the * offset is reduced by a fixed factor times the time constant. In FLL * mode the offset is used directly. In either mode, the maximum phase _