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>
index | next in thread | previous in thread | raw e-mail
> 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
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199809072031.WAA18283>
