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.