arm64: KVM: Yield CPU when vcpu executes a WFE
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 2 Aug 2013 10:41:13 +0000 (11:41 +0100)
committerChristoffer Dall <christoffer.dall@linaro.org>
Thu, 2 Oct 2014 15:18:16 +0000 (17:18 +0200)
commitc0cdef185a6b5c8f3c5e6b923e95774c36764011
tree87a37dc79c21febd98469ca36bb0487f0d676ecf
parentb695de83412eb8ff7c77b215fa24bca5b1871618
arm64: KVM: Yield CPU when vcpu executes a WFE

On an (even slightly) oversubscribed system, spinlocks are quickly
becoming a bottleneck, as some vcpus are spinning, waiting for a
lock to be released, while the vcpu holding the lock may not be
running at all.

The solution is to trap blocking WFEs and tell KVM that we're
now spinning. This ensures that other vpus will get a scheduling
boost, allowing the lock to be released more quickly. Also, using
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT slightly improves the performance
when the VM is severely overcommited.

Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
(cherry picked from commit d241aac798eb042e605f78c31a4122e583b2cd13)
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
arch/arm64/include/asm/kvm_arm.h
arch/arm64/kvm/Kconfig
arch/arm64/kvm/handle_exit.c