From c88f67a8075b40319ea5149dcf170a5fa863ac10 Mon Sep 17 00:00:00 2001 From: Scott Wood Date: Wed, 22 Aug 2012 15:03:50 +0000 Subject: [PATCH] --- yaml --- r: 343493 b: refs/heads/master c: 5bd1cf118533aba41b3fbd4834e6362a9237db71 h: refs/heads/master i: 343491: a89e58db451bbef1985a7fb1f0420c9b256043f6 v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kvm/booke.c | 1 - trunk/arch/powerpc/kvm/powerpc.c | 14 +++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 8bdd24f5fc11..8195635071d4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: adbb48a854bf8dee556dc42b96dd61503351a82d +refs/heads/master: 5bd1cf118533aba41b3fbd4834e6362a9237db71 diff --git a/trunk/arch/powerpc/kvm/booke.c b/trunk/arch/powerpc/kvm/booke.c index 69d047c22d20..3d1f35dc7862 100644 --- a/trunk/arch/powerpc/kvm/booke.c +++ b/trunk/arch/powerpc/kvm/booke.c @@ -674,7 +674,6 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) out: vcpu->mode = OUTSIDE_GUEST_MODE; - smp_wmb(); return ret; } diff --git a/trunk/arch/powerpc/kvm/powerpc.c b/trunk/arch/powerpc/kvm/powerpc.c index 6002ea938a48..deb0d596d815 100644 --- a/trunk/arch/powerpc/kvm/powerpc.c +++ b/trunk/arch/powerpc/kvm/powerpc.c @@ -78,7 +78,16 @@ int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu) break; } + vcpu->mode = IN_GUEST_MODE; + + /* + * Reading vcpu->requests must happen after setting vcpu->mode, + * so we don't miss a request because the requester sees + * OUTSIDE_GUEST_MODE and assumes we'll be checking requests + * before next entering the guest (and thus doesn't IPI). + */ smp_mb(); + if (vcpu->requests) { /* Make sure we process requests preemptable */ local_irq_enable(); @@ -111,11 +120,6 @@ int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu) #endif kvm_guest_enter(); - - /* Going into guest context! Yay! */ - vcpu->mode = IN_GUEST_MODE; - smp_wmb(); - break; }