On Mon, Mar 13, 2023 at 3:32 PM Samuel Thibault <samuel.thiba...@gnu.org> wrote:
> Hello, > > Flavio Cruz, le lun. 13 mars 2023 01:41:57 -0400, a ecrit: > > 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. > > Applied, thanks! > > The hurd repository will want an update to host_get_kernel_version :) > Indeed. Looking at this patch again, I could probably just redefine host_get_boot_info and skip the existing msg Id since the RPC is not used anywhere. > > It seems that default_pager_filename_t (in default_pager_paging_file), > symtab_name_t (in host_load_symbol_table), and dev_name_t (in > device_open) are also using MACH_MSG_TYPE_STRING_C? > Those should be changed too, but these two types were the ones that actually overflow the msgt_size limit of 255. For the 64bit ABI I want to use the existing msgt_size bits for mach_msg_type_long_t and delete msgtl_size. Still, at the end of the day we should only have two ways of defining strings, either through c_string or by using variable arrays as defined by data_t. > Samuel > > > --- > > 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 > > > > > > -- > Samuel > --- > Pour une évaluation indépendante, transparente et rigoureuse ! > Je soutiens la Commission d'Évaluation de l'Inria. >