Browse Source

Kernel: Disable big process lock for sys$gettimeofday

This syscall doesn't touch any intra-process shared resources and only
accesses the time via the atomic TimeManagement::now so there's no need
to hold the big lock.
Idan Horowitz 4 years ago
parent
commit
d40038a04f
2 changed files with 2 additions and 2 deletions
  1. 1 1
      Kernel/API/Syscall.h
  2. 1 1
      Kernel/Syscalls/clock.cpp

+ 1 - 1
Kernel/API/Syscall.h

@@ -64,7 +64,7 @@ enum class NeedsBigProcessLock {
     S(munmap, NeedsBigProcessLock::Yes)                     \
     S(get_dir_entries, NeedsBigProcessLock::Yes)            \
     S(getcwd, NeedsBigProcessLock::Yes)                     \
-    S(gettimeofday, NeedsBigProcessLock::Yes)               \
+    S(gettimeofday, NeedsBigProcessLock::No)                \
     S(gethostname, NeedsBigProcessLock::No)                 \
     S(sethostname, NeedsBigProcessLock::No)                 \
     S(chdir, NeedsBigProcessLock::Yes)                      \

+ 1 - 1
Kernel/Syscalls/clock.cpp

@@ -118,7 +118,7 @@ KResultOr<FlatPtr> Process::sys$adjtime(Userspace<const timeval*> user_delta, Us
 
 KResultOr<FlatPtr> Process::sys$gettimeofday(Userspace<timeval*> user_tv)
 {
-    VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
+    VERIFY_NO_PROCESS_BIG_LOCK(this);
     REQUIRE_PROMISE(stdio);
     auto tv = kgettimeofday().to_timeval();
     if (!copy_to_user(user_tv, &tv))