MIPS64 MMU fixes
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
@@ -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