X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Farch%2Fx86%2Fmm_phys.c;h=cb4f9e0b015817d2d9eb3fece802bbd53f52220b;hb=7d881c2e5fef91a6570e46ef69a5d4a5cf0e8b4d;hp=b3325c903c4f0ee59ea1eb2769c84fe43e80cb1e;hpb=dea6bcf35a3f52396724d74e47f71cb3afade37c;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/mm_phys.c b/Kernel/arch/x86/mm_phys.c index b3325c90..cb4f9e0b 100644 --- a/Kernel/arch/x86/mm_phys.c +++ b/Kernel/arch/x86/mm_phys.c @@ -21,6 +21,7 @@ void MM_RefPhys(tPAddr PAddr); void MM_DerefPhys(tPAddr PAddr); // === GLOBALS === +tMutex glPhysAlloc; Uint64 giPhysAlloc = 0; // Number of allocated pages Uint64 giPageCount = 0; // Total number of pages Uint64 giLastPossibleFree = 0; // Last possible free page (before all pages are used) @@ -39,12 +40,10 @@ void MM_Install(tMBoot_Info *MBoot) tMBoot_MMapEnt *ent; // --- Find largest address - Log("MBoot->MMapAddr = %08x", MBoot->MMapAddr); MBoot->MMapAddr |= KERNEL_BASE; ent = (void *)( MBoot->MMapAddr ); while( (Uint)ent < MBoot->MMapAddr + MBoot->MMapLength ) { - Log(" ent->Size = %08x", ent->Size); // Adjust for size ent->Size += 4; @@ -91,12 +90,10 @@ void MM_Install(tMBoot_Info *MBoot) // Mark Multiboot's pages as taken // - Structure MM_RefPhys( (Uint)MBoot - KERNEL_BASE ); - Log("MBoot->ModuleCount = %i", MBoot->ModuleCount); // - Module List for(i = (MBoot->ModuleCount*sizeof(tMBoot_Module)+0xFFF)>12; i--; ) MM_RefPhys( MBoot->Modules + (i << 12) ); // - Modules - Log("MBoot->Modules = %p", MBoot->Modules); mods = (void*)(MBoot->Modules + KERNEL_BASE); for(i = 0; i < MBoot->ModuleCount; i++) { @@ -134,7 +131,7 @@ tPAddr MM_AllocPhys(void) ENTER(""); - LOCK( &giPhysAlloc ); + Mutex_Acquire( &glPhysAlloc ); // Find free page // Scan downwards @@ -166,7 +163,7 @@ tPAddr MM_AllocPhys(void) LOG("a=%i,b=%i,c=%i", a, b, c); for( ; gaSuperBitmap[a] == -1 && a >= 0; a-- ); if(a < 0) { - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); Warning("MM_AllocPhys - OUT OF MEMORY (Called by %p)", __builtin_return_address(0)); LEAVE('i', 0); return 0; @@ -192,7 +189,7 @@ tPAddr MM_AllocPhys(void) gaSuperBitmap[indx>>10] |= 1 << ((indx>>5)&31); // Release Spinlock - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); LEAVE('X', ret); //Log("MM_AllocPhys: RETURN 0x%x", ret); @@ -221,7 +218,7 @@ tPAddr MM_AllocPhysRange(int Pages, int MaxBits) if(MaxBits > PHYS_BITS) MaxBits = PHYS_BITS; // Lock - LOCK( &giPhysAlloc ); + Mutex_Acquire( &glPhysAlloc ); // Set up search state if( giLastPossibleFree > ((tPAddr)1 << (MaxBits-12)) ) { @@ -241,7 +238,7 @@ tPAddr MM_AllocPhysRange(int Pages, int MaxBits) // Find free page for( ; gaSuperBitmap[a] == -1 && a --; ) b = 31; if(a < 0) { - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); Warning("MM_AllocPhysRange - OUT OF MEMORY (Called by %p)", __builtin_return_address(0)); LEAVE('i', 0); return 0; @@ -299,7 +296,7 @@ tPAddr MM_AllocPhysRange(int Pages, int MaxBits) // Check if an address was found if( idx < 0 ) { - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); Warning("MM_AllocPhysRange - OUT OF MEMORY (Called by %p)", __builtin_return_address(0)); LEAVE('i', 0); return 0; @@ -322,7 +319,7 @@ tPAddr MM_AllocPhysRange(int Pages, int MaxBits) if(gaPageBitmap[ idx ] == -1) gaSuperBitmap[idx/32] |= 1 << (idx%32); // Release Spinlock - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); LEAVE('X', ret); return ret; @@ -340,7 +337,7 @@ void MM_RefPhys(tPAddr PAddr) if(PAddr >= giPageCount) return; // Lock Structures - LOCK( &giPhysAlloc ); + Mutex_Acquire( &glPhysAlloc ); // Reference the page if(gaPageReferences) @@ -354,7 +351,7 @@ void MM_RefPhys(tPAddr PAddr) gaSuperBitmap[PAddr/1024] |= 1 << ((PAddr/32)&31); // Release Spinlock - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); } /** @@ -376,7 +373,7 @@ void MM_DerefPhys(tPAddr PAddr) } // Lock Structures - LOCK( &giPhysAlloc ); + Mutex_Acquire( &glPhysAlloc ); if( giLastPossibleFree < PAddr ) giLastPossibleFree = PAddr; @@ -394,7 +391,7 @@ void MM_DerefPhys(tPAddr PAddr) } // Release spinlock - RELEASE( &giPhysAlloc ); + Mutex_Release( &glPhysAlloc ); } /**