From 46c34db6cb2ac2357b531ff96048a675af304275 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 11 Jun 2023 15:57:48 +0300 Subject: [PATCH] Kernel: GeneralAllocator and FixedWidth allocator invalidate TLB caches We were getting random exceptions when reallocating same addressess and this fixes that problem :) --- kernel/kernel/Memory/FixedWidthAllocator.cpp | 1 + kernel/kernel/Memory/GeneralAllocator.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel/kernel/Memory/FixedWidthAllocator.cpp b/kernel/kernel/Memory/FixedWidthAllocator.cpp index 22ccaa6277..bb98f8b73f 100644 --- a/kernel/kernel/Memory/FixedWidthAllocator.cpp +++ b/kernel/kernel/Memory/FixedWidthAllocator.cpp @@ -196,6 +196,7 @@ namespace Kernel page_vaddr = m_page_table.get_free_page(); m_page_table.map_page_at(page_paddr, page_vaddr, PageTable::Flags::UserSupervisor | PageTable::Flags::ReadWrite | PageTable::Flags::Present); + m_page_table.invalidate(page_vaddr); } bool FixedWidthAllocator::allocate_page_if_needed(vaddr_t vaddr, uint8_t flags) diff --git a/kernel/kernel/Memory/GeneralAllocator.cpp b/kernel/kernel/Memory/GeneralAllocator.cpp index 0cf92ce96b..f9ff1793bd 100644 --- a/kernel/kernel/Memory/GeneralAllocator.cpp +++ b/kernel/kernel/Memory/GeneralAllocator.cpp @@ -43,7 +43,11 @@ namespace Kernel allocation.address = m_page_table.get_free_contiguous_pages(needed_pages); for (size_t i = 0; i < needed_pages; i++) - m_page_table.map_page_at(allocation.pages[i], allocation.address + i * PAGE_SIZE, PageTable::Flags::UserSupervisor | PageTable::Flags::ReadWrite | PageTable::Flags::Present); + { + vaddr_t vaddr = allocation.address + i * PAGE_SIZE; + m_page_table.map_page_at(allocation.pages[i], vaddr, PageTable::Flags::UserSupervisor | PageTable::Flags::ReadWrite | PageTable::Flags::Present); + m_page_table.invalidate(vaddr); + } MUST(m_allocations.push_back(BAN::move(allocation))); return allocation.address;