From 25250590d0aebfa8d5861ce7cad7aeaf3478ecf0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 26 Oct 2021 09:03:41 +0200 Subject: [PATCH] Kernel: Take VMObject lock once in Region::remap_vmobject_page() We were taking and releasing the lock repeatedly instead of holding it across the entire remap operation. --- Kernel/Memory/Region.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kernel/Memory/Region.cpp b/Kernel/Memory/Region.cpp index 8a5e04c87c..534909c035 100644 --- a/Kernel/Memory/Region.cpp +++ b/Kernel/Memory/Region.cpp @@ -204,7 +204,6 @@ bool Region::map_individual_page_impl(size_t page_index) bool Region::do_remap_vmobject_page(size_t page_index, bool with_flush) { - SpinlockLocker lock(vmobject().m_lock); if (!m_page_directory) return true; // not an error, region may have not yet mapped it if (!translate_vmobject_page(page_index)) @@ -221,6 +220,7 @@ bool Region::remap_vmobject_page(size_t page_index, bool with_flush) { auto& vmobject = this->vmobject(); bool success = true; + SpinlockLocker lock(vmobject.m_lock); vmobject.for_each_region([&](auto& region) { if (!region.do_remap_vmobject_page(page_index, with_flush)) success = false;