| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Mon, 16 Jul 2012 12:50:42 -0400 |
| Subject: timekeeping: Add missing update call in timekeeping_resume() |
| |
| This is a backport of 3e997130bd2e8c6f5aaa49d6e3161d4d29b43ab0 |
| |
| The leap second rework unearthed another issue of inconsistent data. |
| |
| On timekeeping_resume() the timekeeper data is updated, but nothing |
| calls timekeeping_update(), so now the update code in the timer |
| interrupt sees stale values. |
| |
| This has been the case before those changes, but then the timer |
| interrupt was using stale data as well so this went unnoticed for quite |
| some time. |
| |
| Add the missing update call, so all the data is consistent everywhere. |
| |
| Reported-by: Andreas Schwab <schwab@linux-m68k.org> |
| Reported-and-tested-by: "Rafael J. Wysocki" <rjw@sisk.pl> |
| Reported-and-tested-by: Martin Steigerwald <Martin@lichtvoll.de> |
| Cc: LKML <linux-kernel@vger.kernel.org> |
| Cc: Linux PM list <linux-pm@vger.kernel.org> |
| Cc: John Stultz <johnstul@us.ibm.com> |
| Cc: Ingo Molnar <mingo@kernel.org> |
| Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>, |
| Cc: Prarit Bhargava <prarit@redhat.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: John Stultz <johnstul@us.ibm.com> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| [John Stultz: Backported to 3.2] |
| Cc: Prarit Bhargava <prarit@redhat.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Linux Kernel <linux-kernel@vger.kernel.org> |
| Signed-off-by: John Stultz <johnstul@us.ibm.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| kernel/time/timekeeping.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c |
| index 4938c5e..03e67d4 100644 |
| --- a/kernel/time/timekeeping.c |
| +++ b/kernel/time/timekeeping.c |
| @@ -699,6 +699,7 @@ static void timekeeping_resume(void) |
| timekeeper.clock->cycle_last = timekeeper.clock->read(timekeeper.clock); |
| timekeeper.ntp_error = 0; |
| timekeeping_suspended = 0; |
| + timekeeping_update(false); |
| write_sequnlock_irqrestore(&xtime_lock, flags); |
| |
| touch_softlockup_watchdog(); |