Module Name: src
Committed By: skrll
Date: Sun Aug 7 07:13:57 UTC 2016
Modified Files:
src/sys/arch/mips/mips: mipsX_subr.S
Log Message:
Fix two bugs for tlb_invalidate_addr for (PGSHIFT & 1) == 0
- t0/t1 weren't being updated when both lo0/lo1 become invalid
- the global bit (G) needs to be preserved if the entry becomes invalid
The MIPSNN optimisation is disabled for now as it needs to be updated
appropriately
To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 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/mipsX_subr.S
diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.82 src/sys/arch/mips/mips/mipsX_subr.S:1.83
--- src/sys/arch/mips/mips/mipsX_subr.S:1.82 Sun Aug 7 06:15:49 2016
+++ src/sys/arch/mips/mips/mipsX_subr.S Sun Aug 7 07:13:57 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: mipsX_subr.S,v 1.82 2016/08/07 06:15:49 skrll Exp $ */
+/* $NetBSD: mipsX_subr.S,v 1.83 2016/08/07 07:13:57 skrll Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -2307,18 +2307,21 @@ LEAF_NOPROFILE(MIPSX(tlb_invalidate_addr
and a2, t0 # a2=valid entryLo0 afterwards
and a3, t1 # a3=valid entryLo1 afterwards
or v0, a2, a3 # will one be valid?
-#ifdef MIPSNN
+#ifdef MIPSNNX
+#error Global bit is lost here when V==0 and it needs to be preserved
movz t0, zero, a2 # zero lo0 if V would not be set
movz t1, zero, a3 # zero lo1 if V would not be set
movn t2, a0, v0 # yes, keep VA the same
#else
- beqz v0, 1f # no valid entry
- _SLL a2, a2, PG_V_LSHIFT # move V to MSB
+ _SLL a2, a2, PG_V_LSHIFT # move V to MSB
_SRA a2, a2, PG_V_RSHIFT # fill with MSB
+ or a2, MIPS3_PG_G # mask needs to preserve G
and t0, t0, a2 # zero lo0 if V would not be set
_SLL a3, a3, PG_V_LSHIFT # move V to MSB
_SRA a3, a3, PG_V_RSHIFT # fill with MSB
- and t1, t1, a3 # zero lo1 if V would not be set
+ or a3, MIPS3_PG_G # mask needs to preserve G
+ beqz v0, 1f # no valid entry
+ and t1, t1, a3 # zero lo1 if V would not be set
move t2, a0 # we need entryHi to be valid
1:
#endif /* MIPSNN */