"panic: trap: fast data access mmu miss" on 5.2-C

Thomas Moestl t.moestl at tu-bs.de
Sun Feb 1 08:48:29 PST 2004


On Sun, 2004/02/01 at 02:50:32 -0800, Kris Kennaway wrote:
> I updated the sparc64 package clients to 5.2-CURRENT 2 days ago, and
> one of them panicked today:
> 
> panic: trap: fast data access mmu miss
> at line 364 in file /var/portbuild/sparc64/src-client/sys/sparc64/sparc64/trap.c
> cpuid = 0;
> Debugger("panic")
> Stopped at      Debugger+0x1c:  ta              %xcc, 1
> db> trace
> __panic() at __panic+0x17c
> trap() at trap+0x3f0
> -- fast data access mmu miss tar=0x4410000000 %o7=0xc005e34c --
> db_read_bytes() at db_read_bytes+0x1c
> db_stack_trace_cmd() at db_stack_trace_cmd+0x1cc
> db_print_backtrace() at db_print_backtrace+0x18
> backtrace() at backtrace+0x10
> witness_checkorder() at witness_checkorder+0x6b0
> [...]
> fork_exit() at fork_exit+0x8c
> fork_trampoline() at fork_trampoline+0x8
> ofw_pci_default_intr_pending() at ofw_pci_default_intr_pending+0x38
> panic: trap: fast data access mmu miss
> at line 364 in file /var/portbuild/sparc64/src-client/sys/sparc64/sparc64/trap.ccpuid = 0;
> Debugger("panic")
> Stopped at      Debugger+0x1c:  ta              %xcc, 1
> db>

Looks like the back trace ran off the end of the stack;
db_stack_trace_cmd() only handles the usual starting points of kernel
stacks (traps from userland), but not freshly forked processes (or
kernel threads). The attached patch should fix that by initializing
the fr_pc and fr_fp fields of the first frame to 0 in cpu_fork().

	- Thomas

-- 
Thomas Moestl	<t.moestl at tu-bs.de>	http://www.tu-bs.de/~y0015675/
		<tmm at FreeBSD.org>	http://people.FreeBSD.org/~tmm/
"In my opinion, television validates existence."
						-- Calvin and Hobbes
-------------- next part --------------
Index: sparc64/sparc64/vm_machdep.c
===================================================================
RCS file: /vol/ncvs/src/sys/sparc64/sparc64/vm_machdep.c,v
retrieving revision 1.58
diff -u -r1.58 vm_machdep.c
--- sparc64/sparc64/vm_machdep.c	28 Dec 2003 08:57:09 -0000	1.58
+++ sparc64/sparc64/vm_machdep.c	1 Feb 2004 15:20:17 -0000
@@ -300,6 +300,8 @@
 	fp->fr_local[0] = (u_long)fork_return;
 	fp->fr_local[1] = (u_long)td2;
 	fp->fr_local[2] = (u_long)tf;
+	/* Terminate stack traces at this frame. */
+	fp->fr_pc = fp->fr_fp = 0;
 	pcb2->pcb_sp = (u_long)fp - SPOFF;
 	pcb2->pcb_pc = (u_long)fork_trampoline - 8;
 


More information about the freebsd-sparc64 mailing list