diff options
author | Flavio Cruz <flaviocruz@gmail.com> | 2023-03-13 01:41:57 -0400 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-03-13 20:26:26 +0100 |
commit | 5447f965f1e109f7ac9aeb91c0e3906969a4adb8 (patch) | |
tree | b3571bc9da00758100f7bbe8d1a886948933173c | |
parent | bba59e0f7a3cf1a008325b7919e9eb8a170c7c0a (diff) | |
download | gnumach-5447f965f1e109f7ac9aeb91c0e3906969a4adb8.tar.gz gnumach-5447f965f1e109f7ac9aeb91c0e3906969a4adb8.tar.bz2 gnumach-5447f965f1e109f7ac9aeb91c0e3906969a4adb8.zip |
Use c_string to define host_get_kernel_version and host_get_kernel_boot_info.
The existing definitions for kernel_version_t and kernel_boot_info_t use
(MACH_MSG_TYPE_STRING, length*8) which result in message types that have
a single element of 512 or 4096 bytes (set as msgt_size). This results
in MiG generating mach_msg_type_long_t. Using c_string has the benefit
of moving this size to be defined as msgt_number which doesn't overflow.
This will allow us to simplify the 64 bit RPC ABI since all msgt_size can
be defined with just 8 bits (as it should be expected).
The resulting implementation is the same but we still need to define new
RPCs since server and user expect different mach_msg_type_t.
Message-Id: <ZA63pS8j9J6NwuXY@jupiter.tail36e24.ts.net>
-rw-r--r-- | doc/mach.texi | 8 | ||||
-rw-r--r-- | include/mach/mach_host.defs | 16 | ||||
-rw-r--r-- | include/mach/mach_types.defs | 4 | ||||
-rw-r--r-- | kern/host.c | 8 | ||||
-rw-r--r-- | kern/machine.c | 8 |
5 files changed, 40 insertions, 4 deletions
diff --git a/doc/mach.texi b/doc/mach.texi index 3fdba3fc..2c22fa38 100644 --- a/doc/mach.texi +++ b/doc/mach.texi @@ -5577,8 +5577,8 @@ The minimum quantum and unit of quantum in milliseconds. This is a pointer to a @code{struct host_sched_info}. @end deftp -@deftypefun kern_return_t host_kernel_version (@w{host_t @var{host}}, @w{kernel_version_t *@var{version}}) -The @code{host_kernel_version} function returns the version string +@deftypefun kern_return_t host_get_kernel_version (@w{host_t @var{host}}, @w{kernel_version_t *@var{version}}) +The @code{host_get_kernel_version} function returns the version string compiled into the kernel executing on @var{host} at the time it was built in the character string @var{version}. This string describes the version of the kernel. The constant @code{KERNEL_VERSION_MAX} should be @@ -5595,8 +5595,8 @@ inaccessible memory, it returns @code{KERN_INVALID_ADDRESS}, and @code{KERN_SUCCESS} otherwise. @end deftypefun -@deftypefun kern_return_t host_get_boot_info (@w{host_priv_t @var{host_priv}}, @w{kernel_boot_info_t @var{boot_info}}) -The @code{host_get_boot_info} function returns the boot-time information +@deftypefun kern_return_t host_get_kernel_boot_info (@w{host_priv_t @var{host_priv}}, @w{kernel_boot_info_t @var{boot_info}}) +The @code{host_get_kernel_boot_info} function returns the boot-time information string supplied by the operator to the kernel executing on @var{host_priv} in the character string @var{boot_info}. The constant @code{KERNEL_BOOT_INFO_MAX} should be used to dimension storage for the diff --git a/include/mach/mach_host.defs b/include/mach/mach_host.defs index 223f4576..99b48b4b 100644 --- a/include/mach/mach_host.defs +++ b/include/mach/mach_host.defs @@ -163,6 +163,7 @@ routine task_get_assignment( /* * Get string describing current kernel version. + * Deprecated, use host_get_kernel_version. */ routine host_kernel_version( host : host_t; @@ -348,6 +349,7 @@ routine processor_control( /* * Get boot configuration information from kernel. + * Deprecated, use host_get_kernel_boot_info. */ routine host_get_boot_info( host_priv : host_priv_t; @@ -378,3 +380,17 @@ routine host_adjust_time64( host_priv : host_priv_t; in new_adjustment : time_value64_t; out old_adjustment : time_value64_t); + +/* + * Get string describing current kernel version. + */ +routine host_get_kernel_version( + host : host_t; + out kernel_version : new_kernel_version_t); + +/* + * Get boot configuration information from kernel. + */ +routine host_get_kernel_boot_info( + host_priv : host_priv_t; + out boot_info : new_kernel_boot_info_t); diff --git a/include/mach/mach_types.defs b/include/mach/mach_types.defs index 8f22137a..e02e3e8a 100644 --- a/include/mach/mach_types.defs +++ b/include/mach/mach_types.defs @@ -256,8 +256,12 @@ type processor_set_name_array_t = ^array[] of processor_set_name_t; type processor_set_info_t = array[*:1024] of integer_t; type kernel_version_t = (MACH_MSG_TYPE_STRING, 512*8); +type new_kernel_version_t = c_string[512] + ctype: kernel_version_t; type kernel_boot_info_t = (MACH_MSG_TYPE_STRING, 4096*8); +type new_kernel_boot_info_t = c_string[4096] + ctype: kernel_boot_info_t; type rpc_time_value_t = struct { rpc_long_integer_t seconds; diff --git a/kern/host.c b/kern/host.c index 7ce8edff..50f58e9c 100644 --- a/kern/host.c +++ b/kern/host.c @@ -219,6 +219,14 @@ kern_return_t host_kernel_version( return KERN_SUCCESS; } +/* Same as above */ +kern_return_t host_get_kernel_version( + const host_t host, + kernel_version_t out_version) +{ + return host_kernel_version(host, out_version); +} + /* * host_processor_sets: * diff --git a/kern/machine.c b/kern/machine.c index bf9677c9..c9e368a0 100644 --- a/kern/machine.c +++ b/kern/machine.c @@ -674,3 +674,11 @@ host_get_boot_info( (void) strncpy(boot_info, src, KERNEL_BOOT_INFO_MAX); return KERN_SUCCESS; } + +kern_return_t +host_get_kernel_boot_info( + host_t priv_host, + kernel_boot_info_t boot_info) +{ + return host_get_boot_info(priv_host, boot_info); +} |