diff options
author | peter <peter@FreeBSD.org> | 1997-08-26 18:10:38 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1997-08-26 18:10:38 +0000 |
commit | 7dfe3e5abe7df9a2db7c225b0ce9e73fc5955654 (patch) | |
tree | 02a81dce529d428cea86379dd50d22676d1b7fbc /sys/kern/subr_trap.c | |
parent | 4ef08431e3258c177c4a081bb0bba2eeef3a3ac3 (diff) | |
download | FreeBSD-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.c | 7 |
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"); } |