diff options
author | Flavio Cruz <flaviocruz@gmail.com> | 2023-05-10 01:00:45 -0400 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-05-11 01:30:52 +0200 |
commit | c1d219c066a5fbf6a6a4c3139f64954dbf12fd02 (patch) | |
tree | c3f39389796b8fb7cb8e044716c2307bbef53487 /trans/proxy-defpager.c | |
parent | 50888737e48bab04a2c1290226249db927a60b4b (diff) | |
download | hurd-c1d219c066a5fbf6a6a4c3139f64954dbf12fd02.tar.gz hurd-c1d219c066a5fbf6a6a4c3139f64954dbf12fd02.tar.bz2 hurd-c1d219c066a5fbf6a6a4c3139f64954dbf12fd02.zip |
Only use host_get_kernel_version and default_pager_paging_storage_new in x86_64.
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.
Message-Id: <ZFsk/W+slpAZyTG1@jupiter.tail36e24.ts.net>
Diffstat (limited to 'trans/proxy-defpager.c')
-rw-r--r-- | trans/proxy-defpager.c | 30 |
1 files changed, 23 insertions, 7 deletions
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, |