Serenity Operating System
1/*
2 * Copyright (c) 2022, Lucas Chollet <lucas.chollet@free.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <Kernel/Process.h>
8#include <Kernel/Time/TimeManagement.h>
9
10namespace Kernel {
11
12ErrorOr<FlatPtr> Process::sys$getrusage(int who, Userspace<rusage*> user_usage)
13{
14 VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
15
16 rusage usage {};
17
18 auto const ticks_per_second = TimeManagement::the().ticks_per_second();
19
20 switch (who) {
21 case RUSAGE_SELF:
22 usage.ru_utime = Time::from_ticks(m_ticks_in_user, ticks_per_second).to_timeval();
23 usage.ru_stime = Time::from_ticks(m_ticks_in_kernel, ticks_per_second).to_timeval();
24 break;
25 case RUSAGE_CHILDREN:
26 usage.ru_utime = Time::from_ticks(m_ticks_in_user_for_dead_children, ticks_per_second).to_timeval();
27 usage.ru_stime = Time::from_ticks(m_ticks_in_kernel_for_dead_children, ticks_per_second).to_timeval();
28 break;
29 default:
30 return EINVAL;
31 }
32
33 TRY(copy_to_user(user_usage, &usage));
34
35 return 0;
36}
37
38}