summaryrefslogtreecommitdiff
path: root/kern/thread.c
diff options
context:
space:
mode:
authorFlavio Cruz <flaviocruz@gmail.com>2023-03-13 01:42:12 -0400
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-03-13 20:42:03 +0100
commit5ff6ff2707b7b482efc9e172c87bd5c4106d9ed4 (patch)
tree68abe2ad4b92c47deebb23bdcd54eb359d9921a9 /kern/thread.c
parentf72cc8c81afe03667cc1ee70169ed343a40f4578 (diff)
Track task and thread time using time_value64_t.
Changed kern/timer.c to use the higher precision time_value64_t. Of course, this won't suffer from the 2038 overflow but it does provide nanosecond precision (if gnumach ever uses a better timer) and moves us closer to only having time_value64_t. Message-Id: <ZA63tGcv3bETUJFJ@jupiter.tail36e24.ts.net>
Diffstat (limited to 'kern/thread.c')
-rw-r--r--kern/thread.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/kern/thread.c b/kern/thread.c
index 4a6b9eda..392d38f8 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -592,7 +592,7 @@ void thread_deallocate(
task_t task;
processor_set_t pset;
- time_value_t user_time, system_time;
+ time_value64_t user_time, system_time;
if (thread == THREAD_NULL)
return;
@@ -669,8 +669,8 @@ void thread_deallocate(
* Accumulate times for dead threads in task.
*/
thread_read_times(thread, &user_time, &system_time);
- time_value_add(&task->total_user_time, &user_time);
- time_value_add(&task->total_system_time, &system_time);
+ time_value64_add(&task->total_user_time, &user_time);
+ time_value64_add(&task->total_system_time, &system_time);
/*
* Remove thread from task list and processor_set threads list.
@@ -1522,13 +1522,16 @@ kern_return_t thread_info(
/* fill in info */
- thread_read_times_rpc(thread,
- &basic_info->user_time,
- &basic_info->system_time);
+ time_value64_t user_time, system_time;
+ thread_read_times(thread, &user_time, &system_time);
+ TIME_VALUE64_TO_TIME_VALUE(&user_time, &basic_info->user_time);
+ TIME_VALUE64_TO_TIME_VALUE(&system_time, &basic_info->system_time);
+
basic_info->base_priority = thread->priority;
basic_info->cur_priority = thread->sched_pri;
- read_time_stamp(&thread->creation_time,
- &basic_info->creation_time);
+ time_value64_t creation_time;
+ read_time_stamp(&thread->creation_time, &creation_time);
+ TIME_VALUE64_TO_TIME_VALUE(&creation_time, &basic_info->creation_time);
/*
* To calculate cpu_usage, first correct for timer rate,