Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bd1cf11 authored by Scott Wood's avatar Scott Wood Committed by Alexander Graf
Browse files

KVM: PPC: set IN_GUEST_MODE before checking requests



Avoid a race as described in the code comment.

Also remove a related smp_wmb() from booke's kvmppc_prepare_to_enter().
I can't see any reason for it, and the book3s_pr version doesn't have it.

Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent adbb48a8
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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;
}

+9 −5
Original line number Diff line number Diff line
@@ -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;
	}