KVM: PPC: Book3S HV: Drop locks around call to kvmppc_pin_guest_page
authorPaul Mackerras <paulus@samba.org>
Fri, 1 Jun 2012 10:20:24 +0000 (20:20 +1000)
committerAvi Kivity <avi@redhat.com>
Tue, 19 Jun 2012 12:04:13 +0000 (15:04 +0300)
commit081f323bd3cc3a4d5ee6276e53cc52eddfc20a63
tree057cb2a7b22d55cd50275a5a5dff6b8ce56abbb7
parentf961f72836eb6c0fd76201f6f6b2fafff93c4cea
KVM: PPC: Book3S HV: Drop locks around call to kvmppc_pin_guest_page

At the moment we call kvmppc_pin_guest_page() in kvmppc_update_vpa()
with two spinlocks held: the vcore lock and the vcpu->vpa_update_lock.
This is not good, since kvmppc_pin_guest_page() calls down_read() and
get_user_pages_fast(), both of which can sleep.  This bug was introduced
in 2e25aa5f ("KVM: PPC: Book3S HV: Make virtual processor area
registration more robust").

This arranges to drop those spinlocks before calling
kvmppc_pin_guest_page() and re-take them afterwards.  Dropping the
vcore lock in kvmppc_run_core() means we have to set the vcore_state
field to VCORE_RUNNING before we drop the lock, so that other vcpus
won't try to run this vcore.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Acked-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/powerpc/kvm/book3s_hv.c