Jelajahi Sumber

Kernel: Disable big process lock for sys$clock_gettime()

This syscall doesn't touch any intra-process shared resources and
reads the time via the atomic TimeManagement::current_time, so it
doesn't need to hold any lock.
Idan Horowitz 4 tahun lalu
induk
melakukan
fbd848e6eb
2 mengubah file dengan 2 tambahan dan 2 penghapusan
  1. 1 1
      Kernel/API/Syscall.h
  2. 1 1
      Kernel/Syscalls/clock.cpp

+ 1 - 1
Kernel/API/Syscall.h

@@ -157,7 +157,7 @@ enum class NeedsBigProcessLock {
     S(getrandom, NeedsBigProcessLock::No)                   \
     S(getkeymap, NeedsBigProcessLock::No)                   \
     S(setkeymap, NeedsBigProcessLock::Yes)                  \
-    S(clock_gettime, NeedsBigProcessLock::Yes)              \
+    S(clock_gettime, NeedsBigProcessLock::No)               \
     S(clock_settime, NeedsBigProcessLock::Yes)              \
     S(clock_nanosleep, NeedsBigProcessLock::Yes)            \
     S(join_thread, NeedsBigProcessLock::Yes)                \

+ 1 - 1
Kernel/Syscalls/clock.cpp

@@ -12,7 +12,7 @@ namespace Kernel {
 
 KResultOr<FlatPtr> Process::sys$clock_gettime(clockid_t clock_id, Userspace<timespec*> user_ts)
 {
-    VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
+    VERIFY_NO_PROCESS_BIG_LOCK(this);
     REQUIRE_PROMISE(stdio);
 
     if (!TimeManagement::is_valid_clock_id(clock_id))