From 18abba2c4d57485072254fb02e039f36aedeef47 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 21 Aug 2022 13:29:36 +0200 Subject: [PATCH] Kernel: Make sys$getppid() not take the big lock This only needs to access the process PPID, which is protected by the "protected data" lock. --- Kernel/API/Syscall.h | 2 +- Kernel/Syscalls/process.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index cf53d789f9..dd88bddd83 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -92,7 +92,7 @@ enum class NeedsBigProcessLock { S(getpgid, NeedsBigProcessLock::Yes) \ S(getpgrp, NeedsBigProcessLock::Yes) \ S(getpid, NeedsBigProcessLock::No) \ - S(getppid, NeedsBigProcessLock::Yes) \ + S(getppid, NeedsBigProcessLock::No) \ S(getrandom, NeedsBigProcessLock::No) \ S(getresgid, NeedsBigProcessLock::No) \ S(getresuid, NeedsBigProcessLock::No) \ diff --git a/Kernel/Syscalls/process.cpp b/Kernel/Syscalls/process.cpp index 338e05b413..612e8d8e67 100644 --- a/Kernel/Syscalls/process.cpp +++ b/Kernel/Syscalls/process.cpp @@ -18,9 +18,9 @@ ErrorOr Process::sys$getpid() ErrorOr Process::sys$getppid() { - VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); + VERIFY_NO_PROCESS_BIG_LOCK(this); TRY(require_promise(Pledge::stdio)); - return with_protected_data([](auto& protected_data) { return protected_data.ppid.value(); }); + return ppid().value(); } ErrorOr Process::sys$get_process_name(Userspace buffer, size_t buffer_size)