Re: Panic In mi_switch+0x7e

From: John Baldwin <jhb_at_freebsd.org>
Date: Thu, 9 Feb 2006 11:32:48 -0500
On Wednesday 08 February 2006 10:34, Cy Schubert wrote:
> I issue the reboot command and the system panics and drops into DDB.
>
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00
> fault virtual address   = 0x0
> fault code              = supervisor write, page not present
> instruction pointer     = 0x20:0xc067a1fe
> stack pointer           = 0x28:0xc6ee19fc
> frame pointer           = 0x28:0xc6ee1a44
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                         = DPL 0, pres 1, def32 1, gran 1
> processor eflags        = resume, IOPL = 0
> current process         = 594 (reboot)
> [thread pid 594 tid 100071 ]
> Stopped at      mi_switch+0x7e: addl    %eax,0(%eax)
> db> trace
> Tracing pid 594 tid 100071 td 0xc18b91a0
> mi_switch(0,0,0,1,c6ee0e6c) at mi_switch+0x7e
> db>

Hmm, odd.  Here's where that maps to on a local kernel (not sure if it's the 
same exact line on yours though):

0xc06b3e43 is in mi_switch (../../../kern/kern_synch.c:368).
363             td = curthread;                 /* XXX */
364             p = td->td_proc;                /* XXX */
365             KASSERT(!TD_ON_RUNQ(td), ("mi_switch: called by old code"));
366     #ifdef INVARIANTS
367             if (!TD_ON_LOCK(td) && !TD_IS_RUNNING(td))
368                     mtx_assert(&Giant, MA_NOTOWNED);
369     #endif
370             KASSERT(td->td_critnest == 1 || (td->td_critnest == 2 &&
371                 (td->td_owepreempt) && (flags & SW_INVOL) != 0 &&
372                 newtd == NULL) || panicstr,

Hmm, looking at the assembly it doesn't line up.  Can you pull up gdb on your 
kernel.debug and do 'l *mi_switch+0x7e'?

-- 
John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
Received on Thu Feb 09 2006 - 15:35:36 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:52 UTC