On Mon, Oct 31, 2016 at 07:31:53PM -0400, Paolo Bonzini wrote: > > > In commit 108b249c453dd7132599ab6dc7e435a7036c193f, "KVM: x86: introduce > > get_kvmclock_ns", a function to obtain the time as would be done by the > > guest via kvmclock was introduced and used throughout the code. > > > > The problem is that it reads the guest TSC value via kvm_read_l1_tsc > > which can only be called in vCPU context as it reads VMCS(TSC_OFFSET) > > directly (on Intel CPUs). Therefore, when called in kvm_arch_vm_ioctl > > for KVM_[GS]ET_CLOCK, it returns bogus values, breaking save/restore. > > The patch isn't good unfortunately, because only __get_kvmclock_ns > can return the pvclock value. Agreed. > However, after Luiz's commit a545ab6a0085 > ("kvm: x86: add tsc_offset field to struct kvm_vcpu_arch", 2016-09-07) > the TSC offset is cached outside the VMCS/VMCB I was tempted to use it but saw it not updated in adjust_tsc_offset_* and thought it had some different meaning. Apparently that was just a bug which you also fix in your patch by making adjust_tsc_offset_guest go through kvm_vcpu_write_tsc_offset. > and all the complexity in > vmx.c and (to a lesser extent) svm.c can be dropped. See the following > untested patch... > Consider it Reviewed-by: Roman Kagan <rkagan@xxxxxxxxxxxxx> Tested-by: Roman Kagan <rkagan@xxxxxxxxxxxxx> Thanks, Roman. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html