]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: don't check for PF_VCPU when yielding
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Tue, 25 Nov 2014 16:04:08 +0000 (17:04 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 4 Dec 2014 14:29:12 +0000 (15:29 +0100)
commit832c92ec7197b0a93e254213ee0fbfd0e026f1de
treeb1c803f19ad0c2a987c260977e8e670ff84205a2
parenta9171d85e085ded1cf771739c4f010334210c17f
KVM: don't check for PF_VCPU when yielding

kvm_enter_guest() has to be called with preemption disabled and will
set PF_VCPU.  Current code takes PF_VCPU as a hint that the VCPU thread
is running and therefore needs no yield.

However, the check on PF_VCPU is wrong on s390, where preemption has
to stay enabled in order to correctly process page faults.  Thus,
s390 reenables preemption and starts to execute the guest.  The thread
might be scheduled out between kvm_enter_guest() and kvm_exit_guest(),
resulting in PF_VCPU being set but not being run.  When this happens,
the opportunity for directed yield is missed.

However, this check is done already in kvm_vcpu_on_spin before calling
kvm_vcpu_yield_loop:

        if (!ACCESS_ONCE(vcpu->preempted))
                continue;

so the check on PF_VCPU is superfluous in general, and this patch
removes it.

Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
virt/kvm/kvm_main.c