[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH hurd] Only use host_get_kernel_version and default_pager_paging_s
From: |
Flavio Cruz |
Subject: |
[PATCH hurd] Only use host_get_kernel_version and default_pager_paging_storage_new in x86_64. |
Date: |
Wed, 10 May 2023 01:00:45 -0400 |
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