kvm: Iterate over only vcpus that are preempted
authorRaghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Mon, 4 Mar 2013 18:02:27 +0000 (23:32 +0530)
committerGleb Natapov <gleb@redhat.com>
Mon, 11 Mar 2013 09:37:22 +0000 (11:37 +0200)
This helps in filtering out the eligible candidates further and
thus potentially helps in quickly allowing preempted lockholders to run.
Note that if a vcpu was spinning during preemption we filter them
by checking whether they are preempted due to pause loop exit.

Reviewed-by: Chegu Vinod <chegu_vinod@hp.com>
Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
virt/kvm/kvm_main.c

index 470f2bc8205aedbde350cebee63eb790529833f0..ff7154188b5f559d3605de949355323a81b6c49f 100644 (file)
@@ -1768,6 +1768,8 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me)
                                continue;
                        } else if (pass && i > last_boosted_vcpu)
                                break;
+                       if (!ACCESS_ONCE(vcpu->preempted))
+                               continue;
                        if (vcpu == me)
                                continue;
                        if (waitqueue_active(&vcpu->wq))