Add optional (compile-opt-in) debug logging to the MemoryManager (which helped catch the bug that got fixed in the previous commit)
This commit is contained in:
parent
a0af8fa432
commit
2511b7d7a1
@ -1,6 +1,11 @@
|
||||
#include "memory/MemoryManager.h"
|
||||
#ifdef MM_DEBUG
|
||||
#define MODULE "mm"
|
||||
#include "log/Log.h"
|
||||
#endif
|
||||
|
||||
#include "assert.h"
|
||||
#include "memory/KernelHeap.h"
|
||||
#include "memory/MemoryManager.h"
|
||||
#include "memory/PMM.h"
|
||||
#include "memory/VMM.h"
|
||||
|
||||
@ -68,23 +73,35 @@ void MemoryManager::release_page(void* page)
|
||||
|
||||
void* MemoryManager::get_pages(uint64_t count, int flags)
|
||||
{
|
||||
#ifdef MM_DEBUG
|
||||
kdbgln("allocating several pages (%ld)", count);
|
||||
#endif
|
||||
uint64_t virtualAddress = KernelHeap::request_virtual_pages(count);
|
||||
for (uint64_t i = 0; i < count; i++)
|
||||
{
|
||||
void* physicalAddress = PMM::request_page();
|
||||
kernelVMM.map(virtualAddress + (i * 4096), (uint64_t)physicalAddress, flags);
|
||||
#ifdef MM_DEBUG
|
||||
kdbgln("allocating virtual %lx, physical %lx", virtualAddress + (i * 4096), (uint64_t)physicalAddress);
|
||||
#endif
|
||||
}
|
||||
return (void*)virtualAddress;
|
||||
}
|
||||
|
||||
void MemoryManager::release_pages(void* pages, uint64_t count)
|
||||
{
|
||||
#ifdef MM_DEBUG
|
||||
kdbgln("releasing several pages (%ld)", count);
|
||||
#endif
|
||||
for (uint64_t i = 0; i < count; i++)
|
||||
{
|
||||
void* page = (void*)((uint64_t)pages + (i * 4096));
|
||||
uint64_t physicalAddress = kernelVMM.getPhysical((uint64_t)page);
|
||||
ASSERT(physicalAddress != UINT64_MAX);
|
||||
kernelVMM.unmap((uint64_t)page);
|
||||
#ifdef MM_DEBUG
|
||||
kdbgln("releasing virtual %lx, physical %lx", (uint64_t)page, physicalAddress);
|
||||
#endif
|
||||
PMM::free_page((void*)physicalAddress);
|
||||
}
|
||||
KernelHeap::free_virtual_pages((uint64_t)pages, count);
|
||||
|
Loading…
Reference in New Issue
Block a user