]> www.infradead.org Git - users/jedix/linux-maple.git/commit
ntp: Fix leap-second hrtimer livelock
authorJohn Stultz <john.stultz@linaro.org>
Thu, 15 Mar 2012 20:04:03 +0000 (13:04 -0700)
committerGuru Anbalagane <guru.anbalagane@oracle.com>
Tue, 3 Jul 2012 02:51:46 +0000 (19:51 -0700)
commit7defe04c0fb3e600f3688673c4d3206ee809fce4
tree47885aa32b24894df4976a9986e4e867be2e7e64
parentee6d47e3b9100076c325af2becf3431fb833f4e0
ntp: Fix leap-second hrtimer livelock

Orabug: 14264454  leap second fix for UEK

Since commit 7dffa3c673fbcf835cd7be80bb4aec8ad3f51168 the ntp
subsystem has used an hrtimer for triggering the leapsecond
adjustment. However, this can cause a potential livelock.

Thomas diagnosed this as the following pattern:
CPU 0                                                    CPU 1
do_adjtimex()
  spin_lock_irq(&ntp_lock);
    process_adjtimex_modes();  timer_interrupt()
      process_adj_status();                                do_timer()
        ntp_start_leap_timer();                             write_lock(&xtime_lock);
          hrtimer_start();                                  update_wall_time();
             hrtimer_reprogram();                            ntp_tick_length()
               tick_program_event()                            spin_lock(&ntp_lock);
                 clockevents_program_event()
   ktime_get()
                     seq = req_seqbegin(xtime_lock);

This patch tries to avoid the problem by reverting back to not using
an hrtimer to inject leapseconds, and instead we handle the leapsecond
processing in the second_overflow() function.

The downside to this change is that on systems that support highres
timers, the leap second processing will occur on a HZ tick boundary,
(ie: ~1-10ms, depending on HZ)  after the leap second instead of
possibly sooner (~34us in my tests w/ x86_64 lapic).

This patch applies on top of tip/timers/core.

CC: Sasha Levin <levinsasha928@gmail.com>
CC: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Sasha Levin <levinsasha928@gmail.com>
Diagnoised-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Guru Anbalagane <guru.anbalagane@oracle.com>
include/linux/timex.h
kernel/time/ntp.c
kernel/time/timekeeping.c