X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86%2Fmm_phys.c;h=a6656e50099462855c5f8357becb209be85d9baa;hb=0259a3c08b2c7d5c9d05bd0d051a67399e755638;hp=80e92fe66f4042332edae17bb95d5e9c926ea73c;hpb=8bc40333b1401d7616b225945fee53d972c2f418;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/mm_phys.c b/Kernel/arch/x86/mm_phys.c index 80e92fe6..a6656e50 100644 --- a/Kernel/arch/x86/mm_phys.c +++ b/Kernel/arch/x86/mm_phys.c @@ -76,16 +76,12 @@ void MM_Install(tMBoot_Info *MBoot) memsetd(gaPageReferences, 1, kernelPages); for( num = kernelPages; num < giPageCount; num++ ) { - //if(gaPageBitmap[ num2 / 32 ] == 0) { - // memsetd(&gaPageReferences[num2], 0, 31-(num2&31)); - // num2 = (num2 + 32) & ~31; - //} else - gaPageReferences[num] = (gaPageBitmap[ num / 32 ] >> (num&31)) & 1; + gaPageReferences[num] = (gaPageBitmap[ num / 32 ] >> (num&31)) & 1; } } /** - * \fn Uint32 MM_AllocPhys() + * \fn tPAddr MM_AllocPhys() * \brief Allocates a physical page */ tPAddr MM_AllocPhys() @@ -100,6 +96,7 @@ tPAddr MM_AllocPhys() for(a=0;gaSuperBitmap[a]==-1&&a>= 12; @@ -185,3 +182,18 @@ void MM_DerefPhys(Uint32 Addr) // Release spinlock RELEASE( &giPhysAlloc ); } + +/** + * \fn int MM_GetRefCount(tPAddr Addr) + */ +int MM_GetRefCount(tPAddr Addr) +{ + // Get page number + Addr >>= 12; + + // We don't care about non-ram pages + if(Addr >= giPageCount) return -1; + + // Check if it is freed + return gaPageReferences[ Addr ]; +}