From patchwork Tue Jul 17 06:39:51 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: john stultz X-Patchwork-Id: 10022 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id D9A2823E56 for ; Tue, 17 Jul 2012 06:40:45 +0000 (UTC) Received: from mail-gh0-f180.google.com (mail-gh0-f180.google.com [209.85.160.180]) by fiordland.canonical.com (Postfix) with ESMTP id 46E09A185E8 for ; Tue, 17 Jul 2012 06:40:45 +0000 (UTC) Received: by ghbz12 with SMTP id z12so51729ghb.11 for ; Mon, 16 Jul 2012 23:40:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf:from:to:cc :subject:date:message-id:x-mailer:in-reply-to:references :x-content-scanned:x-cbid:x-gm-message-state; bh=/hVfPVEVs+SqnBwLIwwCz5QuRjYdcsJRdzgtpaDBuDg=; b=FSBBPb8IMdacPpD27//j4go2G89lrZLWbzpiCU9VjXkv1wMlFa85nPgNhEJ1Zup0Yz 713XJLL8Ikh3ZaO3Vaow3msu9gp/SjV7JTlXch3n64g+Iy1tIYluGDxJWEatDSER70Zu KY+9KtFJq0fiI21RahB9eKwi/DtdtgLOiQ9zicoMZN71vrjRcbkxHRI3AhpBNWbZ8nX8 w52/2VBmp0r/Mv2Sg7S4NzwQQrpGj6EJFiKXRXd68E9W+mUF7Eti38MdFJ5bWVQpx4uF 04faQ5L0Jd48WVOkV9/gDDjgqw0tGKIWqBf7Yo04B/QnO3fvBeOva8Nrgni2t1HUtgai b8fQ== Received: by 10.50.193.196 with SMTP id hq4mr383314igc.57.1342507244535; Mon, 16 Jul 2012 23:40:44 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.231.241.2 with SMTP id lc2csp15743ibb; Mon, 16 Jul 2012 23:40:43 -0700 (PDT) Received: by 10.60.29.230 with SMTP id n6mr1688273oeh.22.1342507243240; Mon, 16 Jul 2012 23:40:43 -0700 (PDT) Received: from e37.co.us.ibm.com (e37.co.us.ibm.com. [32.97.110.158]) by mx.google.com with ESMTPS id d10si17407795obl.111.2012.07.16.23.40.43 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 16 Jul 2012 23:40:43 -0700 (PDT) Received-SPF: pass (google.com: domain of johnstul@us.ibm.com designates 32.97.110.158 as permitted sender) client-ip=32.97.110.158; Authentication-Results: mx.google.com; spf=pass (google.com: domain of johnstul@us.ibm.com designates 32.97.110.158 as permitted sender) smtp.mail=johnstul@us.ibm.com Received: from /spool/local by e37.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Jul 2012 00:40:42 -0600 Received: from d01dlp03.pok.ibm.com (9.56.224.17) by e37.co.us.ibm.com (192.168.1.137) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Jul 2012 00:40:12 -0600 Received: from d01relay01.pok.ibm.com (d01relay01.pok.ibm.com [9.56.227.233]) by d01dlp03.pok.ibm.com (Postfix) with ESMTP id A7E4BC9005C for ; Tue, 17 Jul 2012 02:40:11 -0400 (EDT) Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q6H6eB51424698 for ; Tue, 17 Jul 2012 02:40:11 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q6HCB4Zf020904 for ; Tue, 17 Jul 2012 08:11:04 -0400 Received: from kernel.stglabs.ibm.com (kernel.stglabs.ibm.com [9.114.214.19]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q6HCB4c8020889; Tue, 17 Jul 2012 08:11:04 -0400 From: John Stultz To: stable@vger.kernel.org Cc: John Stultz , Thomas Gleixner , Prarit Bhargava , Linux Kernel Subject: [PATCH 2/7] 3.4.x: timekeeping: Fix leapsecond triggered load spike issue Date: Tue, 17 Jul 2012 02:39:51 -0400 Message-Id: <1342507196-54327-3-git-send-email-johnstul@us.ibm.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1342507196-54327-1-git-send-email-johnstul@us.ibm.com> References: <1342507196-54327-1-git-send-email-johnstul@us.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 12071706-7408-0000-0000-000006D22391 X-Gm-Message-State: ALoCoQmEsdBN+Nwwnr27IEK8F3gnumKNyxwiaAlUM1NiG0hrclddUtoOgVcZK3DDm8G16ynP9GAe 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 Cc: stable@vger.kernel.org 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 Cc: Linux Kernel Signed-off-by: John Stultz --- kernel/time/timekeeping.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index d42574df..9588f0c 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -965,6 +965,8 @@ static cycle_t logarithmic_accumulation(cycle_t offset, int shift) leap = second_overflow(timekeeper.xtime.tv_sec); timekeeper.xtime.tv_sec += leap; timekeeper.wall_to_monotonic.tv_sec -= leap; + if (leap) + clock_was_set_delayed(); } /* Accumulate raw time */ @@ -1081,6 +1083,8 @@ static void update_wall_time(void) leap = second_overflow(timekeeper.xtime.tv_sec); timekeeper.xtime.tv_sec += leap; timekeeper.wall_to_monotonic.tv_sec -= leap; + if (leap) + clock_was_set_delayed(); } timekeeping_update(false);