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.
>

Reply via email to