Skip to the content.

还是两个数值

commit 805d705ff8f3a05e63ce350ac0c37a3290ed9bb7
Author: Ilias Stamatis <ilstam@amazon.com>
Date:   Wed May 26 19:44:09 2021 +0100

    KVM: X86: Store L1's TSC scaling ratio in 'struct kvm_vcpu_arch'

    Store L1's scaling ratio in the kvm_vcpu_arch struct like we already do
    for L1's TSC offset. This allows for easy save/restore when we enter and
    then exit the nested guest.

    Signed-off-by: Ilias Stamatis <ilstam@amazon.com>
    Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
    Message-Id: <20210526184418.28881-3-ilstam@amazon.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

其实也不复杂

struct kvm_vcpu_arch {
	u64 l1_tsc_offset;
	u64 tsc_offset; /* current tsc offset */

所以,当需要 l2 和 l1 之间切换的时候至少需要转换一下:

  1. 进入之前加上 prepare_vmcs02
     vcpu->arch.tsc_offset = kvm_calc_nested_tsc_offset(
             vcpu->arch.l1_tsc_offset,
             vmx_get_l2_tsc_offset(vcpu),
             vmx_get_l2_tsc_multiplier(vcpu));
    
  2. 离开的时候还原

nested_vmx_vmexit

	if (nested_cpu_has(vmcs12, CPU_BASED_USE_TSC_OFFSETTING)) {
		vcpu->arch.tsc_offset = vcpu->arch.l1_tsc_offset;
		if (nested_cpu_has2(vmcs12, SECONDARY_EXEC_TSC_SCALING))
			vcpu->arch.tsc_scaling_ratio = vcpu->arch.l1_tsc_scaling_ratio;
	}

TODO

看看 CPU_BASED_USE_TSC_OFFSETTING 的影响是什么

如果继续调查

find_merge_commit 805d705ff8f3a05e63ce350ac0c37a3

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。