diff --git a/Kernel/API/Syscall.h b/Kernel/API/Syscall.h index f86cf7788c..bd0f4a48c3 100644 --- a/Kernel/API/Syscall.h +++ b/Kernel/API/Syscall.h @@ -188,7 +188,7 @@ enum class NeedsBigProcessLock { S(symlink, NeedsBigProcessLock::No) \ S(sync, NeedsBigProcessLock::No) \ S(sysconf, NeedsBigProcessLock::No) \ - S(times, NeedsBigProcessLock::Yes) \ + S(times, NeedsBigProcessLock::No) \ S(umask, NeedsBigProcessLock::No) \ S(umount, NeedsBigProcessLock::Yes) \ S(uname, NeedsBigProcessLock::No) \ diff --git a/Kernel/Process.h b/Kernel/Process.h index dbcc335d61..90ee2cbba8 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -465,11 +465,10 @@ public: const TTY* tty() const { return m_tty; } void set_tty(TTY*); - u32 m_ticks_in_user { 0 }; - u32 m_ticks_in_kernel { 0 }; - - u32 m_ticks_in_user_for_dead_children { 0 }; - u32 m_ticks_in_kernel_for_dead_children { 0 }; + clock_t m_ticks_in_user { 0 }; + clock_t m_ticks_in_kernel { 0 }; + clock_t m_ticks_in_user_for_dead_children { 0 }; + clock_t m_ticks_in_kernel_for_dead_children { 0 }; NonnullRefPtr current_directory(); RefPtr executable(); diff --git a/Kernel/Syscalls/times.cpp b/Kernel/Syscalls/times.cpp index 90993bf054..8c8858896a 100644 --- a/Kernel/Syscalls/times.cpp +++ b/Kernel/Syscalls/times.cpp @@ -11,8 +11,11 @@ namespace Kernel { ErrorOr Process::sys$times(Userspace user_times) { - VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); + VERIFY_NO_PROCESS_BIG_LOCK(this); TRY(require_promise(Pledge::stdio)); + + // There's no lock here, as it seems harmless to report intermediate values + // as long as each individual counter is intact. tms times = {}; times.tms_utime = m_ticks_in_user; times.tms_stime = m_ticks_in_kernel;