aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm/kvm_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r--virt/kvm/kvm_main.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index faf05bddd131..470f2bc8205a 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -244,6 +244,7 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id)
244 244
245 kvm_vcpu_set_in_spin_loop(vcpu, false); 245 kvm_vcpu_set_in_spin_loop(vcpu, false);
246 kvm_vcpu_set_dy_eligible(vcpu, false); 246 kvm_vcpu_set_dy_eligible(vcpu, false);
247 vcpu->preempted = false;
247 248
248 r = kvm_arch_vcpu_init(vcpu); 249 r = kvm_arch_vcpu_init(vcpu);
249 if (r < 0) 250 if (r < 0)
@@ -2880,6 +2881,8 @@ struct kvm_vcpu *preempt_notifier_to_vcpu(struct preempt_notifier *pn)
2880static void kvm_sched_in(struct preempt_notifier *pn, int cpu) 2881static void kvm_sched_in(struct preempt_notifier *pn, int cpu)
2881{ 2882{
2882 struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); 2883 struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn);
2884 if (vcpu->preempted)
2885 vcpu->preempted = false;
2883 2886
2884 kvm_arch_vcpu_load(vcpu, cpu); 2887 kvm_arch_vcpu_load(vcpu, cpu);
2885} 2888}
@@ -2889,6 +2892,8 @@ static void kvm_sched_out(struct preempt_notifier *pn,
2889{ 2892{
2890 struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); 2893 struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn);
2891 2894
2895 if (current->state == TASK_RUNNING)
2896 vcpu->preempted = true;
2892 kvm_arch_vcpu_put(vcpu); 2897 kvm_arch_vcpu_put(vcpu);
2893} 2898}
2894 2899