PERFORCE change 49431 for review

Juli Mallett jmallett at FreeBSD.org
Sat Mar 20 20:48:24 PST 2004


http://perforce.freebsd.org/chv.cgi?CH=49431

Change 49431 by jmallett at jmallett_oingo on 2004/03/20 20:47:39

	Rework to return the trapframe.

Affected files ...

.. //depot/projects/mips/sys/mips/mips/trap.c#18 edit

Differences ...

==== //depot/projects/mips/sys/mips/mips/trap.c#18 (text+ko) ====

@@ -87,9 +87,9 @@
 #define	MAXTRAPID	31
 
 /* XXX belongs in a header some day? */
-void trap(struct trapframe *, u_int, void *);
+struct trapframe *trap(struct trapframe *, u_int, void *);
 
-void
+struct trapframe *
 trap(struct trapframe *tf, u_int cause, void *badvaddr)
 {
 	struct trap_identifier *tid;
@@ -99,6 +99,10 @@
 
 	code = (cause & MIPS_CR_EXC_CODE) >> MIPS_CR_EXC_CODE_SHIFT;
 	kernelmode = (tf->tf_regs[TF_SR] & MIPS_SR_KSU_USER) == 0;
+	
+	if (curthread != NULL) {
+		curthread->td_frame = tf;
+	}
 
 	/*
 	 * Handle that which we can.
@@ -108,13 +112,17 @@
 		/* XXX Kernel only. */
 		tlb_modified(badvaddr);
 		platform_trap_exit();
-		return;
+		if (curthread)
+			tf = curthread->td_frame;
+		return (tf);
 	case TrInt:
 		platform_trap_exit();
 		atomic_add_int(&curthread->td_intr_nesting_level, 1);
 		platform_intr(tf);
 		atomic_subtract_int(&curthread->td_intr_nesting_level, 1);
-		return;
+		if (curthread)
+			tf = curthread->td_frame;
+		return (tf);
 	default:
 		/* Fatal! */
 		break;
@@ -154,14 +162,12 @@
 #if	DDB
 	default:
 		kdb_trap(code, tf);
-		break;
+		goto done;
 #else
 	default:
 		goto dopanic;
 #endif
 	}
-	platform_trap_exit();
-	return;
 #ifndef	DDB
 dopanic:
 	if (panicstr != NULL) {
@@ -169,6 +175,10 @@
 		cpu_reset();
 	}
 	panic("trap");
+#endif
+done:
 	platform_trap_exit();
-#endif
+	if (curthread)
+		tf = curthread->td_frame;
+	return (tf);
 }


More information about the p4-projects mailing list