Panic In mi_switch+0x7e
John Baldwin
jhb at freebsd.org
Thu Feb 9 08:35:36 PST 2006
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
More information about the freebsd-current
mailing list