]> git.baikalelectronics.ru Git - kernel.git/commit
timekeeping: Update timekeeper before updating vsyscall and pvclock
authorThomas Gleixner <tglx@linutronix.de>
Sat, 6 Sep 2014 10:24:49 +0000 (12:24 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 6 Sep 2014 10:58:18 +0000 (12:58 +0200)
commit669633a3209ce688b11cd5f501d8d1ae2a9f4676
tree23415c1be550979e70c5ecabff7a76aff47ee378
parentb8b904b02454e0468dd1dab7b0713edc119426a8
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 2e31cd24142d (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