bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH hurd] Only use host_get_kernel_version and default_pager_pagi


From: Samuel Thibault
Subject: Re: [PATCH hurd] Only use host_get_kernel_version and default_pager_paging_storage_new in x86_64.
Date: Thu, 11 May 2023 01:31:09 +0200
User-agent: NeoMutt/20170609 (1.8.3)

Applied, thanks!

Flavio Cruz, le mer. 10 mai 2023 01:00:45 -0400, a ecrit:
> Also fixed the implementation of default_pager_paging_storage_new in proxy
> def pager to call into default_pager_paging_storage_new.
> 
> We can fast track the simplification of the RPC ABI for x86_64 if we don't 
> have
> MACH_MSG_TYPE_STRING used in RPCs which forces msgt_size to use more than 8
> bits.
> ---
>  hurd/default_pager.defs |  4 ++++
>  mach-defpager/setup.c   | 10 ++++++----
>  proc/host.c             |  3 +++
>  sutils/swapon.c         |  3 +++
>  trans/proxy-defpager.c  | 30 +++++++++++++++++++++++-------
>  5 files changed, 39 insertions(+), 11 deletions(-)
> 
> diff --git a/hurd/default_pager.defs b/hurd/default_pager.defs
> index 3ca34fc4..bb893d0a 100644
> --- a/hurd/default_pager.defs
> +++ b/hurd/default_pager.defs
> @@ -69,6 +69,9 @@ skip;                               /* 
> default_pager_paging_file */
>  
>  skip;                                /* default_pager_register_fileserver */
>  
> +#ifdef __x86_64__
> +skip;  /* default_pager_paging_storage */
> +#else
>  /* Deprecated RPC to add or remove an area of paging storage.
>   * Was superseded in favor of default_pager_paging_storage_new which
>   * uses the correct type for default_pager_filename_t using c_string.
> @@ -80,6 +83,7 @@ routine default_pager_paging_storage(
>                      array[] of recnum_t;
>               name                    : default_pager_filename_t;
>               add                     : boolean_t);
> +#endif
>  
>  /* This call is made on a memory object returned by 
> default_pager_object_create
>     to fix the object's maximum size.  Any references to pages beyond the 
> limit
> diff --git a/mach-defpager/setup.c b/mach-defpager/setup.c
> index b09642e3..e928dcc2 100644
> --- a/mach-defpager/setup.c
> +++ b/mach-defpager/setup.c
> @@ -40,7 +40,7 @@ int page_aligned (vm_offset_t num)
>  extern mach_port_t default_pager_default_port; /* default_pager.c */
>  
>  kern_return_t
> -S_default_pager_paging_storage (mach_port_t pager,
> +S_default_pager_paging_storage_new (mach_port_t pager,
>                               mach_port_t device,
>                               const recnum_t *runs, mach_msg_type_number_t 
> nrun,
>                               const_default_pager_filename_t name,
> @@ -100,16 +100,18 @@ S_default_pager_paging_storage (mach_port_t pager,
>    return 0;
>  }
>  
> +#ifndef __x86_64__
>  kern_return_t
> -S_default_pager_paging_storage_new (mach_port_t pager,
> +S_default_pager_paging_storage (mach_port_t pager,
>                               mach_port_t device,
>                               const recnum_t *runs, mach_msg_type_number_t 
> nrun,
>                               const_default_pager_filename_t name,
>                               boolean_t add)
>  {
> -  return S_default_pager_paging_storage (pager,
> -      device, runs, nrun, name, add);
> +  return S_default_pager_paging_storage_new (pager, device, runs, nrun, name,
> +                                             add);
>  }
> +#endif
>  
>  /* Called to read a page from backing store.  */
>  int
> diff --git a/proc/host.c b/proc/host.c
> index e9f36f51..e2942f8e 100644
> --- a/proc/host.c
> +++ b/proc/host.c
> @@ -364,11 +364,14 @@ initialize_version_info (void)
>    server_versions_nalloc = 10;
>  
>    err = host_get_kernel_version (mach_host_self (), kv);
> +#ifndef __x86_64__
> +  /* We don't support host_kernel_version for x86_64. */
>    if (err == MIG_BAD_ID)
>      {
>        /* Delete after some time. */
>        err = host_kernel_version (mach_host_self (), kv);
>      }
> +#endif
>    assert_backtrace (! err);
>    /* Make sure the result is null-terminated, as the kernel doesn't
>       guarantee it.  */
> diff --git a/sutils/swapon.c b/sutils/swapon.c
> index 30e2e2d6..6e3d64a4 100644
> --- a/sutils/swapon.c
> +++ b/sutils/swapon.c
> @@ -411,11 +411,14 @@ swaponoff (const char *file, int add, int 
> skipnotexisting)
>      }
>    err = default_pager_paging_storage_new (def_pager, store->port,
>                                         runs, j, file, add);
> +#ifndef __x86_64__
> +  /* We don't support default_pager_paging_storage in 64 bits. */
>    if (err == MIG_BAD_ID || err == EOPNOTSUPP)
>      {
>        err = default_pager_paging_storage (def_pager, store->port,
>                                         runs, j, file, add);
>      }
> +#endif
>  
>    store_free (store);
>  
> diff --git a/trans/proxy-defpager.c b/trans/proxy-defpager.c
> index 5d952546..e44db152 100644
> --- a/trans/proxy-defpager.c
> +++ b/trans/proxy-defpager.c
> @@ -100,28 +100,44 @@ S_default_pager_object_pages (mach_port_t default_pager,
>  }
>  
>  kern_return_t
> -S_default_pager_paging_storage (mach_port_t default_pager,
> +S_default_pager_paging_storage_new (mach_port_t default_pager,
>                               mach_port_t device,
>                               const recnum_t *runs, mach_msg_type_number_t 
> nruns,
>                               const_default_pager_filename_t name,
>                               boolean_t add)
>  {
> -  return allowed (default_pager, O_WRITE)
> -    ?: default_pager_paging_storage (real_defpager, dev_master,
> -                                  runs, nruns, name, add)
> -    ?: mach_port_deallocate (mach_task_self (), device);
> +  error_t err = allowed (default_pager, O_WRITE);
> +  if (err)
> +    return err;
> +
> +  err = default_pager_paging_storage_new (real_defpager, dev_master,
> +                                          runs, nruns, name, add);
> +#ifndef __x86_64__
> +  if (err == MIG_BAD_ID || err == EOPNOTSUPP)
> +    {
> +      err = default_pager_paging_storage (real_defpager, dev_master,
> +                                          runs, nruns, name, add);
> +    }
> +#endif
> +
> +  if (err)
> +    return err;
> +
> +  mach_port_deallocate (mach_task_self (), device);
>  }
>  
> +#ifndef __x86_64__
>  kern_return_t
> -S_default_pager_paging_storage_new (mach_port_t default_pager,
> +S_default_pager_paging_storage (mach_port_t default_pager,
>                               mach_port_t device,
>                               const recnum_t *runs, mach_msg_type_number_t 
> nruns,
>                               const_default_pager_filename_t name,
>                               boolean_t add)
>  {
> -  return S_default_pager_paging_storage (default_pager,
> +  return S_default_pager_paging_storage_new (default_pager,
>        device, runs, nruns, name, add);
>  }
> +#endif
>  
>  kern_return_t
>  S_default_pager_object_set_size (mach_port_t memory_object,
> -- 
> 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

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