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 "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);
|
||||||
|
Loading…
Reference in New Issue
Block a user