X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86%2Fmm_virt.c;h=3c893f8e57c4642da86d7f6c348e658f7caee000;hb=01fbfb424865291e00242681662ed9b20c33a524;hp=8902837c2f2fc6b8f4299f426d8d22d18be88c94;hpb=2d83a99f3202f0e4688b58405f67604a24420861;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/mm_virt.c b/Kernel/arch/x86/mm_virt.c index 8902837c..3c893f8e 100644 --- a/Kernel/arch/x86/mm_virt.c +++ b/Kernel/arch/x86/mm_virt.c @@ -95,8 +95,8 @@ tPAddr MM_DuplicatePage(tVAddr VAddr); #define gaPAE_TmpDir ((tTabEnt*)PAE_TMP_DIR_ADDR) #define gaPAE_TmpPDPT ((tTabEnt*)PAE_TMP_PDPT_ADDR) int gbUsePAE = 0; - int gilTempMappings = 0; - int gilTempFractal = 0; +tMutex glTempMappings; +tMutex glTempFractal; Uint32 gWorkerStacks[(NUM_WORKER_STACKS+31)/32]; int giLastUsedWorker = 0; @@ -533,7 +533,7 @@ tPAddr MM_Clone(void) tVAddr kStackBase = Proc_GetCurThread()->KernelStack - KERNEL_STACK_SIZE; void *tmp; - LOCK( &gilTempFractal ); + Mutex_Acquire( &glTempFractal ); // Create Directory Table *gpTmpCR3 = MM_AllocPhys() | 3; @@ -641,7 +641,7 @@ tPAddr MM_Clone(void) } ret = *gpTmpCR3 & ~0xFFF; - RELEASE( &gilTempFractal ); + Mutex_Release( &glTempFractal ); //LEAVE('x', ret); return ret; @@ -653,14 +653,15 @@ tPAddr MM_Clone(void) */ tVAddr MM_NewKStack(void) { - tVAddr base = KERNEL_STACKS; + tVAddr base; Uint i; - for(;base> 12) + i ] = PAddr | 3; INVLPG( TEMP_MAP_ADDR + (i << 12) ); //LEAVE('p', TEMP_MAP_ADDR + (i << 12)); - RELEASE( &gilTempMappings ); + Mutex_Release( &glTempMappings ); return TEMP_MAP_ADDR + (i << 12); } - RELEASE( &gilTempMappings ); - Threads_Yield(); + Mutex_Release( &glTempMappings ); + Threads_Yield(); // TODO: Use a sleep queue here instead } } @@ -1053,8 +1054,7 @@ void MM_UnmapHWPages(tVAddr VAddr, Uint Number) i = VAddr >> 12; - LOCK( &gilTempMappings ); // Temp and HW share a directory, so they share a lock - + Mutex_Acquire( &glTempMappings ); // Temp and HW share a directory, so they share a lock for( j = 0; j < Number; j++ ) { @@ -1062,7 +1062,7 @@ void MM_UnmapHWPages(tVAddr VAddr, Uint Number) gaPageTable[ i + j ] = 0; } - RELEASE( &gilTempMappings ); + Mutex_Release( &glTempMappings ); } // --- EXPORTS ---