summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_trap.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1997-08-26 18:10:38 +0000
committerpeter <peter@FreeBSD.org>1997-08-26 18:10:38 +0000
commit7dfe3e5abe7df9a2db7c225b0ce9e73fc5955654 (patch)
tree02a81dce529d428cea86379dd50d22676d1b7fbc /sys/kern/subr_trap.c
parent4ef08431e3258c177c4a081bb0bba2eeef3a3ac3 (diff)
downloadFreeBSD-src-7dfe3e5abe7df9a2db7c225b0ce9e73fc5955654.zip
FreeBSD-src-7dfe3e5abe7df9a2db7c225b0ce9e73fc5955654.tar.gz
Clean up the SMP AP bootstrap and eliminate the wretched idle procs.
- We now have enough per-cpu idle context, the real idle loop has been revived (cpu's halt now with nothing to do). - Some preliminary support for running some operations outside the global lock (eg: zeroing "free but not yet zeroed pages") is present but appears to cause problems. Off by default. - the smp_active sysctl now behaves differently. It's merely a 'true/false' option. Setting smp_active to zero causes the AP's to halt in the idle loop and stop scheduling processes. - bootstrap is a lot safer. Instead of sharing a statically compiled in stack a number of times (which has caused lots of problems) and then abandoning it, we use the idle context to boot the AP's directly. This should help >2 cpu support since the bootlock stuff was in doubt. - print physical apic id in traps.. helps identify private pages getting out of sync. (You don't want to know how much hair I tore out with this!) More cleanup to follow, this is more of a checkpoint than a 'finished' thing.
Diffstat (limited to 'sys/kern/subr_trap.c')
-rw-r--r--sys/kern/subr_trap.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c
index ac139d5..5895361 100644
--- a/sys/kern/subr_trap.c
+++ b/sys/kern/subr_trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.106 1997/08/20 05:25:48 fsmp Exp $
+ * $Id: trap.c,v 1.107 1997/08/21 06:32:39 charnier Exp $
*/
/*
@@ -725,6 +725,7 @@ trap_fatal(frame)
ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
#ifdef SMP
printf("cpuid = %d\n", cpuid);
+ printf("lapic.id = %d\n", lapic.id);
#endif
if (type == T_PAGEFLT) {
printf("fault virtual address = 0x%x\n", eva);
@@ -769,6 +770,9 @@ trap_fatal(frame)
} else {
printf("Idle\n");
}
+#ifdef SMP
+ printf("mp_lock = %08x\n", mp_lock);
+#endif
printf("interrupt mask = ");
if ((cpl & net_imask) == net_imask)
printf("net ");
@@ -824,6 +828,7 @@ dblfault_handler()
printf("ebp = 0x%x\n", common_tss.tss_ebp);
#ifdef SMP
printf("cpuid = %d\n", cpuid);
+ printf("lapic.id = %d\n", lapic.id);
#endif
panic("double fault");
}
OpenPOWER on IntegriCloud