On Fri, 2018-04-13 at 17:35 +0200, Paolo Bonzini wrote: > On 13/04/2018 14:40, Raslan, KarimAllah wrote: > > > > > > > > > > > static void update_ia32_tsc_adjust_msr(struct kvm_vcpu *vcpu, s64 offset) > > > { > > > - u64 curr_offset = vcpu->arch.tsc_offset; > > > + u64 curr_offset = kvm_x86_ops->read_l1_tsc_offset(vcpu); > > I might be missing something but is this really strictly needed or is > > it really a bug? > > > > I can see update_ia32_tsc_adjust_msr called from kvm_write_tsc only > > which is called from a) vmx_set_msr or b) kvm_arch_vcpu_postcreate. > > The adjust_msr would only be called if !host_initiated. So only > > vmx_set_msr which is coming from an L1 write (or a restore but that > > would not be !host_initiated). So the only that tsc_adjust is called is > > !is_guest_mode. > > It can also be called from guest mode if the MSR bitmap says there's no > L1 vmexit for that MSR; that's what the testcases do. Apparently I will never wrap my head around this nested stuff :D > > Paolo > > > > > > > > > vcpu->arch.ia32_tsc_adjust_msr += offset - curr_offset; > > Amazon Development Center Germany GmbH Berlin - Dresden - Aachen main office: Krausenstr. 38, 10117 Berlin Geschaeftsfuehrer: Dr. Ralf Herbrich, Christian Schlaeger Ust-ID: DE289237879 Eingetragen am Amtsgericht Charlottenburg HRB 149173 B