bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/2] add port name types


From: Luca Dariz
Subject: [PATCH 1/2] add port name types
Date: Sun, 3 Apr 2022 16:59:54 +0200

* include/mach/mach_port.defs
  - use C type mach_port_name_array_t
* include/mach/port.h:
  - add new types mach_port_name_t and mach_port_name_array_t
  - refine mach_port_t type for user and kernel space
  - use port names in mach_port_status to allow compilation of 64-bit
  - use port name to have uniform sizes and remove the
    old_mach_port_status_t as it's unused
* include/mach/std_types.defs
  - use C type mach_port_name_array_t
* kern/thread.{h,c}
  - fix prototype to use port names. So far it seems the only rpc to
    cause a conflict between the mig-generated header and the regular
    header, so compilation fails.

Signed-off-by: Luca Dariz <luca@orpolo.org>
---
 include/mach/mach_port.defs |  6 ++----
 include/mach/port.h         | 36 +++++++++++++++++-------------------
 include/mach/std_types.defs |  6 ++----
 kern/thread.c               |  4 ++--
 kern/thread.h               |  4 ++--
 5 files changed, 25 insertions(+), 31 deletions(-)

diff --git a/include/mach/mach_port.defs b/include/mach/mach_port.defs
index c21c34bc..7cb8a659 100644
--- a/include/mach/mach_port.defs
+++ b/include/mach/mach_port.defs
@@ -53,8 +53,7 @@ subsystem
 routine mach_port_names(
                task            : ipc_space_t;
        out     names           : mach_port_name_array_t =
-                                       ^array[] of mach_port_name_t
-                                       ctype: mach_port_array_t;
+                                       ^array[] of mach_port_name_t;
        out     types           : mach_port_type_array_t =
                                        ^array[] of mach_port_type_t);
 
@@ -209,8 +208,7 @@ routine mach_port_get_set_status(
                task            : ipc_space_t;
                name            : mach_port_name_t;
        out     members         : mach_port_name_array_t =
-                                       ^array[] of mach_port_name_t
-                                       ctype: mach_port_array_t);
+                                       ^array[] of mach_port_name_t);
 
 /*
  *     Puts the member port (the task must have receive rights)
diff --git a/include/mach/port.h b/include/mach/port.h
index e77e5c38..3c226f6c 100644
--- a/include/mach/port.h
+++ b/include/mach/port.h
@@ -38,8 +38,24 @@
 #include <mach/boolean.h>
 #include <mach/machine/vm_types.h>
 
+/*
+ * Port names are the type used by userspace, they are always 32-bit wide.
+ */
+typedef unsigned int mach_port_name_t;
+typedef mach_port_name_t *mach_port_name_array_t;
 
+/*
+ * A port is represented
+ * - by a port name in userspace
+ * - by a pointer in kernel space
+ * While in userspace mach_port_name_t and mach_port_name are interchangable,
+ * in kernelspace they need to be different and appropriately converted.
+ */
+#ifdef KERNEL
 typedef vm_offset_t mach_port_t;
+#else /* KERNEL */
+typedef mach_port_name_t mach_port_t;
+#endif
 typedef mach_port_t *mach_port_array_t;
 typedef const mach_port_t *const_mach_port_array_t;
 typedef int *rpc_signature_info_t;
@@ -121,7 +137,7 @@ typedef unsigned int mach_port_msgcount_t;  /* number of 
msgs */
 typedef unsigned int mach_port_rights_t;       /* number of rights */
 
 typedef struct mach_port_status {
-       mach_port_t             mps_pset;       /* containing port set */
+       mach_port_name_t        mps_pset;       /* containing port set */
        mach_port_seqno_t       mps_seqno;      /* sequence number */
 /*mach_port_mscount_t*/natural_t mps_mscount;  /* make-send count */
 /*mach_port_msgcount_t*/natural_t mps_qlimit;  /* queue limit */
@@ -135,22 +151,4 @@ typedef struct mach_port_status {
 #define MACH_PORT_QLIMIT_DEFAULT       ((mach_port_msgcount_t) 5)
 #define MACH_PORT_QLIMIT_MAX           ((mach_port_msgcount_t) 16)
 
-/*
- *  Compatibility definitions, for code written
- *  before there was an mps_seqno field.
- *
- *  XXX: Remove this before releasing Gnumach 1.6.
- */
-
-typedef struct old_mach_port_status {
-       mach_port_t             mps_pset;       /* containing port set */
-/*mach_port_mscount_t*/natural_t mps_mscount;  /* make-send count */
-/*mach_port_msgcount_t*/natural_t mps_qlimit;  /* queue limit */
-/*mach_port_msgcount_t*/natural_t mps_msgcount;        /* number in the queue 
*/
-/*mach_port_rights_t*/natural_t        mps_sorights;   /* how many send-once 
rights */
-/*boolean_t*/natural_t         mps_srights;    /* do send rights exist? */
-/*boolean_t*/natural_t         mps_pdrequest;  /* port-deleted requested? */
-/*boolean_t*/natural_t         mps_nsrequest;  /* no-senders requested? */
-} old_mach_port_status_t;
-
 #endif /* _MACH_PORT_H_ */
diff --git a/include/mach/std_types.defs b/include/mach/std_types.defs
index 5d95ab42..46987380 100644
--- a/include/mach/std_types.defs
+++ b/include/mach/std_types.defs
@@ -58,10 +58,8 @@ type mach_port_t = MACH_MSG_TYPE_COPY_SEND
 ;
 type mach_port_array_t = array[] of mach_port_t;
 
-type mach_port_name_t = MACH_MSG_TYPE_PORT_NAME
-       ctype: mach_port_t;
-type mach_port_name_array_t = array[] of mach_port_name_t
-       ctype: mach_port_array_t;
+type mach_port_name_t = MACH_MSG_TYPE_PORT_NAME;
+type mach_port_name_array_t = array[] of mach_port_name_t;
 
 type mach_port_right_t = natural_t;
 
diff --git a/kern/thread.c b/kern/thread.c
index 0e3cc2c9..82863b38 100644
--- a/kern/thread.c
+++ b/kern/thread.c
@@ -861,8 +861,8 @@ kern_return_t thread_terminate(
 kern_return_t thread_terminate_release(
        thread_t thread,
        task_t task,
-       mach_port_t thread_name,
-       mach_port_t reply_port,
+       mach_port_name_t thread_name,
+       mach_port_name_t reply_port,
        vm_offset_t address,
        vm_size_t size)
 {
diff --git a/kern/thread.h b/kern/thread.h
index f0ed71a8..ddf4e1da 100644
--- a/kern/thread.h
+++ b/kern/thread.h
@@ -280,8 +280,8 @@ extern kern_return_t        thread_terminate(
 extern kern_return_t   thread_terminate_release(
        thread_t        thread,
        task_t          task,
-       mach_port_t     thread_name,
-       mach_port_t     reply_port,
+       mach_port_name_t        thread_name,
+       mach_port_name_t        reply_port,
        vm_offset_t     address,
        vm_size_t       size);
 extern kern_return_t   thread_suspend(
-- 
2.30.2




reply via email to

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