Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1472301 > unrolled thread

[PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC backward

Started byWanpeng Li <kernellwp@gmail.com>
First post2016-08-30 10:20 +0200
Last post2016-09-02 13:00 +0200
Articles 4 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC backward Wanpeng Li <kernellwp@gmail.com> - 2016-08-30 10:20 +0200
    [PATCH 2/2] KVM: nVMX: make emulated nested preemption timer pinned Wanpeng Li <kernellwp@gmail.com> - 2016-08-30 10:20 +0200
      Re: [PATCH 2/2] KVM: nVMX: make emulated nested preemption timer  pinned Paolo Bonzini <pbonzini@redhat.com> - 2016-09-02 13:00 +0200
    Re: [PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC  backward Paolo Bonzini <pbonzini@redhat.com> - 2016-09-02 13:00 +0200

#1472301 — [PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC backward

FromWanpeng Li <kernellwp@gmail.com>
Date2016-08-30 10:20 +0200
Subject[PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC backward
Message-ID<sbMqZ-2gM-3@gated-at.bofh.it>
From: Wanpeng Li <wanpeng.li@hotmail.com>

TSC_OFFSET will be adjusted if discovers TSC backward during vCPU load. 
The preemption timer which will leverage guest tsc to reprogram its 
preemption timer value is also reprogrammed if vCPU is scheded in to 
a different pCPU. However, current implementation reprogram preemption 
timer before TSC_OFFSET is adjusted to the right value, this will result 
in preemption timer also backward and fire prematurity.

This patch fix it by adjusting TSC_OFFSET before reprogramming preemption 
timer if TSC backward.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Yunhong Jiang <yunhong.jiang@intel.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
---
 arch/x86/kvm/x86.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 19f9f9e..699f872 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2743,16 +2743,16 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 		if (tsc_delta < 0)
 			mark_tsc_unstable("KVM discovered backwards TSC");
 
-		if (kvm_lapic_hv_timer_in_use(vcpu) &&
-				kvm_x86_ops->set_hv_timer(vcpu,
-					kvm_get_lapic_tscdeadline_msr(vcpu)))
-			kvm_lapic_switch_to_sw_timer(vcpu);
 		if (check_tsc_unstable()) {
 			u64 offset = kvm_compute_tsc_offset(vcpu,
 						vcpu->arch.last_guest_tsc);
 			kvm_x86_ops->write_tsc_offset(vcpu, offset);
 			vcpu->arch.tsc_catchup = 1;
 		}
+		if (kvm_lapic_hv_timer_in_use(vcpu) &&
+				kvm_x86_ops->set_hv_timer(vcpu,
+					kvm_get_lapic_tscdeadline_msr(vcpu)))
+			kvm_lapic_switch_to_sw_timer(vcpu);
 		/*
 		 * On a host with synchronized TSC, there is no need to update
 		 * kvmclock on vcpu->cpu migration
-- 
1.9.1

[toc] | [next] | [standalone]


#1472302 — [PATCH 2/2] KVM: nVMX: make emulated nested preemption timer pinned

FromWanpeng Li <kernellwp@gmail.com>
Date2016-08-30 10:20 +0200
Subject[PATCH 2/2] KVM: nVMX: make emulated nested preemption timer pinned
Message-ID<sbMqZ-2gM-9@gated-at.bofh.it>
In reply to#1472301
From: Wanpeng Li <wanpeng.li@hotmail.com>

Commit 61abdbe0bc ("kvm: x86: make lapic hrtimer pinned") pins the emulated 
lapic timer. This patch does the same for the emulated nested preemption 
timer to avoid vmexit an unrelated vCPU and the latency of kicking IPI to 
another vCPU.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Yunhong Jiang <yunhong.jiang@intel.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
---
 arch/x86/kvm/vmx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 5cede40..090a3f8 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -7013,7 +7013,7 @@ static int handle_vmon(struct kvm_vcpu *vcpu)
 	vmx->nested.vmcs02_num = 0;
 
 	hrtimer_init(&vmx->nested.preemption_timer, CLOCK_MONOTONIC,
-		     HRTIMER_MODE_REL);
+		     HRTIMER_MODE_REL_PINNED);
 	vmx->nested.preemption_timer.function = vmx_preemption_timer_fn;
 
 	vmx->nested.vmxon = true;
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1475026 — Re: [PATCH 2/2] KVM: nVMX: make emulated nested preemption timer pinned

FromPaolo Bonzini <pbonzini@redhat.com>
Date2016-09-02 13:00 +0200
SubjectRe: [PATCH 2/2] KVM: nVMX: make emulated nested preemption timer pinned
Message-ID<scUmu-6SO-13@gated-at.bofh.it>
In reply to#1472302

On 30/08/2016 10:14, Wanpeng Li wrote:
> From: Wanpeng Li <wanpeng.li@hotmail.com>
> 
> Commit 61abdbe0bc ("kvm: x86: make lapic hrtimer pinned") pins the emulated 
> lapic timer. This patch does the same for the emulated nested preemption 
> timer to avoid vmexit an unrelated vCPU and the latency of kicking IPI to 
> another vCPU.
> 
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Radim Krčmář <rkrcmar@redhat.com>
> Cc: Yunhong Jiang <yunhong.jiang@intel.com>
> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
> ---
>  arch/x86/kvm/vmx.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 5cede40..090a3f8 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -7013,7 +7013,7 @@ static int handle_vmon(struct kvm_vcpu *vcpu)
>  	vmx->nested.vmcs02_num = 0;
>  
>  	hrtimer_init(&vmx->nested.preemption_timer, CLOCK_MONOTONIC,
> -		     HRTIMER_MODE_REL);
> +		     HRTIMER_MODE_REL_PINNED);
>  	vmx->nested.preemption_timer.function = vmx_preemption_timer_fn;
>  
>  	vmx->nested.vmxon = true;
> 

Queued for 4.9, thanks.

Paolo

[toc] | [prev] | [next] | [standalone]


#1475023 — Re: [PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC backward

FromPaolo Bonzini <pbonzini@redhat.com>
Date2016-09-02 13:00 +0200
SubjectRe: [PATCH 1/2] KVM: lapic: fix preemption timer backward when TSC backward
Message-ID<scUmu-6SO-7@gated-at.bofh.it>
In reply to#1472301

On 30/08/2016 10:14, Wanpeng Li wrote:
> From: Wanpeng Li <wanpeng.li@hotmail.com>
> 
> TSC_OFFSET will be adjusted if discovers TSC backward during vCPU load. 
> The preemption timer which will leverage guest tsc to reprogram its 
> preemption timer value is also reprogrammed if vCPU is scheded in to 
> a different pCPU. However, current implementation reprogram preemption 
> timer before TSC_OFFSET is adjusted to the right value, this will result 
> in preemption timer also backward and fire prematurity.
> 
> This patch fix it by adjusting TSC_OFFSET before reprogramming preemption 
> timer if TSC backward.
> 
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Radim Krčmář <rkrcmar@redhat.com>
> Cc: Yunhong Jiang <yunhong.jiang@intel.com>
> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
> ---
>  arch/x86/kvm/x86.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 19f9f9e..699f872 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -2743,16 +2743,16 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
>  		if (tsc_delta < 0)
>  			mark_tsc_unstable("KVM discovered backwards TSC");
>  
> -		if (kvm_lapic_hv_timer_in_use(vcpu) &&
> -				kvm_x86_ops->set_hv_timer(vcpu,
> -					kvm_get_lapic_tscdeadline_msr(vcpu)))
> -			kvm_lapic_switch_to_sw_timer(vcpu);
>  		if (check_tsc_unstable()) {
>  			u64 offset = kvm_compute_tsc_offset(vcpu,
>  						vcpu->arch.last_guest_tsc);
>  			kvm_x86_ops->write_tsc_offset(vcpu, offset);
>  			vcpu->arch.tsc_catchup = 1;
>  		}
> +		if (kvm_lapic_hv_timer_in_use(vcpu) &&
> +				kvm_x86_ops->set_hv_timer(vcpu,
> +					kvm_get_lapic_tscdeadline_msr(vcpu)))
> +			kvm_lapic_switch_to_sw_timer(vcpu);
>  		/*
>  		 * On a host with synchronized TSC, there is no need to update
>  		 * kvmclock on vcpu->cpu migration
> 

Queued for 4.8, thanks.

Paolo

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web