bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH 1/2] add port name types


From: Samuel Thibault
Subject: Re: [PATCH 1/2] add port name types
Date: Sat, 27 Aug 2022 22:16:14 +0200
User-agent: NeoMutt/20170609 (1.8.3)

Luca Dariz, le dim. 03 avril 2022 16:59:54 +0200, a ecrit:
> * 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>

Applied, thanks!

> ---
>  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
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.



reply via email to

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