KVM: x86: introduce cancel_hv_tscdeadline 69/17069/1
authorWanpeng Li <wanpeng.li@hotmail.com>
Thu, 30 Jun 2016 00:52:49 +0000 (08:52 +0800)
committerYunhong Jiang <yunhong.jiang@linux.intel.com>
Mon, 18 Jul 2016 15:08:08 +0000 (08:08 -0700)
Introduce cancel_hv_tscdeadline() to encapsulate preemption
timer cancel stuff.

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>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Change-Id: Icc038176cbf361a9ecdf37ed3425108db57617f2
upstream-status: backport
Signed-off-by: Yunhong Jiang <yunhong.jiang@linux.intel.com>
kernel/arch/x86/kvm/lapic.c

index 701f912..e194268 100644 (file)
@@ -1294,14 +1294,19 @@ bool kvm_lapic_hv_timer_in_use(struct kvm_vcpu *vcpu)
 }
 EXPORT_SYMBOL_GPL(kvm_lapic_hv_timer_in_use);
 
+static void cancel_hv_tscdeadline(struct kvm_lapic *apic)
+{
+       kvm_x86_ops->cancel_hv_timer(apic->vcpu);
+       apic->lapic_timer.hv_timer_in_use = false;
+}
+
 void kvm_lapic_expired_hv_timer(struct kvm_vcpu *vcpu)
 {
        struct kvm_lapic *apic = vcpu->arch.apic;
 
        WARN_ON(!apic->lapic_timer.hv_timer_in_use);
        WARN_ON(swait_active(&vcpu->wq));
-       kvm_x86_ops->cancel_hv_timer(vcpu);
-       apic->lapic_timer.hv_timer_in_use = false;
+       cancel_hv_tscdeadline(apic);
        apic_timer_expired(apic);
 }
 EXPORT_SYMBOL_GPL(kvm_lapic_expired_hv_timer);
@@ -1321,10 +1326,8 @@ void kvm_lapic_switch_to_hv_timer(struct kvm_vcpu *vcpu)
                        hrtimer_cancel(&apic->lapic_timer.timer);
 
                        /* In case the sw timer triggered in the window */
-                       if (atomic_read(&apic->lapic_timer.pending)) {
-                               apic->lapic_timer.hv_timer_in_use = false;
-                               kvm_x86_ops->cancel_hv_timer(apic->vcpu);
-                       }
+                       if (atomic_read(&apic->lapic_timer.pending))
+                               cancel_hv_tscdeadline(apic);
                }
                trace_kvm_hv_timer_state(vcpu->vcpu_id,
                                apic->lapic_timer.hv_timer_in_use);
@@ -1340,8 +1343,7 @@ void kvm_lapic_switch_to_sw_timer(struct kvm_vcpu *vcpu)
        if (!apic->lapic_timer.hv_timer_in_use)
                return;
 
-       kvm_x86_ops->cancel_hv_timer(vcpu);
-       apic->lapic_timer.hv_timer_in_use = false;
+       cancel_hv_tscdeadline(apic);
 
        if (atomic_read(&apic->lapic_timer.pending))
                return;