On Fri, May 28, 2021, Ilias Stamatis wrote: > @@ -10343,8 +10360,6 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) > else > vcpu->arch.mp_state = KVM_MP_STATE_UNINITIALIZED; > > - kvm_set_tsc_khz(vcpu, max_tsc_khz); > - > r = kvm_mmu_create(vcpu); > if (r < 0) > return r; > @@ -10443,6 +10458,7 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) > if (mutex_lock_killable(&vcpu->mutex)) > return; > vcpu_load(vcpu); > + kvm_set_tsc_khz(vcpu, max_tsc_khz); It would be safer to move the call within kvm_arch_vcpu_create(), not to postcreate(). postcreate() runs after the vCPU file descriptor is exposed to userspace, e.g. KVM_GET_TSC_KHZ could theoretically read the wrong value. I don't know if there's anything more sinister that could be done, but I also don't see any reason to find out :-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index bc6160db94b1..08f6b8f82506 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -10291,8 +10291,6 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) else vcpu->arch.mp_state = KVM_MP_STATE_UNINITIALIZED; - kvm_set_tsc_khz(vcpu, max_tsc_khz); - r = kvm_mmu_create(vcpu); if (r < 0) return r; @@ -10360,6 +10358,7 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) vcpu->arch.msr_platform_info = MSR_PLATFORM_INFO_CPUID_FAULT; kvm_vcpu_mtrr_init(vcpu); vcpu_load(vcpu); + kvm_set_tsc_khz(vcpu, max_tsc_khz); kvm_vcpu_reset(vcpu, false); kvm_init_mmu(vcpu, false); vcpu_put(vcpu); > kvm_synchronize_tsc(vcpu, 0); > vcpu_put(vcpu); > > -- > 2.17.1 >