Date: Mon, 9 Jul 2007 17:35:41 GMT From: Oleksandr Tymoshenko <gonzo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 123217 for review Message-ID: <200707091735.l69HZfsh084766@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=123217 Change 123217 by gonzo@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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707091735.l69HZfsh084766>