mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:57:43 +00:00
Kernel+LibC: Allow clock_gettime() to run without syscalls
This patch adds a vDSO-like mechanism for exposing the current time as an array of per-clock-source timestamps. LibC's clock_gettime() calls sys$map_time_page() to map the kernel's "time page" into the process address space (at a random address, ofc.) This is only done on first call, and from then on the timestamps are fetched from the time page. This first patch only adds support for CLOCK_REALTIME, but eventually we should be able to support all clock sources this way and get rid of sys$clock_gettime() in the kernel entirely. :^) Accesses are synchronized using two atomic integers that are incremented at the start and finish of the kernel's time page update cycle.
This commit is contained in:
parent
f02d73db4d
commit
fdfc66db61
7 changed files with 117 additions and 0 deletions
|
@ -412,6 +412,7 @@ public:
|
|||
KResultOr<FlatPtr> sys$anon_create(size_t, int options);
|
||||
KResultOr<FlatPtr> sys$statvfs(Userspace<const Syscall::SC_statvfs_params*> user_params);
|
||||
KResultOr<FlatPtr> sys$fstatvfs(int fd, statvfs* buf);
|
||||
KResultOr<FlatPtr> sys$map_time_page();
|
||||
|
||||
template<bool sockname, typename Params>
|
||||
int get_sock_or_peer_name(const Params&);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue