From e3bea9854751f4935da437b30783709a116a9b52 Mon Sep 17 00:00:00 2001 From: Collecting Date: Wed, 7 Jan 2026 20:10:29 +0000 Subject: [PATCH] revert dadf9d270ca3e750cfb46164e59f0cea6b9649ea revert fix(nvdrv): prevent infinite loop when SMMU address space is exhausted Fix crash in PinHandle when SMMU allocation fails and unmap queue is empty. Previously, the code would log an error and continue looping indefinitely, causing log spam and eventual crash. Now it returns 0 to fail gracefully. Also fix incorrect handle check on line 219 - should check freeHandleDesc instead of handle_description. Signed-off-by: Zephyron --- src/core/hle/service/nvdrv/core/nvmap.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/core/hle/service/nvdrv/core/nvmap.cpp b/src/core/hle/service/nvdrv/core/nvmap.cpp index 9f83f3627..0ef3dca24 100644 --- a/src/core/hle/service/nvdrv/core/nvmap.cpp +++ b/src/core/hle/service/nvdrv/core/nvmap.cpp @@ -1,6 +1,5 @@ // SPDX-FileCopyrightText: 2022 yuzu Emulator Project // SPDX-FileCopyrightText: 2022 Skyline Team and Contributors -// SPDX-FileCopyrightText: 2025 citron Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later #include @@ -217,12 +216,10 @@ DAddr NvMap::PinHandle(NvMap::Handle::Id handle, bool low_area_pin) { // Handles in the unmap queue are guaranteed not to be pinned so don't bother // checking if they are before unmapping std::scoped_lock freeLock(freeHandleDesc->mutex); - if (freeHandleDesc->d_address) + if (handle_description->d_address) UnmapHandle(*freeHandleDesc); } else { LOG_CRITICAL(Service_NVDRV, "Ran out of SMMU address space!"); - // Break out of the loop to prevent infinite spinning when no handles can be freed - return 0; } }