KConditionVariable/KAddressArbiter: no need for global compare thread

This commit is contained in:
Michael Scire
2020-12-01 16:19:39 -08:00
parent 4f00303daf
commit 25e1d34017
6 changed files with 124 additions and 23 deletions

View File

@@ -17,8 +17,6 @@
namespace ams::kern {
constinit KThread g_cv_arbiter_compare_thread;
namespace {
ALWAYS_INLINE bool ReadFromUser(u32 *out, KProcessAddress address) {
@@ -179,9 +177,8 @@ namespace ams::kern {
int num_waiters = 0;
{
KScopedSchedulerLock sl;
g_cv_arbiter_compare_thread.SetupForConditionVariableCompare(cv_key, -1);
auto it = this->tree.nfind(g_cv_arbiter_compare_thread);
auto it = this->tree.nfind_light({ cv_key, -1 });
while ((it != this->tree.end()) && (count <= 0 || num_waiters < count) && (it->GetConditionVariableKey() == cv_key)) {
KThread *target_thread = std::addressof(*it);