[PATCH] kvm/powerpc: Handle errors in secondary thread grabbing

Subsystems: kernel virtual machine for powerpc (kvm/powerpc), linux for powerpc (32-bit and 64-bit), the rest

STALE5054d

5 messages, 4 authors, 2012-10-17 · open the first message on its own page

[PATCH] kvm/powerpc: Handle errors in secondary thread grabbing

From: Michael Ellerman <hidden>
Date: 2012-10-16 00:15:50

In the Book3s HV code, kvmppc_run_core() has logic to grab the secondary
threads of the physical core.

If for some reason a thread is stuck, kvmppc_grab_hwthread() can fail,
but currently we ignore the failure and continue into the guest. If the
stuck thread is in the kernel badness ensues.

Instead we should check for failure and bail out.

I've moved the grabbing prior to the startup of runnable threads, to simplify
the error case. AFAICS this is harmless, but I could be missing something
subtle.

Signed-off-by: Michael Ellerman <redacted>
---

Or we could just BUG_ON() ?
---
 arch/powerpc/kvm/book3s_hv.c |   22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 721d460..55925cd 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -884,16 +884,30 @@ static int kvmppc_run_core(struct kvmppc_vcore *vc)
 		if (vcpu->arch.ceded)
 			vcpu->arch.ptid = ptid++;
 
+	/*
+	 * Grab any remaining hw threads so they can't go into the kernel.
+	 * Do this early to simplify the cleanup path if it fails.
+	 */
+	for (i = ptid; i < threads_per_core; ++i) {
+		int j, rc = kvmppc_grab_hwthread(vc->pcpu + i);
+		if (rc) {
+			for (j = i - 1; j ; j--)
+				kvmppc_release_hwthread(vc->pcpu + j);
+
+			list_for_each_entry(vcpu, &vc->runnable_threads,
+					    arch.run_list)
+				vcpu->arch.ret = -EBUSY;
+
+			goto out;
+		}
+	}
+
 	vc->stolen_tb += mftb() - vc->preempt_tb;
 	vc->pcpu = smp_processor_id();
 	list_for_each_entry(vcpu, &vc->runnable_threads, arch.run_list) {
 		kvmppc_start_thread(vcpu);
 		kvmppc_create_dtl_entry(vcpu, vc);
 	}
-	/* Grab any remaining hw threads so they can't go into the kernel */
-	for (i = ptid; i < threads_per_core; ++i)
-		kvmppc_grab_hwthread(vc->pcpu + i);
-
 	preempt_disable();
 	spin_unlock(&vc->lock);
 
-- 
1.7.9.5

Re: [PATCH] kvm/powerpc: Handle errors in secondary thread grabbing

From: Paul Mackerras <hidden>
Date: 2012-10-16 03:13:52

Michael,

On Tue, Oct 16, 2012 at 11:15:50AM +1100, Michael Ellerman wrote:
In the Book3s HV code, kvmppc_run_core() has logic to grab the secondary
threads of the physical core.

If for some reason a thread is stuck, kvmppc_grab_hwthread() can fail,
but currently we ignore the failure and continue into the guest. If the
stuck thread is in the kernel badness ensues.

Instead we should check for failure and bail out.

I've moved the grabbing prior to the startup of runnable threads, to simplify
the error case. AFAICS this is harmless, but I could be missing something
subtle.
Thanks for looking at this - but in fact this is fixed by my patch
entitled "KVM: PPC: Book3S HV: Fix some races in starting secondary
threads" submitted back on August 28.

Regards,
Paul.

Re: [PATCH] kvm/powerpc: Handle errors in secondary thread grabbing

From: Michael Ellerman <hidden>
Date: 2012-10-16 06:00:35

On Tue, 2012-10-16 at 14:13 +1100, Paul Mackerras wrote:
Michael,

On Tue, Oct 16, 2012 at 11:15:50AM +1100, Michael Ellerman wrote:
quoted
In the Book3s HV code, kvmppc_run_core() has logic to grab the secondary
threads of the physical core.

If for some reason a thread is stuck, kvmppc_grab_hwthread() can fail,
but currently we ignore the failure and continue into the guest. If the
stuck thread is in the kernel badness ensues.

Instead we should check for failure and bail out.

I've moved the grabbing prior to the startup of runnable threads, to simplify
the error case. AFAICS this is harmless, but I could be missing something
subtle.
Thanks for looking at this - but in fact this is fixed by my patch
entitled "KVM: PPC: Book3S HV: Fix some races in starting secondary
threads" submitted back on August 28.
OK thanks. It seems that patch didn't make 3.7 ?

I don't see it in kvm-ppc-next either.

cheers

Re: [PATCH] kvm/powerpc: Handle errors in secondary thread grabbing

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2012-10-16 19:33:43

On Tue, 2012-10-16 at 17:00 +1100, Michael Ellerman wrote:
quoted
Thanks for looking at this - but in fact this is fixed by my patch
entitled "KVM: PPC: Book3S HV: Fix some races in starting secondary
threads" submitted back on August 28.
OK thanks. It seems that patch didn't make 3.7 ?

I don't see it in kvm-ppc-next either.
Alex, WTF ?

Ben.

Re: [PATCH] kvm/powerpc: Handle errors in secondary thread grabbing

From: Alexander Graf <hidden>
Date: 2012-10-17 06:25:57

On 16.10.2012, at 21:33, Benjamin Herrenschmidt wrote:
On Tue, 2012-10-16 at 17:00 +1100, Michael Ellerman wrote:
quoted
quoted
Thanks for looking at this - but in fact this is fixed by my patch
entitled "KVM: PPC: Book3S HV: Fix some races in starting secondary
threads" submitted back on August 28.
=20
OK thanks. It seems that patch didn't make 3.7 ?
=20
I don't see it in kvm-ppc-next either.
=20
Alex, WTF ?
Hrm. Not sure what happened there. I think I waited for your ack, but =
never actually applied things when it came. My bad :)


Alex
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help