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:
apio 2022-09-24 22:38:07 +02:00
parent a0af8fa432
commit 2511b7d7a1

View File

@ -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);