From 17c50417f83f0f7d4a8b718b9a471456f33b759e Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Mon, 7 Oct 2024 07:39:02 +0000 Subject: [PATCH] arm64: Fix double locking when calling FreeTable Change-Id: I159ccd17ec6c06d759e856f5397bf00a7473d1e0 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8436 Tested-by: Commit checker robot Haiku-Format: Haiku-format Bot Reviewed-by: waddlesplash --- .../kernel/arch/arm64/VMSAv8TranslationMap.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp b/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp index ea9cda81fd..c552ec745a 100644 --- a/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp +++ b/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp @@ -139,18 +139,15 @@ VMSAv8TranslationMap::~VMSAv8TranslationMap() ASSERT(!fIsKernel); ASSERT(fRefcount == 0); - { - ThreadCPUPinner pinner(thread_get_current_thread()); - FreeTable(fPageTable, 0, fInitialLevel); - } - { - InterruptsSpinLocker locker(sAsidLock); + ThreadCPUPinner pinner(thread_get_current_thread()); + InterruptsSpinLocker locker(sAsidLock); - if (fASID != -1) { - sAsidMapping[fASID] = NULL; - free_asid(fASID); - } + FreeTable(fPageTable, 0, fInitialLevel); + + if (fASID != -1) { + sAsidMapping[fASID] = NULL; + free_asid(fASID); } } @@ -280,7 +277,6 @@ void VMSAv8TranslationMap::FreeTable(phys_addr_t ptPa, uint64_t va, int level) { ASSERT(level < 4); - InterruptsSpinLocker locker(sAsidLock); int tableBits = fPageBits - 3; uint64_t tableSize = 1UL << tableBits;