2022-01-31 18:09:30 -03:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2022, Lucas Chollet <lucas.chollet@free.org>
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
|
*/
|
|
|
|
|
|
2023-02-24 14:45:37 -03:00
|
|
|
#include <Kernel/Tasks/Process.h>
|
2023-02-20 12:41:04 -03:00
|
|
|
#include <Kernel/Time/TimeManagement.h>
|
2022-01-31 18:09:30 -03:00
|
|
|
|
|
|
|
|
namespace Kernel {
|
|
|
|
|
|
|
|
|
|
ErrorOr<FlatPtr> Process::sys$getrusage(int who, Userspace<rusage*> user_usage)
|
|
|
|
|
{
|
2023-04-03 13:29:13 -03:00
|
|
|
VERIFY_NO_PROCESS_BIG_LOCK(this);
|
2022-01-31 18:09:30 -03:00
|
|
|
|
|
|
|
|
rusage usage {};
|
|
|
|
|
|
|
|
|
|
auto const ticks_per_second = TimeManagement::the().ticks_per_second();
|
|
|
|
|
|
|
|
|
|
switch (who) {
|
|
|
|
|
case RUSAGE_SELF:
|
2023-03-13 12:30:34 -03:00
|
|
|
usage.ru_utime = Duration::from_ticks(m_ticks_in_user, ticks_per_second).to_timeval();
|
|
|
|
|
usage.ru_stime = Duration::from_ticks(m_ticks_in_kernel, ticks_per_second).to_timeval();
|
2022-01-31 18:09:30 -03:00
|
|
|
break;
|
|
|
|
|
case RUSAGE_CHILDREN:
|
2023-03-13 12:30:34 -03:00
|
|
|
usage.ru_utime = Duration::from_ticks(m_ticks_in_user_for_dead_children, ticks_per_second).to_timeval();
|
|
|
|
|
usage.ru_stime = Duration::from_ticks(m_ticks_in_kernel_for_dead_children, ticks_per_second).to_timeval();
|
2022-01-31 18:09:30 -03:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return EINVAL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TRY(copy_to_user(user_usage, &usage));
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|