瀏覽代碼

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.
Idan Horowitz 4 年之前
父節點
當前提交
1a08694dfc
共有 2 個文件被更改,包括 2 次插入1 次删除
  1. 1 1
      Kernel/API/Syscall.h
  2. 1 0
      Kernel/Syscalls/keymap.cpp

+ 1 - 1
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)              \

+ 1 - 0
Kernel/Syscalls/keymap.cpp

@@ -48,6 +48,7 @@ KResultOr<FlatPtr> Process::sys$setkeymap(Userspace<const Syscall::SC_setkeymap_
 
 KResultOr<FlatPtr> Process::sys$getkeymap(Userspace<const Syscall::SC_getkeymap_params*> user_params)
 {
+    VERIFY_NO_PROCESS_BIG_LOCK(this);
     REQUIRE_PROMISE(getkeymap);
 
     Syscall::SC_getkeymap_params params;