From 2511b7d7a1cbc847aa93ad7a30a5c87b51ce7631 Mon Sep 17 00:00:00 2001 From: apio Date: Sat, 24 Sep 2022 22:38:07 +0200 Subject: [PATCH] Add optional (compile-opt-in) debug logging to the MemoryManager (which helped catch the bug that got fixed in the previous commit) --- kernel/src/memory/MemoryManager.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/kernel/src/memory/MemoryManager.cpp b/kernel/src/memory/MemoryManager.cpp index 65c86f20..526b615d 100644 --- a/kernel/src/memory/MemoryManager.cpp +++ b/kernel/src/memory/MemoryManager.cpp @@ -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);