bug-hurd
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]