From f9a76508ab2e0b54af753fb017838857a059b3c6 Mon Sep 17 00:00:00 2001 From: Flavio Cruz Date: Mon, 17 Apr 2023 00:46:36 -0400 Subject: Update task_basic_info and thread_basic_info to include time_value64_t data. RPCs remain compatible with existing clients but if they know about the new size then we will populate the new fields. Message-Id: --- kern/thread.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'kern/thread.c') diff --git a/kern/thread.c b/kern/thread.c index 392d38f8..20c11024 100644 --- a/kern/thread.c +++ b/kern/thread.c @@ -1501,11 +1501,12 @@ kern_return_t thread_info( if (flavor == THREAD_BASIC_INFO) { thread_basic_info_t basic_info; - /* Allow *thread_info_count to be one smaller than the - usual amount, because creation_time is a new member - that some callers might not know about. */ + /* Allow *thread_info_count to be smaller than the provided amount + * that does not contain the new time_value64_t fields as some + * callers might not know about them yet. */ - if (*thread_info_count < THREAD_BASIC_INFO_COUNT - 1) + if (*thread_info_count < + THREAD_BASIC_INFO_COUNT - 3 * sizeof(time_value64_t)/sizeof(natural_t)) return KERN_INVALID_ARGUMENT; basic_info = (thread_basic_info_t) thread_info_out; @@ -1533,6 +1534,13 @@ kern_return_t thread_info( read_time_stamp(&thread->creation_time, &creation_time); TIME_VALUE64_TO_TIME_VALUE(&creation_time, &basic_info->creation_time); + if (*thread_info_count == THREAD_BASIC_INFO_COUNT) { + /* Copy new time_value64_t fields */ + basic_info->user_time64 = user_time; + basic_info->system_time64 = user_time; + basic_info->creation_time64 = creation_time; + } + /* * To calculate cpu_usage, first correct for timer rate, * then for 5/8 ageing. The correction factor [3/5] is -- cgit v1.2.3