page fault/panic: mi_switch: switch in a critical section

John Baldwin jhb at FreeBSD.org
Mon Jul 12 13:11:59 PDT 2004


On Sunday 11 July 2004 10:40 pm, Kris Kennaway wrote:
> panic: page fault
> panic messages:
> ---
> Fatal trap 12: page fault while in kernel mode
> fault virtual address   = 0x104
> fault code              = supervisor read, page not present
> instruction pointer     = 0x8:0xc058a8cf
> stack pointer           = 0x10:0xdcb34cc4
> frame pointer           = 0x10:0xdcb34cec
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                         = DPL 0, pres 1, def32 1, gran 1
> processor eflags        = resume, IOPL = 0
> current process         = 50 (schedcpu)
> trap number             = 12
> panic: page fault
>
> syncing disks, buffers remaining... panic: mi_switch: switch in a critical
> section
>
> addr2line says the panic was in kern/sched_4bsd.c:327
>
>                                 /*
>                                  * The kse slptimes are not touched in
> wakeup * because the thread may not HAVE a KSE. */
>                                 if (ke->ke_state == KES_ONRUNQ) {
>                                         awake = 1;
>                                         ke->ke_flags &= ~KEF_DIDRUN;
> --->                            } else if ((ke->ke_state == KES_THREAD) &&
>                                     (TD_IS_RUNNING(ke->ke_thread))) {
>                                         awake = 1;
>
> gdb -k got confused and couldn't make anything out of the backtrace.

The code doesn't match the comment for one.  Note that the code says the kse 
may be NULL, but it deref's ke anyways.  Probably ke->ke_thread is NULL.  
Julian might know when that case can happen.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-current mailing list