From 1a08694dfc6a2f0b3ff934ba43f6aab591bc1e41 Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Fri, 6 Aug 2021 14:47:26 +0300 Subject: [PATCH] Kernel: Disable big process lock for sys$getkeymap This syscall only reads non process-related global values, and as such doesn't need to hold the big lock. --- Kernel/API/Syscall.h | 2 +- Kernel/Syscalls/keymap.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index 852a4653d5..f03d876974 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -155,7 +155,7 @@ enum class NeedsBigProcessLock { S(get_process_name, NeedsBigProcessLock::Yes) \ S(fchdir, NeedsBigProcessLock::Yes) \ S(getrandom, NeedsBigProcessLock::No) \ - S(getkeymap, NeedsBigProcessLock::Yes) \ + S(getkeymap, NeedsBigProcessLock::No) \ S(setkeymap, NeedsBigProcessLock::Yes) \ S(clock_gettime, NeedsBigProcessLock::Yes) \ S(clock_settime, NeedsBigProcessLock::Yes) \ diff --git a/Kernel/Syscalls/keymap.cpp b/Kernel/Syscalls/keymap.cpp index 0abe95413d..da76770568 100644 --- a/Kernel/Syscalls/keymap.cpp +++ b/Kernel/Syscalls/keymap.cpp @@ -48,6 +48,7 @@ KResultOr Process::sys$setkeymap(Userspace Process::sys$getkeymap(Userspace user_params) { + VERIFY_NO_PROCESS_BIG_LOCK(this); REQUIRE_PROMISE(getkeymap); Syscall::SC_getkeymap_params params;