PERFORCE change 123217 for review

Oleksandr Tymoshenko gonzo at FreeBSD.org
Mon Jul 9 17:35:42 UTC 2007


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

Change 123217 by gonzo at gonzo_jeeves on 2007/07/09 17:35:07

	o Set EXL in status register in exec_setreg to prevent
	    early switch to user mode in cpu_throw.
	o Get call to exception_restore_registers back.
	Pointed out by: Neelkanth Natu

Affected files ...

.. //depot/projects/mips2/src/sys/mips/mips/machdep.c#33 edit
.. //depot/projects/mips2/src/sys/mips/mips/swtch.S#13 edit

Differences ...

==== //depot/projects/mips2/src/sys/mips/mips/machdep.c#33 (text+ko) ====

@@ -453,6 +453,7 @@
 	tf->tf_regs[TF_SP] = (register_t)stack;
 	tf->tf_regs[TF_SR] |= MIPS_SR_KSU_USER;
 	tf->tf_regs[TF_SR] |= MIPS_SR_COP_0_BIT;
+	tf->tf_regs[TF_SR] |= MIPS_SR_EXL;
 	tf->tf_regs[TF_T9] = (register_t)entry; /* Used by PIC code */
 }
 

==== //depot/projects/mips2/src/sys/mips/mips/swtch.S#13 (text+ko) ====

@@ -193,67 +193,7 @@
 	.set noat
 	lw	t3, PC_CURTHREAD(t2)
 	lw	k1, TD_FRAME(t3)
-
-	/*
-	 * Load extended registers into some GPRs, and start unrolling
-	 * the trapframe, putting back the extended registers just
-	 * before we need to restore those GPRs.  This doesn't do any
-	 * special ordering like the save_registers routine might,
-	 * but it keeps the flow relatively consistent.
-	 */
-	lw	a1, TF_REG_EPC(k1)
-	lw	a0, TF_REG_MULHI(k1)
-	lw	v1, TF_REG_MULLO(k1)
-
-	lw	ra, TF_REG_RA(k1)
-	lw	t9, TF_REG_T9(k1)
-	lw	t8, TF_REG_T8(k1)
-	lw	ta3, TF_REG_TA3(k1)
-	lw	ta2, TF_REG_TA2(k1)
-	lw	ta1, TF_REG_TA1(k1)
-	lw	ta0, TF_REG_TA0(k1)
-	lw	t3, TF_REG_T3(k1)
-	lw	t2, TF_REG_T2(k1)
-	lw	t1, TF_REG_T1(k1)
-	lw	t0, TF_REG_T0(k1)
-
-	lw	s0, TF_REG_S0(k1)
-	lw	s1, TF_REG_S1(k1)
-	lw	s2, TF_REG_S2(k1)
-	lw	s3, TF_REG_S3(k1)
-	lw	s4, TF_REG_S4(k1)
-	lw	s5, TF_REG_S5(k1)
-	lw	s6, TF_REG_S6(k1)
-	lw	s7, TF_REG_S7(k1)
-	lw	s8, TF_REG_S8(k1)
-
-	/*
-	 * Brief interlude.
-	 */
-	mtc0	a1, MIPS_COP_0_EXC_PC
-	mthi	a0
-	mtlo	v1
-
-	/*
-	 * Now restore the registers we used for scratch, and nearby
-	 * GPRs.
-	 */
-	lw	a3, TF_REG_A3(k1)
-	lw	a2, TF_REG_A2(k1)
-	lw	a1, TF_REG_A1(k1)
-	lw	a0, TF_REG_A0(k1)
-	lw	v1, TF_REG_V1(k1)
-	lw	v0, TF_REG_V0(k1)
-	lw	gp, TF_REG_GP(k1)
-	lw	sp, TF_REG_SP(k1)
-
-	/*
-	 * We are done with the assembler temporary, restore it, and
-	 * return with it disabled, just in case.
-	 */
-	.set noat
-	lw	AT, TF_REG_AST(k1)
-	lw	k1, TF_REG_SR(k1)
+	jal	exception_restore_registers
+	nop
 	eret
-	mtc0	k1, MIPS_COP_0_STATUS
 END(fork_trampoline)


More information about the p4-projects mailing list