From f5704d25f86c28a455d4220152455378ceaff755 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Thu, 22 Jul 2021 15:56:43 -0700 Subject: [PATCH] kern: remove firmare-specific SignalAndModify impl Nintendo made this breaking change because there was zero official software relying on it, so it's safe for us to make the same change. --- .../source/kern_k_address_arbiter.cpp | 49 +++++-------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/libraries/libmesosphere/source/kern_k_address_arbiter.cpp b/libraries/libmesosphere/source/kern_k_address_arbiter.cpp index 32d443709..fdcefd122 100644 --- a/libraries/libmesosphere/source/kern_k_address_arbiter.cpp +++ b/libraries/libmesosphere/source/kern_k_address_arbiter.cpp @@ -103,54 +103,29 @@ namespace ams::kern { auto it = m_tree.nfind_key({ addr, -1 }); /* Determine the updated value. */ s32 new_value; - if (GetTargetFirmware() >= TargetFirmware_7_0_0) { - if (count <= 0) { - if ((it != m_tree.end()) && (it->GetAddressArbiterKey() == addr)) { - new_value = value - 2; - } else { - new_value = value + 1; - } + if (count <= 0) { + if ((it != m_tree.end()) && (it->GetAddressArbiterKey() == addr)) { + new_value = value - 2; } else { - if ((it != m_tree.end()) && (it->GetAddressArbiterKey() == addr)) { - auto tmp_it = it; - s32 tmp_num_waiters = 0; - while ((++tmp_it != m_tree.end()) && (tmp_it->GetAddressArbiterKey() == addr)) { - if ((tmp_num_waiters++) >= count) { - break; - } - } - - if (tmp_num_waiters < count) { - new_value = value - 1; - } else { - new_value = value; - } - } else { - new_value = value + 1; - } + new_value = value + 1; } } else { - if (count <= 0) { - if ((it != m_tree.end()) && (it->GetAddressArbiterKey() == addr)) { - new_value = value - 1; - } else { - new_value = value + 1; - } - } else { + if ((it != m_tree.end()) && (it->GetAddressArbiterKey() == addr)) { auto tmp_it = it; s32 tmp_num_waiters = 0; - while ((tmp_it != m_tree.end()) && (tmp_it->GetAddressArbiterKey() == addr) && (tmp_num_waiters < count + 1)) { - ++tmp_num_waiters; - ++tmp_it; + while ((++tmp_it != m_tree.end()) && (tmp_it->GetAddressArbiterKey() == addr)) { + if ((tmp_num_waiters++) >= count) { + break; + } } - if (tmp_num_waiters == 0) { - new_value = value + 1; - } else if (tmp_num_waiters <= count) { + if (tmp_num_waiters < count) { new_value = value - 1; } else { new_value = value; } + } else { + new_value = value + 1; } }