Browse Source

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 năm trước cách đây
mục cha
commit
1a08694dfc

+ 1 - 1
Kernel/API/Syscall.h

@@ -155,7 +155,7 @@ enum class NeedsBigProcessLock {
     S(get_process_name, NeedsBigProcessLock::Yes)           \
     S(get_process_name, NeedsBigProcessLock::Yes)           \
     S(fchdir, NeedsBigProcessLock::Yes)                     \
     S(fchdir, NeedsBigProcessLock::Yes)                     \
     S(getrandom, NeedsBigProcessLock::No)                   \
     S(getrandom, NeedsBigProcessLock::No)                   \
-    S(getkeymap, NeedsBigProcessLock::Yes)                  \
+    S(getkeymap, NeedsBigProcessLock::No)                   \
     S(setkeymap, NeedsBigProcessLock::Yes)                  \
     S(setkeymap, NeedsBigProcessLock::Yes)                  \
     S(clock_gettime, NeedsBigProcessLock::Yes)              \
     S(clock_gettime, NeedsBigProcessLock::Yes)              \
     S(clock_settime, 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)
 KResultOr<FlatPtr> Process::sys$getkeymap(Userspace<const Syscall::SC_getkeymap_params*> user_params)
 {
 {
+    VERIFY_NO_PROCESS_BIG_LOCK(this);
     REQUIRE_PROMISE(getkeymap);
     REQUIRE_PROMISE(getkeymap);
 
 
     Syscall::SC_getkeymap_params params;
     Syscall::SC_getkeymap_params params;