summaryrefslogtreecommitdiff
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
parent50888737e48bab04a2c1290226249db927a60b4b (diff)
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>
-rw-r--r--hurd/default_pager.defs4
-rw-r--r--mach-defpager/setup.c10
-rw-r--r--proc/host.c3
-rw-r--r--sutils/swapon.c3
-rw-r--r--trans/proxy-defpager.c30
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,