From a44316fa8b43aa346e0ccb9e8e5a15a8371c9bfc Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 30 Jan 2022 16:07:59 +0100 Subject: [PATCH] Kernel: Release page directory and MM locks sooner in space finalization We don't need to hold these locks when tearing down the region tree. Release them as soon as unmapping is finished. --- Kernel/Memory/AddressSpace.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Kernel/Memory/AddressSpace.cpp b/Kernel/Memory/AddressSpace.cpp index a4379186b8..ea47ee91a3 100644 --- a/Kernel/Memory/AddressSpace.cpp +++ b/Kernel/Memory/AddressSpace.cpp @@ -321,10 +321,12 @@ void AddressSpace::remove_all_regions(Badge) { VERIFY(Thread::current() == g_finalizer); SpinlockLocker locker(m_lock); - SpinlockLocker pd_locker(m_page_directory->get_lock()); - SpinlockLocker mm_locker(s_mm_lock); - for (auto& region : m_regions) - (*region).unmap_with_locks_held(Region::ShouldDeallocateVirtualRange::No, ShouldFlushTLB::No, pd_locker, mm_locker); + { + SpinlockLocker pd_locker(m_page_directory->get_lock()); + SpinlockLocker mm_locker(s_mm_lock); + for (auto& region : m_regions) + (*region).unmap_with_locks_held(Region::ShouldDeallocateVirtualRange::No, ShouldFlushTLB::No, pd_locker, mm_locker); + } m_regions.clear(); }