From 9781cc5d160741a96b0c6cce16de0965a73ab0d0 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 7 Dec 2023 13:26:42 +0200 Subject: [PATCH] Kernel: Remove obsolete Scheduler::is_valid_tid() This function was used when processes could die at any point in time. Now that processes can only die in known spots, we can be sure they are not holding any locks. This allows much more performant locking. --- kernel/include/kernel/Scheduler.h | 2 -- kernel/kernel/Scheduler.cpp | 24 +----------------------- kernel/kernel/SpinLock.cpp | 4 ++-- 3 files changed, 3 insertions(+), 27 deletions(-) diff --git a/kernel/include/kernel/Scheduler.h b/kernel/include/kernel/Scheduler.h index f22114ea..02b72b74 100644 --- a/kernel/include/kernel/Scheduler.h +++ b/kernel/include/kernel/Scheduler.h @@ -29,8 +29,6 @@ namespace Kernel Thread& current_thread(); static pid_t current_tid(); - static bool is_valid_tid(pid_t tid); - [[noreturn]] void execute_current_thread(); [[noreturn]] void _execute_current_thread(); [[noreturn]] void delete_current_process_and_thread(); diff --git a/kernel/kernel/Scheduler.cpp b/kernel/kernel/Scheduler.cpp index 5bd5e1ea..bd5ebdc6 100644 --- a/kernel/kernel/Scheduler.cpp +++ b/kernel/kernel/Scheduler.cpp @@ -378,26 +378,4 @@ namespace Kernel } } - bool Scheduler::is_valid_tid(pid_t tid) - { - CriticalScope _; - - if (s_instance == nullptr) - return tid == 0; - - for (auto& thread : s_instance->m_active_threads) - if (thread.thread->tid() == tid) - return true; - - for (auto& thread : s_instance->m_sleeping_threads) - if (thread.thread->tid() == tid) - return true; - - for (auto& thread : s_instance->m_blocking_threads) - if (thread.thread->tid() == tid) - return true; - - return false; - } - -} \ No newline at end of file +} diff --git a/kernel/kernel/SpinLock.cpp b/kernel/kernel/SpinLock.cpp index f5eb66cf..7f9964ab 100644 --- a/kernel/kernel/SpinLock.cpp +++ b/kernel/kernel/SpinLock.cpp @@ -13,7 +13,7 @@ namespace Kernel { CriticalScope _; ASSERT(m_locker != tid); - if (m_locker == -1 || !Scheduler::is_valid_tid(m_locker)) + if (m_locker == -1) { m_locker = tid; break; @@ -48,7 +48,7 @@ namespace Kernel m_lock_depth++; break; } - if (m_locker == -1 || !Scheduler::is_valid_tid(m_locker)) + if (m_locker == -1) { m_locker = tid; m_lock_depth = 1;