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