Allow heap_manager to use non-contiguous blocks.

* Heap manager can now manage non-contiguous blocks of memory (currently
  all sized at the max block size only)
* Fix a bug where heap manager would try to buddy-merge max-sized blocks
This commit is contained in:
Justin C. Miller
2019-02-18 23:27:24 -08:00
parent 61df9cf32c
commit a9ac30b991
4 changed files with 97 additions and 18 deletions

View File

@@ -31,7 +31,7 @@ struct free_page_header
};
void mm_grow_callback(void *next, size_t length)
void * mm_grow_callback(void *next, size_t length)
{
kassert(length % page_manager::page_size == 0,
"Heap manager requested a fractional page.");
@@ -39,6 +39,7 @@ void mm_grow_callback(void *next, size_t length)
size_t pages = length / page_manager::page_size;
log::info(logs::memory, "Heap manager growing heap by %d pages.", pages);
g_page_manager.map_pages(reinterpret_cast<uintptr_t>(next), pages);
return next;
}