aboutsummaryrefslogtreecommitdiff
path: root/trans/proxy-defpager.c
diff options
context:
space:
mode:
authorFlavio Cruz <flaviocruz@gmail.com>2023-05-10 01:00:45 -0400
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-05-11 01:30:52 +0200
commitc1d219c066a5fbf6a6a4c3139f64954dbf12fd02 (patch)
treec3f39389796b8fb7cb8e044716c2307bbef53487 /trans/proxy-defpager.c
parent50888737e48bab04a2c1290226249db927a60b4b (diff)
downloadhurd-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.c30
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,