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 "assert.h"
#include "memory/KernelHeap.h" #include "memory/KernelHeap.h"
#include "memory/MemoryManager.h"
#include "memory/PMM.h" #include "memory/PMM.h"
#include "memory/VMM.h" #include "memory/VMM.h"
@ -68,23 +73,35 @@ void MemoryManager::release_page(void* page)
void* MemoryManager::get_pages(uint64_t count, int flags) 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); uint64_t virtualAddress = KernelHeap::request_virtual_pages(count);
for (uint64_t i = 0; i < count; i++) for (uint64_t i = 0; i < count; i++)
{ {
void* physicalAddress = PMM::request_page(); void* physicalAddress = PMM::request_page();
kernelVMM.map(virtualAddress + (i * 4096), (uint64_t)physicalAddress, flags); 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; return (void*)virtualAddress;
} }
void MemoryManager::release_pages(void* pages, uint64_t count) 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++) for (uint64_t i = 0; i < count; i++)
{ {
void* page = (void*)((uint64_t)pages + (i * 4096)); void* page = (void*)((uint64_t)pages + (i * 4096));
uint64_t physicalAddress = kernelVMM.getPhysical((uint64_t)page); uint64_t physicalAddress = kernelVMM.getPhysical((uint64_t)page);
ASSERT(physicalAddress != UINT64_MAX); ASSERT(physicalAddress != UINT64_MAX);
kernelVMM.unmap((uint64_t)page); kernelVMM.unmap((uint64_t)page);
#ifdef MM_DEBUG
kdbgln("releasing virtual %lx, physical %lx", (uint64_t)page, physicalAddress);
#endif
PMM::free_page((void*)physicalAddress); PMM::free_page((void*)physicalAddress);
} }
KernelHeap::free_virtual_pages((uint64_t)pages, count); KernelHeap::free_virtual_pages((uint64_t)pages, count);