On 21.09.2012, at 07:37, Paul Mackerras wrote: > There were a few places where we were traversing the list of runnable > threads in a virtual core, i.e. vc->runnable_threads, without holding > the vcore spinlock. This extends the places where we hold the vcore > spinlock to cover everywhere that we traverse that list. > > Since we possibly need to sleep inside kvmppc_book3s_hv_page_fault, > this moves the call of it from kvmppc_handle_exit out to > kvmppc_vcpu_run, where we don't hold the vcore lock. > > In kvmppc_vcore_blocked, we don't actually need to check whether > all vcpus are ceded and don't have any pending exceptions, since the > caller has already done that. The caller (kvmppc_run_vcpu) wasn't > actually checking for pending exceptions, so we add that. > > The change of if to while in kvmppc_run_vcpu is to make sure that we > never call kvmppc_remove_runnable() when the vcore state is RUNNING or > EXITING. > > Signed-off-by: Paul Mackerras <paulus@xxxxxxxxx> > --- > arch/powerpc/include/asm/kvm_asm.h | 1 + > arch/powerpc/kvm/book3s_hv.c | 64 +++++++++++++++++------------------- > 2 files changed, 31 insertions(+), 34 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h > index 76fdcfe..fb99a21 100644 > --- a/arch/powerpc/include/asm/kvm_asm.h > +++ b/arch/powerpc/include/asm/kvm_asm.h > @@ -123,6 +123,7 @@ > #define RESUME_GUEST_NV RESUME_FLAG_NV > #define RESUME_HOST RESUME_FLAG_HOST > #define RESUME_HOST_NV (RESUME_FLAG_HOST|RESUME_FLAG_NV) > +#define RESUME_PAGE_FAULT (1<<2) I would actually prefer if you could move this to core specific code. How about #define RESUME_ARCH1 (1 << 2) and then in book3s_hv.c: #define RESUME_PAGE_FAULT (RESUME_GUEST | RESUME_ARCH1) Alex -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html