Skip to content

Commit

Permalink
x86/kvmclock: set pvti_cpu0_va after enabling kvmclock
Browse files Browse the repository at this point in the history
commit 94ffba4 upstream.

pvti_cpu0_va is the address of shared kvmclock data structure.

pvti_cpu0_va is currently kept unset (1) on 32 bit systems, (2) when
kvmclock vsyscall is disabled, and (3) if kvmclock is not stable.
This poses a problem, because kvm_ptp needs pvti_cpu0_va, but (1) can
work on 32 bit, (2) has little relation to the vsyscall, and (3) does
not need stable kvmclock (although kvmclock won't be used for system
clock if it's not stable, so kvm_ptp is pointless in that case).

Expose pvti_cpu0_va whenever kvmclock is enabled to allow all users to
work with it.

This fixes a regression found on Gentoo: https://bugs.gentoo.org/658544.

Fixes: 9f08890 ("x86/pvclock: add setter for pvclock_pvti_cpu0_va")
Cc: stable@vger.kernel.org
Reported-by: Andreas Steinmetz <ast@domdv.de>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
rkrcmar authored and gregkh committed Jul 25, 2018
1 parent 7bb53f0 commit 7d606a6
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions arch/x86/kernel/kvmclock.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,8 @@ void __init kvmclock_init(void)
printk(KERN_INFO "kvm-clock: Using msrs %x and %x",
msr_kvm_system_time, msr_kvm_wall_clock);

pvclock_set_pvti_cpu0_va(hv_clock);

if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT))
pvclock_set_flags(PVCLOCK_TSC_STABLE_BIT);

Expand Down Expand Up @@ -366,14 +368,11 @@ int __init kvm_setup_vsyscall_timeinfo(void)
vcpu_time = &hv_clock[cpu].pvti;
flags = pvclock_read_flags(vcpu_time);

if (!(flags & PVCLOCK_TSC_STABLE_BIT)) {
put_cpu();
return 1;
}

pvclock_set_pvti_cpu0_va(hv_clock);
put_cpu();

if (!(flags & PVCLOCK_TSC_STABLE_BIT))
return 1;

kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK;
#endif
return 0;
Expand Down

0 comments on commit 7d606a6

Please sign in to comment.