Files
kernel-eswin-eic7700/include/linux
John Stultz 6b43ae8a61 ntp: Fix leap-second hrtimer livelock
Since commit 7dffa3c673 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>
2012-03-22 19:43:43 -07:00
..
2012-01-22 15:08:43 -05:00
2011-12-13 15:30:49 -05:00
2011-11-02 16:07:03 -07:00
2011-10-26 15:43:25 -04:00
2011-08-03 11:30:42 -04:00
2011-07-31 22:05:09 +02:00
2012-01-10 16:30:42 -08:00
2012-01-03 22:54:57 -05:00
2011-08-25 16:25:33 -07:00
2011-10-29 21:20:22 +02:00
2011-12-13 09:26:45 +00:00
2011-11-07 23:54:53 +01:00
2012-01-04 08:56:31 -06:00
2011-10-31 20:19:04 +00:00
2011-11-26 14:59:39 -05:00
2011-12-09 17:35:51 -08:00
2011-12-11 18:25:16 -05:00
2012-01-12 20:13:04 -08:00
2011-09-14 15:24:51 -04:00
2012-01-03 22:54:58 -05:00
2011-12-13 11:58:49 +01:00
2012-01-12 20:13:08 -08:00
2012-01-03 22:54:56 -05:00
2011-11-13 16:10:10 -05:00
2012-01-03 22:55:17 -05:00
2011-12-11 18:25:16 -05:00
2011-09-27 18:08:04 +02:00
2012-01-09 13:52:09 +01:00
2012-01-12 20:13:11 -08:00
2012-01-17 15:40:51 -08:00
2011-12-27 11:26:41 +02:00
2011-09-16 19:20:20 -04:00
2012-03-15 21:41:34 +01:00
2012-01-12 20:13:10 -08:00
2011-11-14 00:47:54 -05:00
2011-07-31 12:18:16 -04:00
2011-10-31 14:03:22 +01:00
2012-01-06 12:10:26 -08:00
2012-01-12 15:23:04 -08:00
2011-12-13 09:26:45 +00:00
2011-11-02 16:07:02 -07:00
2012-01-03 22:55:07 -05:00
2012-01-03 22:54:56 -05:00
2012-02-02 12:55:17 -08:00
2012-01-03 22:52:40 -05:00
2012-01-09 09:33:57 +09:00
2011-07-30 08:44:19 -10:00
2011-12-13 09:26:45 +00:00
2011-10-31 17:30:47 -07:00
2011-08-16 00:16:49 -07:00
2011-08-03 14:25:22 -10:00
2012-01-03 22:54:56 -05:00
2012-03-22 19:43:43 -07:00
2012-01-24 12:25:14 -08:00
2011-11-02 16:07:02 -07:00
2011-09-14 15:24:51 -04:00