bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH gnumach] Use c_string to define host_get_kernel_version and host_


From: Flavio Cruz
Subject: [PATCH gnumach] Use c_string to define host_get_kernel_version and host_get_kernel_boot_info.
Date: Mon, 13 Mar 2023 01:41:57 -0400

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.
---
 doc/mach.texi                |  8 ++++----
 include/mach/mach_host.defs  | 16 ++++++++++++++++
 include/mach/mach_types.defs |  4 ++++
 kern/host.c                  |  8 ++++++++
 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);
+}
-- 
2.39.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]