From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757424Ab2GQWu2 (ORCPT ); Tue, 17 Jul 2012 18:50:28 -0400 Received: from mail-gh0-f174.google.com ([209.85.160.174]:63815 "EHLO mail-gh0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757389Ab2GQWuX (ORCPT ); Tue, 17 Jul 2012 18:50:23 -0400 Subject: Patch "timekeeping: Fix leapsecond triggered load spike issue" has been added to the 3.0-stable tree To: johnstul@us.ibm.com, a.p.zijlstra@chello.nl, gregkh@linuxfoundation.org, jengelh@inai.de, linux-kernel@vger.kernel.org, mingo@kernel.org, prarit@redhat.com, tglx@linutronix.de Cc: , From: Date: Tue, 17 Jul 2012 15:49:58 -0700 In-Reply-To: <1342546438-17534-7-git-send-email-johnstul@us.ibm.com> Message-ID: <1342565398100@kroah.org> MIME-Version: 1.0 Content-Type: text/plain; charset=ASCII Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a note to let you know that I've just added the patch titled timekeeping: Fix leapsecond triggered load spike issue to the 3.0-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: timekeeping-fix-leapsecond-triggered-load-spike-issue.patch and it can be found in the queue-3.0 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >>From johnstul@us.ibm.com Tue Jul 17 15:25:50 2012 From: John Stultz Date: Tue, 17 Jul 2012 13:33:53 -0400 Subject: timekeeping: Fix leapsecond triggered load spike issue To: stable@vger.kernel.org Cc: John Stultz , Thomas Gleixner , Prarit Bhargava , Linux Kernel Message-ID: <1342546438-17534-7-git-send-email-johnstul@us.ibm.com> From: John Stultz This is a backport of 4873fa070ae84a4115f0b3c9dfabc224f1bc7c51 The timekeeping code misses an update of the hrtimer subsystem after a leap second happened. Due to that timers based on CLOCK_REALTIME are either expiring a second early or late depending on whether a leap second has been inserted or deleted until an operation is initiated which causes that update. Unless the update happens by some other means this discrepancy between the timekeeping and the hrtimer data stays forever and timers are expired either early or late. The reported immediate workaround - $ data -s "`date`" - is causing a call to clock_was_set() which updates the hrtimer data structures. See: http://www.sheeri.com/content/mysql-and-leap-second-high-cpu-and-fix Add the missing clock_was_set() call to update_wall_time() in case of a leap second event. The actual update is deferred to softirq context as the necessary smp function call cannot be invoked from hard interrupt context. Signed-off-by: John Stultz Reported-by: Jan Engelhardt Reviewed-by: Ingo Molnar Acked-by: Peter Zijlstra Acked-by: Prarit Bhargava Link: http://lkml.kernel.org/r/1341960205-56738-3-git-send-email-johnstul@us.ibm.com Signed-off-by: Thomas Gleixner Cc: Prarit Bhargava Cc: Thomas Gleixner Signed-off-by: John Stultz Signed-off-by: Greg Kroah-Hartman --- kernel/time/timekeeping.c | 4 ++++ 1 file changed, 4 insertions(+) --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -827,6 +827,8 @@ static cycle_t logarithmic_accumulation( leap = second_overflow(xtime.tv_sec); xtime.tv_sec += leap; wall_to_monotonic.tv_sec -= leap; + if (leap) + clock_was_set_delayed(); } /* Accumulate raw time */ @@ -938,6 +940,8 @@ static void update_wall_time(void) leap = second_overflow(xtime.tv_sec); xtime.tv_sec += leap; wall_to_monotonic.tv_sec -= leap; + if (leap) + clock_was_set_delayed(); } timekeeping_update(false); Patches currently in stable-queue which might be from johnstul@us.ibm.com are queue-3.0/timekeeping-fix-leapsecond-triggered-load-spike-issue.patch queue-3.0/time-move-common-updates-to-a-function.patch queue-3.0/timekeeping-fix-clock_monotonic-inconsistency-during-leapsecond.patch queue-3.0/hrtimer-update-hrtimer-base-offsets-each-hrtimer_interrupt.patch queue-3.0/timekeeping-add-missing-update-call-in-timekeeping_resume.patch queue-3.0/hrtimers-move-lock-held-region-in-hrtimer_interrupt.patch queue-3.0/hrtimer-provide-clock_was_set_delayed.patch queue-3.0/ntp-fix-leap-second-hrtimer-livelock.patch queue-3.0/timekeeping-provide-hrtimer-update-function.patch queue-3.0/timekeeping-maintain-ktime_t-based-offsets-for-hrtimers.patch queue-3.0/ntp-correct-tai-offset-during-leap-second.patch