All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Thomas Gleixner <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org,
	gleb@kernel.org, john.stultz@linaro.org, pbonzini@redhat.com,
	chris.j.arges@canonical.com, tglx@linutronix.de
Subject: [tip:timers/urgent] timekeeping: Update timekeeper before updating vsyscall and pvclock
Date: Sat, 6 Sep 2014 04:01:31 -0700	[thread overview]
Message-ID: <tip-9bf2419fa7bffa16ce58a4d5c20399eff8c970c9@git.kernel.org> (raw)
In-Reply-To: <alpine.DEB.2.10.1409050000570.3333@nanos>

Commit-ID:  9bf2419fa7bffa16ce58a4d5c20399eff8c970c9
Gitweb:     http://git.kernel.org/tip/9bf2419fa7bffa16ce58a4d5c20399eff8c970c9
Author:     Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Sat, 6 Sep 2014 12:24:49 +0200
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Sat, 6 Sep 2014 12:58:18 +0200

timekeeping: Update timekeeper before updating vsyscall and pvclock

The update_walltime() code works on the shadow timekeeper to make the
seqcount protected region as short as possible. But that update to the
shadow timekeeper does not update all timekeeper fields because it's
sufficient to do that once before it becomes life. One of these fields
is tkr.base_mono. That stays stale in the shadow timekeeper unless an
operation happens which copies the real timekeeper to the shadow.

The update function is called after the update calls to vsyscall and
pvclock. While not correct, it did not cause any problems because none
of the invoked update functions used base_mono.

commit cbcf2dd3b3d4 (x86: kvm: Make kvm_get_time_and_clockread()
nanoseconds based) changed that in the kvm pvclock update function, so
the stale mono_base value got used and caused kvm-clock to malfunction.

Put the update where it belongs and fix the issue.

Reported-by: Chris J Arges <chris.j.arges@canonical.com>
Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: Gleb Natapov <gleb@kernel.org>
Cc: John Stultz <john.stultz@linaro.org>
Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1409050000570.3333@nanos
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 kernel/time/timekeeping.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index fb4a9c2..ec1791f 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -442,11 +442,12 @@ static void timekeeping_update(struct timekeeper *tk, unsigned int action)
 		tk->ntp_error = 0;
 		ntp_clear();
 	}
-	update_vsyscall(tk);
-	update_pvclock_gtod(tk, action & TK_CLOCK_WAS_SET);
 
 	tk_update_ktime_data(tk);
 
+	update_vsyscall(tk);
+	update_pvclock_gtod(tk, action & TK_CLOCK_WAS_SET);
+
 	if (action & TK_MIRROR)
 		memcpy(&shadow_timekeeper, &tk_core.timekeeper,
 		       sizeof(tk_core.timekeeper));

      parent reply	other threads:[~2014-09-06 11:01 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-04 12:58 [PATCH] KVM: x86: fix kvmclock breakage from timers branch merge Paolo Bonzini
2014-09-04 16:00 ` Chris J Arges
2014-09-04 17:14   ` Paolo Bonzini
2014-09-04 18:16     ` Chris J Arges
2014-09-04 19:15       ` Paolo Bonzini
2014-09-04 19:42         ` Paolo Bonzini
2014-09-04 20:37           ` Chris J Arges
2014-09-04 20:40             ` Paolo Bonzini
2014-09-04 20:43               ` Chris J Arges
2014-09-04 19:00   ` John Stultz
2014-09-04 19:14     ` Paolo Bonzini
2014-09-04 17:56 ` Paolo Bonzini
2014-09-04 20:58 ` Thomas Gleixner
2014-09-04 21:22   ` Paolo Bonzini
2014-09-04 22:24     ` Thomas Gleixner
2014-09-05 15:14     ` Thomas Gleixner
2014-09-05 16:39       ` Paolo Bonzini
2014-09-05 18:33         ` Thomas Gleixner
2014-09-05 20:37           ` Paolo Bonzini
2014-09-05 20:41             ` Thomas Gleixner
2014-09-05 21:00               ` Paolo Bonzini
2014-09-08 15:28                 ` Chris J Arges
2014-09-06 11:01       ` tip-bot for Thomas Gleixner [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-9bf2419fa7bffa16ce58a4d5c20399eff8c970c9@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=chris.j.arges@canonical.com \
    --cc=gleb@kernel.org \
    --cc=hpa@zytor.com \
    --cc=john.stultz@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.