Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 07 Sep 1998 22:31:21 +0200
From:      Tor.Egge@fast.no
To:        bgrayson@marvin.ece.utexas.edu
Cc:        freebsd-smp@FreeBSD.ORG
Subject:   Re: apic_ipi stuck problems
Message-ID:  <199809072031.WAA18283@midten.fast.no>
In-Reply-To: Your message of "Mon, 7 Sep 1998 13:52:42 -0500"
References:  <19980907135242.A1480@marvin.ece.utexas.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
>   I've installed 3.0-19980804-SNAP on a quad PPro box, and
> occasionally had reboot problems where I would get a message
> like ``apic_ipi stuck.  Rebooting within 15 seconds.'' at which
> point it reboots and gets to exactly the same thing.  Usually,
> a hard reboot will bring it back to its senses.
> 
>   Yesterday when I tried to bring the machine up (it was shut
> down before a planned AC outage), for four consecutive reboots
> it went into this mode.  At that point I gave up and left it
> powered off.  Is this a software bug, and if so is it fixed in
> -current?  Unfortunately, I'm pretty pressed for time for the
> next week or two, so I may not be able to try out anything that
> requires a significant amount of time, but if there's a quick fix
> I'd probably be able to try it out.

There is a quick fix (already committed to -current).

diff -ru ../OLD1/usr/src/sys/i386/i386/mp_machdep.c sys/i386/i386/mp_machdep.c
--- ../OLD1/usr/src/sys/i386/i386/mp_machdep.c	Sat Sep  5 21:23:28 1998
+++ sys/i386/i386/mp_machdep.c	Sun Sep  6 21:19:19 1998
@@ -314,7 +316,7 @@
 
 struct pcb stoppcbs[NCPU];
 
-static int smp_started;		/* has the system started? */
+int smp_started;		/* has the system started? */
 
 /*
  * Local data and functions.
@@ -2123,9 +2217,11 @@
 	 * quite correct yet.  We should have a bitfield for cpus willing
 	 * to accept TLB flush IPI's or something and sync them.
 	 */
-	invltlb_ok = 1;
-	smp_started = 1;	/* enable IPI's, tlb shootdown, freezes etc */
-	smp_active = 1;		/* historic */
+	if (smp_cpus == mp_ncpus) {
+	  invltlb_ok = 1;
+	  smp_started = 1;	/* enable IPI's, tlb shootdown, freezes etc */
+	  smp_active = 1;		/* historic */
+	}
 
 	curproc = NULL;		/* make sure */
 }
diff -ru ../OLD1/usr/src/sys/i386/i386/mpboot.s sys/i386/i386/mpboot.s
--- ../OLD1/usr/src/sys/i386/i386/mpboot.s	Sat Sep  5 21:22:52 1998
+++ sys/i386/i386/mpboot.s	Sun Sep  6 21:22:03 1998
@@ -124,6 +124,12 @@
 	/* Now, let's prepare for some REAL WORK :-) */
 	call	_ap_init
 
+	call	_rel_mplock
+2:	
+	cmpl	$0, CNAME(smp_started)	/* Wait for last AP to be ready */
+	jz	2b
+	call _get_mplock
+	
 	/* let her rip! (loads new stack) */
 	jmp 	_cpu_switch

- Tor Egge 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199809072031.WAA18283>