mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
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.
This commit is contained in:
parent
3c7a0ef1ac
commit
f6eb155167
Notes:
sideshowbarker
2024-07-17 02:22:23 +09:00
Author: https://github.com/hjalves Commit: https://github.com/SerenityOS/serenity/commit/f6eb155167 Pull-request: https://github.com/SerenityOS/serenity/pull/17154 Reviewed-by: https://github.com/linusg
3 changed files with 12 additions and 10 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -237,6 +237,12 @@ Time TimeManagement::boot_time()
|
|||
#endif
|
||||
}
|
||||
|
||||
Time TimeManagement::clock_resolution() const
|
||||
{
|
||||
long nanoseconds_per_tick = 1'000'000'000 / m_time_keeper_timer->ticks_per_second();
|
||||
return Time::from_nanoseconds(nanoseconds_per_tick);
|
||||
}
|
||||
|
||||
UNMAP_AFTER_INIT TimeManagement::TimeManagement()
|
||||
: m_time_page_region(MM.allocate_kernel_region(PAGE_SIZE, "Time page"sv, Memory::Region::Access::ReadWrite, AllocationStrategy::AllocateNow).release_value_but_fixme_should_propagate_errors())
|
||||
{
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
void set_epoch_time(Time);
|
||||
time_t ticks_per_second() const;
|
||||
static Time boot_time();
|
||||
Time clock_resolution() const;
|
||||
|
||||
bool is_system_timer(HardwareTimerBase const&) const;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue