Skip to contentSkip to conversation

MIPS64 MMU fixes

PATCH New Aurelien Jarno 1 participant 1 message Nov 22, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 MIPS64 MMU fixes

The trivial patch below fixes a few off-by-one in the MIPS64 MMU code.

Index: target-mips/helper.c
===================================================================
RCS file: /sources/qemu/qemu/target-mips/helper.c,v retrieving revision 1.58

helper.c +4 -4
diff -u -d -p -r1.58 helper.c
@@ -133,7 +133,7 @@ static int get_physical_address (CPUStat
 #if defined(TARGET_MIPS64)
     } else if (address < 0x4000000000000000ULL) {
         /* xuseg */
-	if (UX && address < (0x3FFFFFFFFFFFFFFFULL & env->SEGMask)) {
+	if (UX && address <= (0x3FFFFFFFFFFFFFFFULL & env->SEGMask)) {
             ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);
 	} else {
 	    ret = TLBRET_BADADDR;
@@ -141,7 +141,7 @@ static int get_physical_address (CPUStat
     } else if (address < 0x8000000000000000ULL) {
         /* xsseg */
 	if ((supervisor_mode || kernel_mode) &&
-	    SX && address < (0x7FFFFFFFFFFFFFFFULL & env->SEGMask)) {
+	    SX && address <= (0x7FFFFFFFFFFFFFFFULL & env->SEGMask)) {
             ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);
 	} else {
 	    ret = TLBRET_BADADDR;
@@ -150,7 +150,7 @@ static int get_physical_address (CPUStat
         /* xkphys */
         /* XXX: Assumes PABITS = 36 (correct for MIPS64R1) */
         if (kernel_mode && KX &&
-            (address & 0x07FFFFFFFFFFFFFFULL) < 0x0000000FFFFFFFFFULL) {
+            (address & 0x07FFFFFFFFFFFFFFULL) <= 0x0000000FFFFFFFFFULL) {
             *physical = address & 0x0000000FFFFFFFFFULL;
             *prot = PAGE_READ | PAGE_WRITE;
 	} else {
@@ -159,7 +159,7 @@ static int get_physical_address (CPUStat
     } else if (address < 0xFFFFFFFF80000000ULL) {
         /* xkseg */
 	if (kernel_mode && KX &&
-	    address < (0xFFFFFFFF7FFFFFFFULL & env->SEGMask)) {
+	    address <= (0xFFFFFFFF7FFFFFFFULL & env->SEGMask)) {
             ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);
 	} else {
 	    ret = TLBRET_BADADDR;
Signature · 4 lines
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   [email protected]         | [email protected]
   `-    people.debian.org/~aurel32 | www.aurel32.net