From 77b408b4e18fabb29f4cab5e899e7c8db1bc1204 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 8 Apr 2026 14:16:13 +0200 Subject: kernel: fix mmio allocator --- kernel/src/memory/mmio_allocator.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/kernel/src/memory/mmio_allocator.cpp b/kernel/src/memory/mmio_allocator.cpp index f77f14f..ddbdfc2 100644 --- a/kernel/src/memory/mmio_allocator.cpp +++ b/kernel/src/memory/mmio_allocator.cpp @@ -26,21 +26,25 @@ namespace kernel::memory auto current = m_head; while (current) { - if (current->page_count > count) + if (current->is_free && current->page_count >= count) { - auto new_base = current->base + (count * kapi::memory::page::size); - auto split_node = make_node(new_base, current->page_count - count, std::move(current->next), current, true); - - if (current->next) + if (current->page_count > count) { - current->next->previous = split_node; + auto new_base = current->base + (count * kapi::memory::page::size); + auto split_node = make_node(new_base, current->page_count - count, std::move(current->next), current, true); + + if (current->next) + { + current->next->previous = split_node; + } + current->next = split_node; + current->page_count = count; } - current->next = split_node; - current->page_count = count; - } - current->is_free = false; - return current->base; + current->is_free = false; + return current->base; + } + current = current->next; } kapi::system::panic("[OS:MEM] MMIO alloctor out of memory!"); -- cgit v1.2.3