summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/patches/0001-Retire-old_mach_port_get_receive_status.patch132
-rw-r--r--debian/patches/0002-Add-a-new-flavor-of-no-senders-notifications.patch371
-rw-r--r--debian/patches/series2
3 files changed, 0 insertions, 505 deletions
diff --git a/debian/patches/0001-Retire-old_mach_port_get_receive_status.patch b/debian/patches/0001-Retire-old_mach_port_get_receive_status.patch
deleted file mode 100644
index ff28768..0000000
--- a/debian/patches/0001-Retire-old_mach_port_get_receive_status.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From d1b97ad52514eb9d676dc7efe0bff6cc518d4548 Mon Sep 17 00:00:00 2001
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Sat, 6 Dec 2014 11:59:32 +0100
-Subject: [PATCH gnumach 1/2] Retire `old_mach_port_get_receive_status'
-
-Retire the compatibility RPC `old_mach_port_get_receive_status' that
-works like `mach_port_get_receive_status' but returns an
-`old_mach_port_status' object that lacks the `mps_seqno' field.
-
-* include/mach/mach_port.defs (old_mach_port_get_receive_status): Drop RPC.
-* include/mach/mach_types.defs (old_mach_port_status_t): Drop type.
-* include/mach/port.h (old_mach_port_status_t): Likewise.
-* ipc/mach_port.c (old_mach_port_get_receive_status): Drop function.
----
- include/mach/mach_port.defs | 9 +--------
- include/mach/mach_types.defs | 2 --
- include/mach/port.h | 16 ----------------
- ipc/mach_port.c | 40 ----------------------------------------
- 4 files changed, 1 insertion(+), 66 deletions(-)
-
-diff --git a/include/mach/mach_port.defs b/include/mach/mach_port.defs
-index c7e8526..c21c34b 100644
---- a/include/mach/mach_port.defs
-+++ b/include/mach/mach_port.defs
-@@ -176,14 +176,7 @@ routine mach_port_mod_refs(
- right : mach_port_right_t;
- delta : mach_port_delta_t);
-
--/*
-- * Temporary compatibility call.
-- */
--
--routine old_mach_port_get_receive_status(
-- task : ipc_space_t;
-- name : mach_port_name_t;
-- out status : old_mach_port_status_t);
-+skip; /* old old_mach_port_get_receive_status */
-
- /*
- * Only valid for receive rights.
-diff --git a/include/mach/mach_types.defs b/include/mach/mach_types.defs
-index 85ad653..8e68d38 100644
---- a/include/mach/mach_types.defs
-+++ b/include/mach/mach_types.defs
-@@ -60,8 +60,6 @@ serverprefix SERVERPREFIX;
-
- type mach_port_status_t = struct[9] of integer_t;
-
--type old_mach_port_status_t = struct[8] of integer_t; /* compatibility */
--
- type task_t = mach_port_t
- ctype: mach_port_t
- #if KERNEL_SERVER
-diff --git a/include/mach/port.h b/include/mach/port.h
-index 53f6071..79b5f4c 100644
---- a/include/mach/port.h
-+++ b/include/mach/port.h
-@@ -134,20 +134,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.
-- */
--
--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/ipc/mach_port.c b/ipc/mach_port.c
-index 4ff39f2..c7d9b81 100644
---- a/ipc/mach_port.c
-+++ b/ipc/mach_port.c
-@@ -744,46 +744,6 @@ mach_port_mod_refs(
- }
-
- /*
-- * Routine: old_mach_port_get_receive_status [kernel call]
-- * Purpose:
-- * Compatibility for code written before sequence numbers.
-- * Retrieves mucho info about a receive right.
-- * Conditions:
-- * Nothing locked.
-- * Returns:
-- * KERN_SUCCESS Retrieved status.
-- * KERN_INVALID_TASK The space is null.
-- * KERN_INVALID_TASK The space is dead.
-- * KERN_INVALID_NAME The name doesn't denote a right.
-- * KERN_INVALID_RIGHT Name doesn't denote receive rights.
-- */
--
--kern_return_t
--old_mach_port_get_receive_status(
-- ipc_space_t space,
-- mach_port_t name,
-- old_mach_port_status_t *statusp)
--{
-- mach_port_status_t status;
-- kern_return_t kr;
--
-- kr = mach_port_get_receive_status(space, name, &status);
-- if (kr != KERN_SUCCESS)
-- return kr;
--
-- statusp->mps_pset = status.mps_pset;
-- statusp->mps_mscount = status.mps_mscount;
-- statusp->mps_qlimit = status.mps_qlimit;
-- statusp->mps_msgcount = status.mps_msgcount;
-- statusp->mps_sorights = status.mps_sorights;
-- statusp->mps_srights = status.mps_srights;
-- statusp->mps_pdrequest = status.mps_pdrequest;
-- statusp->mps_nsrequest = status.mps_nsrequest;
--
-- return KERN_SUCCESS;
--}
--
--/*
- * Routine: mach_port_set_qlimit [kernel call]
- * Purpose:
- * Changes a receive right's queue limit.
---
-2.1.3
-
diff --git a/debian/patches/0002-Add-a-new-flavor-of-no-senders-notifications.patch b/debian/patches/0002-Add-a-new-flavor-of-no-senders-notifications.patch
deleted file mode 100644
index 1178e8b..0000000
--- a/debian/patches/0002-Add-a-new-flavor-of-no-senders-notifications.patch
+++ /dev/null
@@ -1,371 +0,0 @@
-From 25207576b2dca77da167c19a7ff16cf469acf1bc Mon Sep 17 00:00:00 2001
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Sun, 7 Dec 2014 14:27:23 +0100
-Subject: [PATCH gnumach 2/2] Add a new flavor of no-senders notifications
-
-The no-senders notifications do not carry a port name. Add a new
-flavor of no-senders notifications `MACH_NOTIFY_NO_SENDERS2' that does
-carry the name of the port that lost the last sender.
-
-* include/mach/notify.defs (mach_notify_no_senders2): New simple routine.
-* include/mach/notify.h (MACH_NOTIFY_NO_SENDERS2): New macro.
-* ipc/ipc_notify.c (ipc_notify_no_senders2_template,
-ipc_notify_init_no_senders2, ipc_notify_init): Initialize a template.
-(ipc_notify_no_senders): Test whether a new-style notification has
-been requested.
-(ipc_notify_no_senders2): New function.
-* ipc/ipc_notify.h (ipc_notify_no_senders2): New declaration.
-(NSREQUEST_FLAG_NO_SENDERS2, NSREQUEST_FLAG_MASK, NSREQUEST_IPC_PORT,
-NSREQUEST_HAS_FLAG, NSREQUEST_SET_FLAG): Machinery to store flags in
-the least significant bits of the `nsrequest' field.
-* ipc/ipc_port.c (ipc_port_nsrequest2): Add `new_style' parameter,
-rename from `ipc_port_nsrequest', set flag if `new_style' is given,
-and filter it from the returned `previous' port.
-(ipc_port_nsrequest): New function.
-(ipc_port_destroy): Filter out flags from `ip_nsrequest'.
-* ipc/ipc_port.h (struct ipc_port): Document the use of flags.
-(ipc_port_nsrequest2): New declaration.
-* ipc/mach_port.c (mach_port_request_notification): Handle
-MACH_NOTIFY_NO_SENDERS2.
----
- include/mach/notify.defs | 9 ++++++
- include/mach/notify.h | 11 +++++++
- ipc/ipc_notify.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++
- ipc/ipc_notify.h | 14 ++++++++
- ipc/ipc_port.c | 36 ++++++++++++++++++---
- ipc/ipc_port.h | 10 +++++-
- ipc/mach_port.c | 6 ++--
- 7 files changed, 162 insertions(+), 8 deletions(-)
-
-diff --git a/include/mach/notify.defs b/include/mach/notify.defs
-index 6ba4cde..06802ce 100644
---- a/include/mach/notify.defs
-+++ b/include/mach/notify.defs
-@@ -110,3 +110,12 @@ simpleroutine mach_notify_dead_name(
- msgseqno seqno : mach_port_seqno_t;
- #endif
- name : mach_port_name_t);
-+
-+/* MACH_NOTIFY_NO_SENDERS2: 0111 */
-+simpleroutine mach_notify_no_senders2(
-+ notify : notify_port_t;
-+#if SEQNOS
-+ msgseqno seqno : mach_port_seqno_t;
-+#endif
-+ name : mach_port_name_t;
-+ mscount : mach_port_mscount_t);
-diff --git a/include/mach/notify.h b/include/mach/notify.h
-index 6d783dd..d3b4c01 100644
---- a/include/mach/notify.h
-+++ b/include/mach/notify.h
-@@ -53,6 +53,9 @@
- /* An extant send-once right died */
- #define MACH_NOTIFY_DEAD_NAME (MACH_NOTIFY_FIRST + 010)
- /* Send or send-once right died, leaving a dead-name */
-+#define MACH_NOTIFY_NO_SENDERS2 (MACH_NOTIFY_FIRST + 011)
-+ /* Receive right has no extant send rights,
-+ new version. */
- #define MACH_NOTIFY_LAST (MACH_NOTIFY_FIRST + 015)
-
- typedef struct {
-@@ -81,6 +84,14 @@ typedef struct {
-
- typedef struct {
- mach_msg_header_t not_header;
-+ mach_msg_type_t not_port_type; /* MACH_MSG_TYPE_PORT_NAME */
-+ mach_port_t not_port;
-+ mach_msg_type_t not_type; /* MACH_MSG_TYPE_INTEGER_32 */
-+ unsigned int not_count;
-+} mach_no_senders_notification2_t;
-+
-+typedef struct {
-+ mach_msg_header_t not_header;
- } mach_send_once_notification_t;
-
- typedef struct {
-diff --git a/ipc/ipc_notify.c b/ipc/ipc_notify.c
-index df5f68b..8556fee 100644
---- a/ipc/ipc_notify.c
-+++ b/ipc/ipc_notify.c
-@@ -47,6 +47,7 @@ mach_port_deleted_notification_t ipc_notify_port_deleted_template;
- mach_msg_accepted_notification_t ipc_notify_msg_accepted_template;
- mach_port_destroyed_notification_t ipc_notify_port_destroyed_template;
- mach_no_senders_notification_t ipc_notify_no_senders_template;
-+mach_no_senders_notification2_t ipc_notify_no_senders2_template;
- mach_send_once_notification_t ipc_notify_send_once_template;
- mach_dead_name_notification_t ipc_notify_dead_name_template;
-
-@@ -175,6 +176,48 @@ ipc_notify_init_no_senders(
- }
-
- /*
-+ * Routine: ipc_notify_init_no_senders2
-+ * Purpose:
-+ * Initialize a template for no-senders2 notifications.
-+ */
-+
-+void
-+ipc_notify_init_no_senders2(
-+ mach_no_senders_notification2_t *n)
-+{
-+ mach_msg_header_t *m = &n->not_header;
-+ mach_msg_type_t *t;
-+
-+ m->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0);
-+ m->msgh_size = sizeof *n;
-+ m->msgh_seqno = NOTIFY_MSGH_SEQNO;
-+ m->msgh_local_port = MACH_PORT_NULL;
-+ m->msgh_remote_port = MACH_PORT_NULL;
-+ m->msgh_id = MACH_NOTIFY_NO_SENDERS;
-+
-+ t = &n->not_port_type;
-+ t->msgt_name = MACH_MSG_TYPE_PORT_NAME;
-+ t->msgt_size = PORT_T_SIZE_IN_BITS;
-+ t->msgt_number = 1;
-+ t->msgt_inline = TRUE;
-+ t->msgt_longform = FALSE;
-+ t->msgt_deallocate = FALSE;
-+ t->msgt_unused = 0;
-+
-+ t = &n->not_type;
-+ t->msgt_name = MACH_MSG_TYPE_INTEGER_32;
-+ t->msgt_size = PORT_T_SIZE_IN_BITS;
-+ t->msgt_number = 1;
-+ t->msgt_inline = TRUE;
-+ t->msgt_longform = FALSE;
-+ t->msgt_deallocate = FALSE;
-+ t->msgt_unused = 0;
-+
-+ n->not_port = MACH_PORT_NULL;
-+ n->not_count = 0;
-+}
-+
-+/*
- * Routine: ipc_notify_init_send_once
- * Purpose:
- * Initialize a template for send-once notifications.
-@@ -238,6 +281,7 @@ ipc_notify_init(void)
- ipc_notify_init_msg_accepted(&ipc_notify_msg_accepted_template);
- ipc_notify_init_port_destroyed(&ipc_notify_port_destroyed_template);
- ipc_notify_init_no_senders(&ipc_notify_no_senders_template);
-+ ipc_notify_init_no_senders2(&ipc_notify_no_senders2_template);
- ipc_notify_init_send_once(&ipc_notify_send_once_template);
- ipc_notify_init_dead_name(&ipc_notify_dead_name_template);
- }
-@@ -366,6 +410,11 @@ ipc_notify_no_senders(
- ipc_kmsg_t kmsg;
- mach_no_senders_notification_t *n;
-
-+ if (NSREQUEST_HAS_FLAG (port, NSREQUEST_FLAG_NO_SENDERS2)) {
-+ ipc_notify_no_senders2 (NSREQUEST_IPC_PORT (port), mscount);
-+ return;
-+ }
-+
- kmsg = ikm_alloc(sizeof *n);
- if (kmsg == IKM_NULL) {
- printf("dropped no-senders (0x%p, %u)\n", port, mscount);
-@@ -384,6 +433,41 @@ ipc_notify_no_senders(
- }
-
- /*
-+ * Routine: ipc_notify_no_senders2
-+ * Purpose:
-+ * Send a no-senders2 notification.
-+ * Conditions:
-+ * Nothing locked.
-+ * Consumes a ref/soright for port.
-+ */
-+
-+void
-+ipc_notify_no_senders2(
-+ ipc_port_t port,
-+ mach_port_mscount_t mscount)
-+{
-+ ipc_kmsg_t kmsg;
-+ mach_no_senders_notification2_t *n;
-+
-+ kmsg = ikm_alloc(sizeof *n);
-+ if (kmsg == IKM_NULL) {
-+ printf("dropped no-senders (0x%p, %u)\n", port, mscount);
-+ ipc_port_release_sonce(port);
-+ return;
-+ }
-+
-+ ikm_init(kmsg, sizeof *n);
-+ n = (mach_no_senders_notification2_t *) &kmsg->ikm_header;
-+ *n = ipc_notify_no_senders2_template;
-+
-+ n->not_header.msgh_remote_port = (mach_port_t) port;
-+ n->not_count = mscount;
-+ n->not_port = port->ip_receiver_name;
-+
-+ ipc_mqueue_send_always(kmsg);
-+}
-+
-+/*
- * Routine: ipc_notify_send_once
- * Purpose:
- * Send a send-once notification.
-diff --git a/ipc/ipc_notify.h b/ipc/ipc_notify.h
-index 789bd23..b1fa090 100644
---- a/ipc/ipc_notify.h
-+++ b/ipc/ipc_notify.h
-@@ -50,6 +50,20 @@ extern void
- ipc_notify_no_senders(ipc_port_t, mach_port_mscount_t);
-
- extern void
-+ipc_notify_no_senders2 (ipc_port_t, mach_port_mscount_t);
-+
-+/* No-senders notifications come in two flavors. We use the least
-+ significant bit to indicate that the new flavor was requested. */
-+#define NSREQUEST_FLAG_NO_SENDERS2 0x1
-+#define NSREQUEST_FLAG_MASK 0x1
-+#define NSREQUEST_IPC_PORT(X) \
-+ ((ipc_port_t) ((unsigned long) (X) &~ NSREQUEST_FLAG_MASK))
-+#define NSREQUEST_HAS_FLAG(X, F) \
-+ ((unsigned long) (X) & F)
-+#define NSREQUEST_SET_FLAG(X, F) \
-+ ((ipc_port_t) ((unsigned long) (X) | F))
-+
-+extern void
- ipc_notify_send_once(ipc_port_t);
-
- extern void
-diff --git a/ipc/ipc_port.c b/ipc/ipc_port.c
-index 89a5d67..8817c49 100644
---- a/ipc/ipc_port.c
-+++ b/ipc/ipc_port.c
-@@ -290,7 +290,7 @@ ipc_port_pdrequest(
- }
-
- /*
-- * Routine: ipc_port_nsrequest
-+ * Routine: ipc_port_nsrequest2
- * Purpose:
- * Make a no-senders request, returning the
- * previously registered send-once right.
-@@ -302,8 +302,9 @@ ipc_port_pdrequest(
- */
-
- void
--ipc_port_nsrequest(
-+ipc_port_nsrequest2(
- ipc_port_t port,
-+ boolean_t new_style,
- mach_port_mscount_t sync,
- ipc_port_t notify,
- ipc_port_t *previousp)
-@@ -313,7 +314,7 @@ ipc_port_nsrequest(
-
- assert(ip_active(port));
-
-- previous = port->ip_nsrequest;
-+ previous = NSREQUEST_IPC_PORT (port->ip_nsrequest);
- mscount = port->ip_mscount;
-
- if ((port->ip_srights == 0) &&
-@@ -323,7 +324,10 @@ ipc_port_nsrequest(
- ip_unlock(port);
- ipc_notify_no_senders(notify, mscount);
- } else {
-- port->ip_nsrequest = notify;
-+ port->ip_nsrequest = new_style
-+ ? NSREQUEST_SET_FLAG (notify,
-+ NSREQUEST_FLAG_NO_SENDERS2)
-+ : notify;
- ip_unlock(port);
- }
-
-@@ -331,6 +335,28 @@ ipc_port_nsrequest(
- }
-
- /*
-+ * Routine: ipc_port_nsrequest
-+ * Purpose:
-+ * Make a no-senders request, returning the
-+ * previously registered send-once right.
-+ * Just cancels the previous request if notify is IP_NULL.
-+ * Conditions:
-+ * The port is locked and active. It is unlocked.
-+ * Consumes a ref for notify (if non-null), and
-+ * returns previous with a ref (if non-null).
-+ */
-+
-+void
-+ipc_port_nsrequest(
-+ ipc_port_t port,
-+ mach_port_mscount_t sync,
-+ ipc_port_t notify,
-+ ipc_port_t *previousp)
-+{
-+ ipc_port_nsrequest2 (port, FALSE, sync, notify, previousp);
-+}
-+
-+/*
- * Routine: ipc_port_set_qlimit
- * Purpose:
- * Changes a port's queue limit; the maximum number
-@@ -698,7 +724,7 @@ ipc_port_destroy(
-
- /* throw away no-senders request */
-
-- nsrequest = port->ip_nsrequest;
-+ nsrequest = NSREQUEST_IPC_PORT (port->ip_nsrequest);
- if (nsrequest != IP_NULL)
- ipc_notify_send_once(nsrequest); /* consumes ref */
-
-diff --git a/ipc/ipc_port.h b/ipc/ipc_port.h
-index 6914c71..e614ae8 100644
---- a/ipc/ipc_port.h
-+++ b/ipc/ipc_port.h
-@@ -88,7 +88,7 @@ struct ipc_port {
- mach_port_rights_t ip_srights;
- mach_port_rights_t ip_sorights;
-
-- struct ipc_port *ip_nsrequest;
-+ struct ipc_port *ip_nsrequest; /* flags in the LSBs */
- struct ipc_port *ip_pdrequest;
- struct ipc_port_request *ip_dnrequests;
-
-@@ -245,6 +245,14 @@ extern void ipc_port_nsrequest(
- ipc_port_t notify,
- ipc_port_t *previousp);
-
-+/* Make a no-senders request, new version. */
-+extern void ipc_port_nsrequest2(
-+ ipc_port_t port,
-+ boolean_t new_style,
-+ mach_port_mscount_t sync,
-+ ipc_port_t notify,
-+ ipc_port_t *previousp);
-+
- /* Change a port's queue limit */
- extern void ipc_port_set_qlimit(
- ipc_port_t port,
-diff --git a/ipc/mach_port.c b/ipc/mach_port.c
-index c7d9b81..ad10cd2 100644
---- a/ipc/mach_port.c
-+++ b/ipc/mach_port.c
-@@ -1202,7 +1202,8 @@ mach_port_request_notification(
- break;
- }
-
-- case MACH_NOTIFY_NO_SENDERS: {
-+ case MACH_NOTIFY_NO_SENDERS:
-+ case MACH_NOTIFY_NO_SENDERS2: {
- ipc_port_t port;
-
- kr = ipc_port_translate_receive(space, name, &port);
-@@ -1210,7 +1211,8 @@ mach_port_request_notification(
- return kr;
- /* port is locked and active */
-
-- ipc_port_nsrequest(port, sync, notify, previousp);
-+ ipc_port_nsrequest2 (port, id == MACH_NOTIFY_NO_SENDERS2,
-+ sync, notify, previousp);
- /* port is unlocked */
- break;
- }
---
-2.1.3
-
diff --git a/debian/patches/series b/debian/patches/series
index 471a407..01571be 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -9,5 +9,3 @@ vm_cache_policy.patch
tn-0001-kern-provide-notifications-about-new-tasks.patch
tn-0002-include-add-X_IMPORTS-to-ipc-definitions.patch
-0001-Retire-old_mach_port_get_receive_status.patch
-0002-Add-a-new-flavor-of-no-senders-notifications.patch