diff options
author | Humberto Alves <hjalves@live.com> | 2023-02-20 21:06:29 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-02-21 01:00:06 +0100 |
commit | f6eb155167e8bca9fba9cddb88b39ab7b049ff5d (patch) | |
tree | 47ee0ecc7c72466f2e5147facc20910190b0a31b /Kernel/Syscalls | |
parent | 3c7a0ef1ac279c99bc4ee72085278ea70c210889 (diff) | |
download | serenity-f6eb155167e8bca9fba9cddb88b39ab7b049ff5d.zip |
Kernel: Support more clocks in sys$clock_getres()
Support all the available clocks in clock_getres(). Also, fix this
function to use the actual ticks per second value, not the constant
`_SC_CLK_TCK` (which is always equal to 8) and move the resolution
computation logic to TimeManagement.
Diffstat (limited to 'Kernel/Syscalls')
-rw-r--r-- | Kernel/Syscalls/clock.cpp | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/Kernel/Syscalls/clock.cpp b/Kernel/Syscalls/clock.cpp index 0f0f5d4d7e..8dc4571e71 100644 --- a/Kernel/Syscalls/clock.cpp +++ b/Kernel/Syscalls/clock.cpp @@ -98,16 +98,11 @@ ErrorOr<FlatPtr> Process::sys$clock_getres(Userspace<Syscall::SC_clock_getres_pa { VERIFY_NO_PROCESS_BIG_LOCK(this); auto params = TRY(copy_typed_from_user(user_params)); - timespec ts {}; - switch (params.clock_id) { - case CLOCK_REALTIME: - ts.tv_sec = 0; - ts.tv_nsec = 1000000000 / _SC_CLK_TCK; - TRY(copy_to_user(params.result, &ts)); - break; - default: - return EINVAL; - } + + TRY(TimeManagement::validate_clock_id(params.clock_id)); + + auto ts = TimeManagement::the().clock_resolution().to_timespec(); + TRY(copy_to_user(params.result, &ts)); return 0; } |