From: John Hodge Date: Sat, 24 Apr 2010 02:20:35 +0000 (+0800) Subject: Fixed MM_UnmapHWPages overwriting the wrong area X-Git-Tag: rel0.06~220 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;ds=sidebyside;h=4b1fffae7ad45b1d973b088e919c53ef0880f190;p=tpg%2Facess2.git Fixed MM_UnmapHWPages overwriting the wrong area --- diff --git a/Kernel/arch/x86/mm_virt.c b/Kernel/arch/x86/mm_virt.c index f3cd7bb7..9c933342 100644 --- a/Kernel/arch/x86/mm_virt.c +++ b/Kernel/arch/x86/mm_virt.c @@ -1024,17 +1024,21 @@ tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PhysAddr) void MM_UnmapHWPages(tVAddr VAddr, Uint Number) { int i, j; + + //Log_Debug("VirtMem", "MM_UnmapHWPages: (VAddr=0x%08x, Number=%i)", VAddr, Number); + // Sanity Check - if(VAddr < HW_MAP_ADDR || VAddr-Number*0x1000 > HW_MAP_MAX) return; + if(VAddr < HW_MAP_ADDR || VAddr+Number*0x1000 > HW_MAP_MAX) return; i = VAddr >> 12; LOCK( &gilTempMappings ); // Temp and HW share a directory, so they share a lock + for( j = 0; j < Number; j++ ) { - MM_DerefPhys( gaPageTable[ (HW_MAP_ADDR >> 12) + i + j ] & ~0xFFF ); - gaPageTable[ (HW_MAP_ADDR >> 12) + i + j ] = 0; + MM_DerefPhys( gaPageTable[ i + j ] & ~0xFFF ); + gaPageTable[ i + j ] = 0; } RELEASE( &gilTempMappings );