From 5759ea19fb52d678872999936e6a215e963b30d5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 3 Apr 2023 13:19:11 +0200 Subject: [PATCH] Kernel: Mark sys$alarm as not needing the big lock Access to Process::m_alarm_timer is serialized via SpinlockProtected, so there's no longer need for this syscall to use the big lock. --- Kernel/API/Syscall.h | 2 +- Kernel/Syscalls/alarm.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index 8e19dbd2be..4134eb0cc2 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -47,7 +47,7 @@ enum class NeedsBigProcessLock { #define ENUMERATE_SYSCALLS(S) \ S(accept4, NeedsBigProcessLock::No) \ S(adjtime, NeedsBigProcessLock::No) \ - S(alarm, NeedsBigProcessLock::Yes) \ + S(alarm, NeedsBigProcessLock::No) \ S(allocate_tls, NeedsBigProcessLock::Yes) \ S(anon_create, NeedsBigProcessLock::No) \ S(annotate_mapping, NeedsBigProcessLock::No) \ diff --git a/Kernel/Syscalls/alarm.cpp b/Kernel/Syscalls/alarm.cpp index c73458d482..66ddc5211a 100644 --- a/Kernel/Syscalls/alarm.cpp +++ b/Kernel/Syscalls/alarm.cpp @@ -12,10 +12,10 @@ namespace Kernel { ErrorOr Process::sys$alarm(unsigned seconds) { - VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); + VERIFY_NO_PROCESS_BIG_LOCK(this); TRY(require_promise(Pledge::stdio)); - unsigned previous_alarm_remaining = 0; return m_alarm_timer.with([&](auto& timer) -> ErrorOr { + unsigned previous_alarm_remaining = 0; if (timer) { bool was_in_use = false; if (TimerQueue::the().cancel_timer(*timer, &was_in_use)) {