summaryrefslogtreecommitdiff
path: root/kern/thread.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-25 18:23:10 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-25 20:12:14 +0200
commit3db15a3f80f193826e144b1944727a65c13340fe (patch)
treef6eef1e163de6a5dccdc1067300c5fce333d722b /kern/thread.c
parentbb23879791cf015f17cb50b6443bac44b1cfbc72 (diff)
kern: add boot-time clock, use it for time stamps
The kernel keeps track of task and thread creation times by saving a time stamp. Previously, the real-time clock was used for this. When the real-time clock is changed, however, the reference frame for the time stamps is lost. This surfaced in Hurd systems reporting spuriously long uptimes. Fix this by creating a boot-time clock and use it as reference frame for the time stamps. * kern/mach_clock.c (clock_boottime_offset): Create clock by keeping track of the offset from the real-time. (clock_boottime_update): New function. (record_time_stamp): Use the boot-time clock for time stamps. (read_time_stamp): New function to convert it back to real-time. (host_set_time): Call `clock_boottime_update'. * kern/mach_clock.h (record_time_stamp): Amend comment. (read_time_stamp): New declaration. * kern/task.c (task_info): Use `read_time_stamp'. * kern/thread.c (thread_info): Likewise.
Diffstat (limited to 'kern/thread.c')
-rw-r--r--kern/thread.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kern/thread.c b/kern/thread.c
index 1f47553f..865a1cc4 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -1503,7 +1503,8 @@ kern_return_t thread_info(
&basic_info->system_time);
basic_info->base_priority = thread->priority;
basic_info->cur_priority = thread->sched_pri;
- basic_info->creation_time = thread->creation_time;
+ read_time_stamp(&thread->creation_time,
+ &basic_info->creation_time);
/*
* To calculate cpu_usage, first correct for timer rate,