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