summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/mips/include/cpuregs.h6
-rw-r--r--sys/mips/mips/exception.S6
-rw-r--r--sys/mips/mips/swtch.S6
3 files changed, 6 insertions, 12 deletions
diff --git a/sys/mips/include/cpuregs.h b/sys/mips/include/cpuregs.h
index e3070ba..f1f2485 100644
--- a/sys/mips/include/cpuregs.h
+++ b/sys/mips/include/cpuregs.h
@@ -106,7 +106,11 @@
#elif defined(CPU_SB1)
#define COP0_SYNC ssnop; ssnop; ssnop; ssnop; ssnop; ssnop; ssnop; ssnop; ssnop
#else
-#define COP0_SYNC /* nothing */
+/*
+ * Pick a reasonable default based on the "typical" spacing described in the
+ * "CP0 Hazards" chapter of MIPS Architecture Book Vol III.
+ */
+#define COP0_SYNC ssnop; ssnop; ssnop; ssnop; ssnop
#endif
#define COP0_HAZARD_FPUENABLE nop; nop; nop; nop;
diff --git a/sys/mips/mips/exception.S b/sys/mips/mips/exception.S
index 182ff85..fdac5e3 100644
--- a/sys/mips/mips/exception.S
+++ b/sys/mips/mips/exception.S
@@ -519,9 +519,6 @@ NNON_LEAF(MipsUserGenException, STAND_FRAME_SIZE, ra)
and t0, t0, ~(MIPS_SR_INT_IE)
mtc0 t0, COP_0_STATUS_REG
ITLBNOPFIX
- or t0, t0, SR_EXL
- mtc0 t0, COP_0_STATUS_REG # set exeption level
- ITLBNOPFIX
/*
* The use of k1 for storing the PCB pointer must be done only
@@ -751,9 +748,6 @@ NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE, ra)
and t0, t0, ~(MIPS_SR_INT_IE)
mtc0 t0, COP_0_STATUS_REG
ITLBNOPFIX
- or t0, t0, SR_EXL
- mtc0 t0, COP_0_STATUS_REG # set exeption level
- ITLBNOPFIX
GET_CPU_PCPU(k1)
lw k1, PC_CURPCB(k1)
diff --git a/sys/mips/mips/swtch.S b/sys/mips/mips/swtch.S
index bb84625..8620ab4 100644
--- a/sys/mips/mips/swtch.S
+++ b/sys/mips/mips/swtch.S
@@ -171,13 +171,9 @@ LEAF(fork_trampoline)
1:
mfc0 v0, COP_0_STATUS_REG # set exeption level bit.
- or v0, SR_EXL
and v0, ~(SR_INT_ENAB)
mtc0 v0, COP_0_STATUS_REG # set exeption level bit.
- nop
- nop
- nop
- nop
+ COP0_SYNC
.set noat
move k1, a1
RESTORE_U_PCB_REG(t0, MULLO, k1)
OpenPOWER on IntegriCloud