From 62f5292f38af194cb4a98e08ed279446d1400003 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 6 May 2026 00:28:00 +0300 Subject: [PATCH] Kernel: Send only one TLB invalidation when creating a ByteRingBuffer --- kernel/kernel/Memory/ByteRingBuffer.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/kernel/Memory/ByteRingBuffer.cpp b/kernel/kernel/Memory/ByteRingBuffer.cpp index 24eb3274..853fc9df 100644 --- a/kernel/kernel/Memory/ByteRingBuffer.cpp +++ b/kernel/kernel/Memory/ByteRingBuffer.cpp @@ -25,10 +25,12 @@ namespace Kernel const paddr_t paddr = Heap::get().take_free_page(); if (paddr == 0) return BAN::Error::from_errno(ENOMEM); - PageTable::kernel().map_page_at(paddr, buffer->m_vaddr + i * PAGE_SIZE, PageTable::ReadWrite | PageTable::Present); - PageTable::kernel().map_page_at(paddr, buffer->m_vaddr + size + i * PAGE_SIZE, PageTable::ReadWrite | PageTable::Present); + PageTable::kernel().map_page_at(paddr, buffer->m_vaddr + i * PAGE_SIZE, PageTable::ReadWrite | PageTable::Present, PageTable::MemoryType::Normal, false); + PageTable::kernel().map_page_at(paddr, buffer->m_vaddr + size + i * PAGE_SIZE, PageTable::ReadWrite | PageTable::Present, PageTable::MemoryType::Normal, false); } + PageTable::kernel().invalidate_range(buffer->m_vaddr, page_count * 2, true); + return buffer; } @@ -36,13 +38,11 @@ namespace Kernel { if (m_vaddr == 0) return; + for (size_t i = 0; i < m_capacity / PAGE_SIZE; i++) - { - const paddr_t paddr = PageTable::kernel().physical_address_of(m_vaddr + i * PAGE_SIZE); - if (paddr == 0) - break; - Heap::get().release_page(paddr); - } + if (const paddr_t paddr = PageTable::kernel().physical_address_of(m_vaddr + i * PAGE_SIZE)) + Heap::get().release_page(paddr); + PageTable::kernel().unmap_range(m_vaddr, m_capacity * 2); }