On Mon, May 24, 2021, Paolo Bonzini wrote: > On 21/05/21 12:24, Ilias Stamatis wrote: > > @@ -3537,10 +3539,14 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) > > * return L1's TSC value to ensure backwards-compatible > > * behavior for migration. > > */ > > - u64 tsc_offset = msr_info->host_initiated ? vcpu->arch.l1_tsc_offset : > > - vcpu->arch.tsc_offset; > > - > > - msr_info->data = kvm_scale_tsc(vcpu, rdtsc()) + tsc_offset; > > + if (msr_info->host_initiated) > > + msr_info->data = kvm_scale_tsc( > > + vcpu, rdtsc(), vcpu->arch.l1_tsc_scaling_ratio > > + ) + vcpu->arch.l1_tsc_offset; > > Better indentation: > > msr_info->data = vcpu->arch.l1_tsc_offset + > kvm_scale_tsc(vcpu, rdtsc(), I like this more, but it's still a bit ugly. > vcpu->arch.tsc_scaling_ratio); Wrong pairing of ratio and offset (not necessarily what you queued, obviously). > > Same below. Alternatively, what about something like this? u64 offset, ratio; if (msr_info->host_initiated) { offset = vcpu->arch.l1_tsc_offset; ratio = vcpu->arch.l1_tsc_scaling_ratio; } else { offset = vcpu->arch.tsc_offset; ratio = vcpu->arch.tsc_scaling_ratio; } msr_info->data = kvm_scale_tsc(vcpu, rdtsc(), ratio) + offset; or an option that would require additional refactoring: struct kvm_guest_tsc *tsc; tsc = msr_info->host_initiated ? &vcpu->arch.l1_tsc : &vcpu->arch.current_tsc; msr_info->data = tsc->offset + kvm_scale_tsc(vcpu, rdtsc(), tsc->scaling_ratio); > > Paolo > > > + else > > + msr_info->data = kvm_scale_tsc( > > + vcpu, rdtsc(), vcpu->arch.tsc_scaling_ratio > > + ) + vcpu->arch.tsc_offset; > > break; > > } > > case MSR_MTRRcap: > > >