From a66c3bdae5190aed2cd82ff1458f208fd7c11118 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 28 Sep 2023 13:59:49 +0300 Subject: [PATCH] Kernel: Remove duplicate code in VirtualRange::create_to_vaddr_range --- kernel/kernel/Memory/VirtualRange.cpp | 31 +++------------------------ 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/kernel/kernel/Memory/VirtualRange.cpp b/kernel/kernel/Memory/VirtualRange.cpp index 2125b4c3..f9b106ce 100644 --- a/kernel/kernel/Memory/VirtualRange.cpp +++ b/kernel/kernel/Memory/VirtualRange.cpp @@ -56,39 +56,14 @@ namespace Kernel ASSERT(vaddr_start < vaddr_end); ASSERT(vaddr_end - vaddr_start + 1 >= size / PAGE_SIZE); - VirtualRange* result_ptr = new VirtualRange(page_table); - if (result_ptr == nullptr) - return BAN::Error::from_errno(ENOMEM); - auto result = BAN::UniqPtr::adopt(result_ptr); - - result->m_kmalloc = false; - result->m_vaddr = 0; - result->m_size = size; - result->m_flags = flags; - vaddr_t vaddr = page_table.reserve_free_contiguous_pages(size / PAGE_SIZE, vaddr_start, vaddr_end); if (vaddr == 0) return BAN::Error::from_errno(ENOMEM); ASSERT(vaddr + size <= vaddr_end); - result->m_vaddr = vaddr; - size_t needed_pages = size / PAGE_SIZE; - - for (size_t i = 0; i < needed_pages; i++) - { - paddr_t paddr = Heap::get().take_free_page(); - if (paddr == 0) - { - for (size_t j = 0; j < i; j++) - Heap::get().release_page(page_table.physical_address_of(vaddr + j * PAGE_SIZE)); - page_table.unmap_range(vaddr, size); - result->m_vaddr = 0; - return BAN::Error::from_errno(ENOMEM); - } - page_table.map_page_at(paddr, vaddr + i * PAGE_SIZE, flags); - } - - return result; + LockGuard _(page_table); + page_table.unmap_range(vaddr, size); // We have to unmap here to allow reservation in create_to_vaddr() + return create_to_vaddr(page_table, vaddr, size, flags); } BAN::ErrorOr> VirtualRange::create_kmalloc(size_t size)