Module Name: src
Committed By: maya
Date: Sat Jul 2 19:40:57 UTC 2016
Modified Files:
src/sys/arch/mips/mips: locore.S mipsX_subr.S
Log Message:
Sprinkle MFC0_HAZARD everywhere.
ok dholland@
To generate a diff of this commit:
cvs rdiff -u -r1.199 -r1.200 src/sys/arch/mips/mips/locore.S
cvs rdiff -u -r1.62 -r1.63 src/sys/arch/mips/mips/mipsX_subr.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/mips/locore.S
diff -u src/sys/arch/mips/mips/locore.S:1.199 src/sys/arch/mips/mips/locore.S:1.200
--- src/sys/arch/mips/mips/locore.S:1.199 Sat Jul 2 18:29:59 2016
+++ src/sys/arch/mips/mips/locore.S Sat Jul 2 19:40:57 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.199 2016/07/02 18:29:59 maya Exp $ */
+/* $NetBSD: locore.S,v 1.200 2016/07/02 19:40:57 maya Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -157,6 +157,7 @@ _C_LABEL(kernel_text):
#endif /* HPCMIPS_L1CACHE_DISABLE */
#else
mfc0 t0, MIPS_COP_0_STATUS
+ MFC0_HAZARD
#ifdef _LP64
or t0, MIPS_SR_KX # turn on XKSEG and XKPHYS
#endif
Index: src/sys/arch/mips/mips/mipsX_subr.S
diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.62 src/sys/arch/mips/mips/mipsX_subr.S:1.63
--- src/sys/arch/mips/mips/mipsX_subr.S:1.62 Thu Jun 11 07:30:10 2015
+++ src/sys/arch/mips/mips/mipsX_subr.S Sat Jul 2 19:40:57 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: mipsX_subr.S,v 1.62 2015/06/11 07:30:10 matt Exp $ */
+/* $NetBSD: mipsX_subr.S,v 1.63 2016/07/02 19:40:57 maya Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -134,6 +134,12 @@
#include "assym.h"
+#if defined(MIPS1) || defined(MIPS2) || defined(MIPS3)
+#define MFC0_HAZARD nop
+#else
+#define MFC0_HAZARD /* nothing */
+#endif
+
#ifdef _LP64
#define RESET_EXCEPTION_LEVEL_DISABLE_INTERRUPTS(reg) \
li reg, MIPS_SR_KX; mtc0 reg, MIPS_COP_0_STATUS
@@ -1080,6 +1086,7 @@ NESTED_NOPROFILE(MIPSX(kern_intr), KERNF
* Now we can clear exception level since no interrupts can be delivered
*/
mfc0 v1, MIPS_COP_0_STATUS
+ MFC0_HAZARD
and v0, v1, MIPS_SR_EXL # grab exception level bit
xor v0, v1 # clear it
mtc0 v0, MIPS_COP_0_STATUS # write new status
@@ -1098,6 +1105,7 @@ NESTED_NOPROFILE(MIPSX(kern_intr), KERNF
#if defined(PARANOIA)
mfc0 t0, MIPS_COP_0_STATUS # verify INT_IE is still set
+ MFC0_HAZARD
and t0, MIPS_SR_INT_IE
#if defined(MIPS32) || defined(MIPS32R2) || defined(MIPS64) || defined(MIPS64R2)
teqi t0, 0
@@ -1112,6 +1120,7 @@ NESTED_NOPROFILE(MIPSX(kern_intr), KERNF
beqz a0, 4f # nope
nop
mfc0 v0, MIPS_COP_0_CAUSE # grab the pending softints
+ MFC0_HAZARD
and a0, v0 # are softints pending
beqz a0, 4f # nope
nop
@@ -1146,6 +1155,7 @@ NESTED_NOPROFILE(MIPSX(kern_intr), KERNF
di v0 # disable interrupts
#else
mfc0 v0, MIPS_COP_0_STATUS # read it
+ MFC0_HAZARD
xor v0, MIPS_SR_INT_IE # disable interrupts
mtc0 v0, MIPS_COP_0_STATUS # write it
#endif
@@ -1175,6 +1185,7 @@ NESTED_NOPROFILE(MIPSX(kern_intr), KERNF
#ifdef PARANOIA
mfc0 v0, MIPS_COP_0_STATUS
+ MFC0_HAZARD
or v0, MIPS_SR_INT_IE
5: bne v0, s1, 5b
nop
@@ -1220,6 +1231,7 @@ NESTED_NOPROFILE(MIPSX(user_reserved_ins
/* If this was in a branch delay slot, take the slow path. */
mfc0 v0, MIPS_COP_0_CAUSE
+ MFC0_HAZARD
bltz v0, MIPSX(user_gen_exception_common)
nop
@@ -1228,6 +1240,7 @@ NESTED_NOPROFILE(MIPSX(user_reserved_ins
* this since the instruction actually got read.
*/
_MFC0 v0, MIPS_COP_0_EXC_PC
+ MFC0_HAZARD
INT_L AT, 0(v0)
/*
@@ -1242,6 +1255,7 @@ NESTED_NOPROFILE(MIPSX(user_reserved_ins
* Advance the PC (don't want to restart at the rdhwr).
*/
_MFC0 v0, MIPS_COP_0_EXC_PC
+ MFC0_HAZARD
PTR_ADDIU v0, 4
_MTC0 v0, MIPS_COP_0_EXC_PC
COP0_SYNC
@@ -1444,6 +1458,7 @@ NESTED_NOPROFILE(MIPSX(user_intr), CALLF
*/
mfc0 v1, MIPS_COP_0_STATUS
#ifdef NOFPU
+ MFC0_HAZARD
and v0, v1, MIPS_SR_KSU_MASK|MIPS_SR_EXL
xor v0, v1 # clear the bits
#else
@@ -1487,6 +1502,7 @@ NESTED_NOPROFILE(MIPSX(user_intr), CALLF
nop
#endif
mfc0 a0, MIPS_COP_0_CAUSE # grab the pending softints
+ MFC0_HAZARD
and a0, MIPS_SOFT_INT_MASK # are there softints pending
beqz a0, 4f # nope
nop
@@ -1501,6 +1517,7 @@ NESTED_NOPROFILE(MIPSX(user_intr), CALLF
di # disable interrupts
#else
mfc0 v1, MIPS_COP_0_STATUS
+ MFC0_HAZARD
and v0, v1, MIPS_SR_INT_IE # clear interrupt enable
xor v0, v1
mtc0 v0, MIPS_COP_0_STATUS # interrupts are disabled
@@ -1539,6 +1556,7 @@ NESTED_NOPROFILE(MIPSX(user_intr), CALLF
ei # enable interrupts
#else
mfc0 t0, MIPS_COP_0_STATUS #
+ MFC0_HAZARD
or t0, MIPS_SR_INT_IE # enable interrupts
DYNAMIC_STATUS_MASK(t0, t1) # machine dependent masking
mtc0 t0, MIPS_COP_0_STATUS # enable interrupts (spl0)
@@ -1838,9 +1856,7 @@ LEAF_NOPROFILE(MIPSX(tlb_invalid_excepti
COP0_SYNC
mfc0 k0, MIPS_COP_0_TLB_INDEX
-#ifdef MIPS3
- nop
-#endif
+ MFC0_HAZARD
bltz k0, _C_LABEL(MIPSX(kern_gen_exception)) # ASSERT(TLB entry exists)
nop # - delay slot -
@@ -2124,6 +2140,7 @@ LEAF_NOPROFILE(MIPSX(tlb_invalidate_addr
tlbp # probe the entry in question
COP0_SYNC
mfc0 v0, MIPS_COP_0_TLB_INDEX # see what we got
+ MFC0_HAZARD
bltz v0, 1f # index < 0 then skip
li t1, MIPS_KSEG0_START # invalid address
PTR_SLL v0, PGSHIFT + 1 # PAGE_SHIFT + 1
@@ -2183,10 +2200,12 @@ LEAF_NOPROFILE(MIPSX(tlb_invalidate_asid
tlbr # obtain an entry
COP0_SYNC
_MFC0 a0, MIPS_COP_0_TLB_LO1
+ MFC0_HAZARD
and a0, MIPS3_PG_G # check to see it has G bit
bnez a0, 2f # yep, skip this one.
nop
_MFC0 a0, MIPS_COP_0_TLB_HI # get VA and ASID
+ MFC0_HAZARD
and a0, MIPS3_PG_ASID # focus on ASID
sltu a3, a0, a1 # asid < base?
bnez a3, 2f # yes, skip this entry.
@@ -2246,6 +2265,7 @@ LEAF_NOPROFILE(MIPSX(tlb_invalidate_glob
tlbr # obtain an entry
COP0_SYNC
_MFC0 a0, MIPS_COP_0_TLB_LO1
+ MFC0_HAZARD
and a0, MIPS3_PG_G # check to see it has G bit
beqz a0, 2f # no, skip this entry
nop
@@ -2359,11 +2379,13 @@ LEAF_NOPROFILE(MIPSX(tlb_record_asids))
tlbr # obtain an entry
COP0_SYNC
_MFC0 t0, MIPS_COP_0_TLB_LO1
+ MFC0_HAZARD
and t0, MIPS3_PG_G # check to see it has G bit
bnez t0, 4f # yep, skip this one.
nop
_MFC0 t0, MIPS_COP_0_TLB_HI # get VA and ASID
+ MFC0_HAZARD
and t0, a1 # focus on ASID
srl a2, t0, 3 + LONG_SCALESHIFT # drop low 5 or 6 bits
@@ -2422,6 +2444,7 @@ LEAF(MIPSX(tlb_enter))
COP0_SYNC
mfc0 v0, MIPS_COP_0_TLB_INDEX # was it in the TLB?
+ MFC0_HAZARD
bltz v0, 1f # nope
nop