Ver Fonte

Kernel: Mark sys$sendfd() and sys$recvfd() as not needing the big lock

These syscalls already perform the necessary locking and don't rely on
the process big lock.
Andreas Kling há 3 anos atrás
pai
commit
bc4282c773
2 ficheiros alterados com 4 adições e 4 exclusões
  1. 2 2
      Kernel/API/Syscall.h
  2. 2 2
      Kernel/Syscalls/sendfd.cpp

+ 2 - 2
Kernel/API/Syscall.h

@@ -140,13 +140,13 @@ enum class NeedsBigProcessLock {
     S(readlink, NeedsBigProcessLock::No)                    \
     S(readv, NeedsBigProcessLock::Yes)                      \
     S(realpath, NeedsBigProcessLock::No)                    \
-    S(recvfd, NeedsBigProcessLock::Yes)                     \
+    S(recvfd, NeedsBigProcessLock::No)                      \
     S(recvmsg, NeedsBigProcessLock::Yes)                    \
     S(rename, NeedsBigProcessLock::Yes)                     \
     S(rmdir, NeedsBigProcessLock::Yes)                      \
     S(sched_getparam, NeedsBigProcessLock::Yes)             \
     S(sched_setparam, NeedsBigProcessLock::Yes)             \
-    S(sendfd, NeedsBigProcessLock::Yes)                     \
+    S(sendfd, NeedsBigProcessLock::No)                      \
     S(sendmsg, NeedsBigProcessLock::Yes)                    \
     S(set_coredump_metadata, NeedsBigProcessLock::Yes)      \
     S(set_mmap_name, NeedsBigProcessLock::Yes)              \

+ 2 - 2
Kernel/Syscalls/sendfd.cpp

@@ -12,7 +12,7 @@ namespace Kernel {
 
 ErrorOr<FlatPtr> Process::sys$sendfd(int sockfd, int fd)
 {
-    VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
+    VERIFY_NO_PROCESS_BIG_LOCK(this)
     TRY(require_promise(Pledge::sendfd));
     auto socket_description = TRY(open_file_description(sockfd));
     if (!socket_description->is_socket())
@@ -31,7 +31,7 @@ ErrorOr<FlatPtr> Process::sys$sendfd(int sockfd, int fd)
 
 ErrorOr<FlatPtr> Process::sys$recvfd(int sockfd, int options)
 {
-    VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
+    VERIFY_NO_PROCESS_BIG_LOCK(this)
     TRY(require_promise(Pledge::recvfd));
     auto socket_description = TRY(open_file_description(sockfd));
     if (!socket_description->is_socket())