From 2be4fe84044050a5eae24a1930c2b1e18f659bb7 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 24 May 2024 14:12:35 +0300 Subject: [PATCH] Kernel: Make PageTable::s_fast_page_lock non-recursive This lock is only used in wrapper of PageTable. There is no possiblity of taking the lock outside of these wrappers. --- kernel/arch/x86_64/PageTable.cpp | 6 +++--- kernel/include/kernel/Memory/PageTable.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/arch/x86_64/PageTable.cpp b/kernel/arch/x86_64/PageTable.cpp index 80607f63..03d2c30a 100644 --- a/kernel/arch/x86_64/PageTable.cpp +++ b/kernel/arch/x86_64/PageTable.cpp @@ -17,7 +17,7 @@ extern uint8_t g_userspace_end[]; namespace Kernel { - RecursiveSpinLock PageTable::s_fast_page_lock; + SpinLock PageTable::s_fast_page_lock; static PageTable* s_kernel = nullptr; static bool s_has_nxe = false; @@ -214,7 +214,7 @@ namespace Kernel ASSERT(s_kernel); ASSERT(paddr); - SpinLockGuard _(s_fast_page_lock); + ASSERT(s_fast_page_lock.current_processor_has_lock()); constexpr vaddr_t uc_vaddr = uncanonicalize(fast_page()); constexpr uint64_t pml4e = (uc_vaddr >> 39) & 0x1FF; @@ -237,7 +237,7 @@ namespace Kernel { ASSERT(s_kernel); - SpinLockGuard _(s_fast_page_lock); + ASSERT(s_fast_page_lock.current_processor_has_lock()); constexpr vaddr_t uc_vaddr = uncanonicalize(fast_page()); constexpr uint64_t pml4e = (uc_vaddr >> 39) & 0x1FF; diff --git a/kernel/include/kernel/Memory/PageTable.h b/kernel/include/kernel/Memory/PageTable.h index a23f5f91..29a15d3c 100644 --- a/kernel/include/kernel/Memory/PageTable.h +++ b/kernel/include/kernel/Memory/PageTable.h @@ -130,7 +130,7 @@ namespace Kernel private: paddr_t m_highest_paging_struct { 0 }; mutable RecursiveSpinLock m_lock; - static RecursiveSpinLock s_fast_page_lock; + static SpinLock s_fast_page_lock; }; static constexpr size_t range_page_count(vaddr_t start, size_t bytes)