diff options
| -rw-r--r-- | arch/x86/include/asm/kvm_host.h | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/svm/svm.c | 11 | ||||
| -rw-r--r-- | arch/x86/kvm/vmx/vmx.c | 12 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.c | 9 | 
4 files changed, 5 insertions, 29 deletions
| diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index efe6199c596c..3ff671e35d76 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -708,6 +708,7 @@ struct kvm_vcpu_arch {  		struct gfn_to_pfn_cache cache;  	} st; +	u64 l1_tsc_offset;  	u64 tsc_offset;  	u64 last_guest_tsc;  	u64 last_host_tsc; @@ -1165,7 +1166,6 @@ struct kvm_x86_ops {  	bool (*has_wbinvd_exit)(void); -	u64 (*read_l1_tsc_offset)(struct kvm_vcpu *vcpu);  	/* Returns actual tsc_offset set in active VMCS */  	u64 (*write_l1_tsc_offset)(struct kvm_vcpu *vcpu, u64 offset); diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 83175933c0a1..18a63641b612 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -951,16 +951,6 @@ static void init_sys_seg(struct vmcb_seg *seg, uint32_t type)  	seg->base = 0;  } -static u64 svm_read_l1_tsc_offset(struct kvm_vcpu *vcpu) -{ -	struct vcpu_svm *svm = to_svm(vcpu); - -	if (is_guest_mode(vcpu)) -		return svm->nested.hsave->control.tsc_offset; - -	return vcpu->arch.tsc_offset; -} -  static u64 svm_write_l1_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)  {  	struct vcpu_svm *svm = to_svm(vcpu); @@ -4075,7 +4065,6 @@ static struct kvm_x86_ops svm_x86_ops __initdata = {  	.has_wbinvd_exit = svm_has_wbinvd_exit, -	.read_l1_tsc_offset = svm_read_l1_tsc_offset,  	.write_l1_tsc_offset = svm_write_l1_tsc_offset,  	.load_mmu_pgd = svm_load_mmu_pgd, diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index d044a05a38bd..31a8d04a6c41 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -1740,17 +1740,6 @@ static void setup_msrs(struct vcpu_vmx *vmx)  		vmx_update_msr_bitmap(&vmx->vcpu);  } -static u64 vmx_read_l1_tsc_offset(struct kvm_vcpu *vcpu) -{ -	struct vmcs12 *vmcs12 = get_vmcs12(vcpu); - -	if (is_guest_mode(vcpu) && -	    (vmcs12->cpu_based_vm_exec_control & CPU_BASED_USE_TSC_OFFSETTING)) -		return vcpu->arch.tsc_offset - vmcs12->tsc_offset; - -	return vcpu->arch.tsc_offset; -} -  static u64 vmx_write_l1_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)  {  	struct vmcs12 *vmcs12 = get_vmcs12(vcpu); @@ -7881,7 +7870,6 @@ static struct kvm_x86_ops vmx_x86_ops __initdata = {  	.has_wbinvd_exit = cpu_has_vmx_wbinvd_exit, -	.read_l1_tsc_offset = vmx_read_l1_tsc_offset,  	.write_l1_tsc_offset = vmx_write_l1_tsc_offset,  	.load_mmu_pgd = vmx_load_mmu_pgd, diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ec20368ac025..3622586a26a7 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1910,7 +1910,7 @@ static void kvm_track_tsc_matching(struct kvm_vcpu *vcpu)  static void update_ia32_tsc_adjust_msr(struct kvm_vcpu *vcpu, s64 offset)  { -	u64 curr_offset = kvm_x86_ops.read_l1_tsc_offset(vcpu); +	u64 curr_offset = vcpu->arch.l1_tsc_offset;  	vcpu->arch.ia32_tsc_adjust_msr += offset - curr_offset;  } @@ -1952,14 +1952,13 @@ static u64 kvm_compute_tsc_offset(struct kvm_vcpu *vcpu, u64 target_tsc)  u64 kvm_read_l1_tsc(struct kvm_vcpu *vcpu, u64 host_tsc)  { -	u64 tsc_offset = kvm_x86_ops.read_l1_tsc_offset(vcpu); - -	return tsc_offset + kvm_scale_tsc(vcpu, host_tsc); +	return vcpu->arch.l1_tsc_offset + kvm_scale_tsc(vcpu, host_tsc);  }  EXPORT_SYMBOL_GPL(kvm_read_l1_tsc);  static void kvm_vcpu_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)  { +	vcpu->arch.l1_tsc_offset = offset;  	vcpu->arch.tsc_offset = kvm_x86_ops.write_l1_tsc_offset(vcpu, offset);  } @@ -2084,7 +2083,7 @@ EXPORT_SYMBOL_GPL(kvm_write_tsc);  static inline void adjust_tsc_offset_guest(struct kvm_vcpu *vcpu,  					   s64 adjustment)  { -	u64 tsc_offset = kvm_x86_ops.read_l1_tsc_offset(vcpu); +	u64 tsc_offset = vcpu->arch.l1_tsc_offset;  	kvm_vcpu_write_tsc_offset(vcpu, tsc_offset + adjustment);  } | 
