Re: "spin lock sched lock held by 0xc63b7870 for > 5 seconds" at reboot

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 8 Mar 2006 16:30:29 -0500
On Wednesday 08 March 2006 16:15, Kris Kennaway wrote:
> On Wed, Mar 08, 2006 at 03:04:33PM -0500, John Baldwin wrote:
> > On Wednesday 08 March 2006 14:59, Kris Kennaway wrote:
> > > i386 SMP server, up-to-date current:
> > 
> > Yes, I know about this one and had sent a workaround to someone
> > I thought.  I think the real fix is that we need to disable
> > interrupts in cpu_reset() (perhaps earlier, our whole SMP
> > shutdown sequence needs thought I think, i.e. I think we
> > need to IPI all the CPUs during a non-panic shutdown to ask
> > them to go idle and block until that happens and then
> > disable interrupts and finish the shutdown).
> 
> OK, cool.  I'm happy to test the workaround if you can find it.

Here's a workaround from scratch:

Index: vm_machdep.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/i386/vm_machdep.c,v
retrieving revision 1.267
diff -u -r1.267 vm_machdep.c
--- vm_machdep.c	14 Nov 2005 00:43:44 -0000	1.267
+++ vm_machdep.c	8 Mar 2006 21:29:48 -0000
_at__at_ -528,6 +528,7 _at__at_
 cpu_reset_proxy()
 {
 
+	disable_intr();
 	cpu_reset_proxy_active = 1;
 	while (cpu_reset_proxy_active == 1)
 		;	/* Wait for other cpu to see that we've started */
_at__at_ -552,6 +553,7 _at__at_
 #ifdef SMP
 	u_int cnt, map;
 
+	disable_intr();
 	if (smp_active) {
 		map = PCPU_GET(other_cpus) & ~stopped_cpus;
 		if (map != 0) {


-- 
John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
Received on Wed Mar 08 2006 - 20:31:01 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:53 UTC