summaryrefslogtreecommitdiff
path: root/debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-04-07 18:01:06 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-04-07 18:01:06 +0200
commitcdcfc6bd47fedfb62ba68ea3ad3166c78cfc6e46 (patch)
tree36ea28be2f6166a08711a007e34bac40ce068ace /debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch
parent1cdf04818937220532bced88127482063ba8e857 (diff)
drop old patch series
Diffstat (limited to 'debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch')
-rw-r--r--debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch535
1 files changed, 0 insertions, 535 deletions
diff --git a/debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch b/debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch
deleted file mode 100644
index 5fde42e..0000000
--- a/debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch
+++ /dev/null
@@ -1,535 +0,0 @@
-From e670cb5b81d978f2311a48ffb49c89c6ad9bcb5f Mon Sep 17 00:00:00 2001
-From: Justus Winter <4winter@informatik.uni-hamburg.de>
-Date: Mon, 16 Mar 2015 12:52:24 +0100
-Subject: [PATCH gnumach 3/7] ipc: undo manual inlining of `ipc_entry_X'
- functions
-
-Today we can rely on the compiler to inline functions. Undoing this
-manual optimization is a first step to replace the ipc tables.
-
-* ipc/mach_msg.c (mach_msg_trap): Undo the manual inlining of
-`ipc_entry_lookup', `ipc_entry_dealloc', and `ipc_entry_get'.
-* ipc/ipc_kmsg.c (ipc_kmsg_copyin_header, ipc_kmsg_copyout_header): Likewise.
-* kern/exception.c (exception_raise): Likewise.
-* kern/ipc_mig.c (fast_send_right_lookup): Likewise.
----
- ipc/ipc_kmsg.c | 107 +++++++++++-------------------------------
- ipc/mach_msg.c | 139 ++++++++-----------------------------------------------
- kern/exception.c | 18 ++-----
- kern/ipc_mig.c | 14 +++---
- 4 files changed, 57 insertions(+), 221 deletions(-)
-
-diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
-index 66643fd..a4a3b42 100644
---- a/ipc/ipc_kmsg.c
-+++ b/ipc/ipc_kmsg.c
-@@ -698,24 +698,14 @@ ipc_kmsg_copyin_header(
- if (!space->is_active)
- goto abort_async;
-
-- /* optimized ipc_entry_lookup */
--
-- {
-- mach_port_index_t index = MACH_PORT_INDEX(dest_name);
-- mach_port_gen_t gen = MACH_PORT_GEN(dest_name);
--
-- if (index >= space->is_table_size)
-+ entry = ipc_entry_lookup (space, dest_name);
-+ if (entry == IE_NULL)
- goto abort_async;
--
-- entry = &space->is_table[index];
- bits = entry->ie_bits;
-
-- /* check generation number and type bit */
--
-- if ((bits & (IE_BITS_GEN_MASK|MACH_PORT_TYPE_SEND)) !=
-- (gen | MACH_PORT_TYPE_SEND))
-+ /* check type bits */
-+ if (IE_BITS_TYPE (bits) != MACH_PORT_TYPE_SEND)
- goto abort_async;
-- }
-
- /* optimized ipc_right_copyin */
-
-@@ -750,8 +740,6 @@ ipc_kmsg_copyin_header(
-
- case MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND,
- MACH_MSG_TYPE_MAKE_SEND_ONCE): {
-- ipc_entry_num_t size;
-- ipc_entry_t table;
- ipc_entry_t entry;
- ipc_entry_bits_t bits;
- ipc_port_t dest_port, reply_port;
-@@ -762,51 +750,28 @@ ipc_kmsg_copyin_header(
- if (!space->is_active)
- goto abort_request;
-
-- size = space->is_table_size;
-- table = space->is_table;
--
-- /* optimized ipc_entry_lookup of dest_name */
--
-- {
-- mach_port_index_t index = MACH_PORT_INDEX(dest_name);
-- mach_port_gen_t gen = MACH_PORT_GEN(dest_name);
--
-- if (index >= size)
-+ entry = ipc_entry_lookup (space, dest_name);
-+ if (entry == IE_NULL)
- goto abort_request;
--
-- entry = &table[index];
- bits = entry->ie_bits;
-
-- /* check generation number and type bit */
--
-- if ((bits & (IE_BITS_GEN_MASK|MACH_PORT_TYPE_SEND)) !=
-- (gen | MACH_PORT_TYPE_SEND))
-+ /* check type bits */
-+ if (IE_BITS_TYPE (bits) != MACH_PORT_TYPE_SEND)
- goto abort_request;
-- }
-
- assert(IE_BITS_UREFS(bits) > 0);
-
- dest_port = (ipc_port_t) entry->ie_object;
- assert(dest_port != IP_NULL);
-
-- /* optimized ipc_entry_lookup of reply_name */
--
-- {
-- mach_port_index_t index = MACH_PORT_INDEX(reply_name);
-- mach_port_gen_t gen = MACH_PORT_GEN(reply_name);
--
-- if (index >= size)
-+ entry = ipc_entry_lookup (space, reply_name);
-+ if (entry == IE_NULL)
- goto abort_request;
--
-- entry = &table[index];
- bits = entry->ie_bits;
-
-- /* check generation number and type bit */
--
-- if ((bits & (IE_BITS_GEN_MASK|MACH_PORT_TYPE_RECEIVE)) !=
-- (gen | MACH_PORT_TYPE_RECEIVE))
-+ /* check type bits */
-+ if (IE_BITS_TYPE (bits) != MACH_PORT_TYPE_RECEIVE)
- goto abort_request;
-- }
-
- reply_port = (ipc_port_t) entry->ie_object;
- assert(reply_port != IP_NULL);
-@@ -853,9 +818,6 @@ ipc_kmsg_copyin_header(
- }
-
- case MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0): {
-- mach_port_index_t index;
-- mach_port_gen_t gen;
-- ipc_entry_t table;
- ipc_entry_t entry;
- ipc_entry_bits_t bits;
- ipc_port_t dest_port;
-@@ -869,24 +831,13 @@ ipc_kmsg_copyin_header(
- if (!space->is_active)
- goto abort_reply;
-
-- /* optimized ipc_entry_lookup */
--
-- table = space->is_table;
--
-- index = MACH_PORT_INDEX(dest_name);
-- gen = MACH_PORT_GEN(dest_name);
--
-- if (index >= space->is_table_size)
-+ entry = ipc_entry_lookup (space, dest_name);
-+ if (entry == IE_NULL)
- goto abort_reply;
--
-- entry = &table[index];
- bits = entry->ie_bits;
-
-- /* check generation number, collision bit, and type bit */
--
-- if ((bits & (IE_BITS_GEN_MASK|IE_BITS_COLLISION|
-- MACH_PORT_TYPE_SEND_ONCE)) !=
-- (gen | MACH_PORT_TYPE_SEND_ONCE))
-+ /* check and type bits */
-+ if (IE_BITS_TYPE (bits) != MACH_PORT_TYPE_SEND_ONCE)
- goto abort_reply;
-
- /* optimized ipc_right_copyin */
-@@ -910,12 +861,8 @@ ipc_kmsg_copyin_header(
- assert(dest_port->ip_sorights > 0);
- ip_unlock(dest_port);
-
-- /* optimized ipc_entry_dealloc */
--
-- entry->ie_next = table->ie_next;
-- table->ie_next = index;
-- entry->ie_bits = gen;
- entry->ie_object = IO_NULL;
-+ ipc_entry_dealloc (space, dest_name, entry);
- is_write_unlock(space);
-
- msg->msgh_bits = (MACH_MSGH_BITS_OTHER(mbits) |
-@@ -1814,8 +1761,6 @@ ipc_kmsg_copyout_header(
-
- case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND,
- MACH_MSG_TYPE_PORT_SEND_ONCE): {
-- ipc_entry_t table;
-- mach_port_index_t index;
- ipc_entry_t entry;
- ipc_port_t reply = (ipc_port_t) msg->msgh_local_port;
- mach_port_t dest_name, reply_name;
-@@ -1827,8 +1772,7 @@ ipc_kmsg_copyout_header(
- break;
-
- is_write_lock(space);
-- if (!space->is_active ||
-- ((index = (table = space->is_table)->ie_next) == 0)) {
-+ if (!space->is_active || space->is_table->ie_next == 0) {
- is_write_unlock(space);
- break;
- }
-@@ -1858,11 +1802,14 @@ ipc_kmsg_copyout_header(
- assert(reply->ip_sorights > 0);
- ip_unlock(reply);
-
-- /* optimized ipc_entry_get */
--
-- entry = &table[index];
-- table->ie_next = entry->ie_next;
-- entry->ie_request = 0;
-+ kern_return_t kr;
-+ kr = ipc_entry_get (space, &reply_name, &entry);
-+ if (kr) {
-+ ip_unlock(reply);
-+ ip_unlock(dest);
-+ is_write_unlock(space);
-+ break;
-+ }
-
- {
- mach_port_gen_t gen;
-@@ -1870,8 +1817,6 @@ ipc_kmsg_copyout_header(
- assert((entry->ie_bits &~ IE_BITS_GEN_MASK) == 0);
- gen = entry->ie_bits + IE_BITS_GEN_ONE;
-
-- reply_name = MACH_PORT_MAKE(index, gen);
--
- /* optimized ipc_right_copyout */
-
- entry->ie_bits = gen | (MACH_PORT_TYPE_SEND_ONCE | 1);
-diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c
-index 1e122c7..5fb9b53 100644
---- a/ipc/mach_msg.c
-+++ b/ipc/mach_msg.c
-@@ -482,16 +482,7 @@ mach_msg_trap(
- switch (kmsg->ikm_header.msgh_bits) {
- case MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND,
- MACH_MSG_TYPE_MAKE_SEND_ONCE): {
-- ipc_entry_t table;
-- ipc_entry_num_t size;
- ipc_port_t reply_port;
--
-- /* sending a request message */
--
-- {
-- mach_port_index_t index;
-- mach_port_gen_t gen;
--
- {
- mach_port_t reply_name =
- kmsg->ikm_header.msgh_local_port;
-@@ -499,68 +490,30 @@ mach_msg_trap(
- if (reply_name != rcv_name)
- goto slow_copyin;
-
-- /* optimized ipc_entry_lookup of reply_name */
--
-- index = MACH_PORT_INDEX(reply_name);
-- gen = MACH_PORT_GEN(reply_name);
-- }
--
- is_read_lock(space);
- assert(space->is_active);
-
-- size = space->is_table_size;
-- table = space->is_table;
--
-- if (index >= size)
-- goto abort_request_copyin;
--
-- {
- ipc_entry_t entry;
-- ipc_entry_bits_t bits;
--
-- entry = &table[index];
-- bits = entry->ie_bits;
--
-- /* check generation number and type bit */
--
-- if ((bits & (IE_BITS_GEN_MASK|
-- MACH_PORT_TYPE_RECEIVE)) !=
-- (gen | MACH_PORT_TYPE_RECEIVE))
-+ entry = ipc_entry_lookup (space, reply_name);
-+ if (entry == IE_NULL)
- goto abort_request_copyin;
--
- reply_port = (ipc_port_t) entry->ie_object;
- assert(reply_port != IP_NULL);
- }
-- }
--
-- /* optimized ipc_entry_lookup of dest_name */
--
-- {
-- mach_port_index_t index;
-- mach_port_gen_t gen;
-
- {
- mach_port_t dest_name =
- kmsg->ikm_header.msgh_remote_port;
-
-- index = MACH_PORT_INDEX(dest_name);
-- gen = MACH_PORT_GEN(dest_name);
-- }
--
-- if (index >= size)
-- goto abort_request_copyin;
--
-- {
- ipc_entry_t entry;
- ipc_entry_bits_t bits;
--
-- entry = &table[index];
-+ entry = ipc_entry_lookup (space, dest_name);
-+ if (entry == IE_NULL)
-+ goto abort_request_copyin;
- bits = entry->ie_bits;
-
-- /* check generation number and type bit */
--
-- if ((bits & (IE_BITS_GEN_MASK|MACH_PORT_TYPE_SEND)) !=
-- (gen | MACH_PORT_TYPE_SEND))
-+ /* check type bits */
-+ if (IE_BITS_TYPE (bits) != MACH_PORT_TYPE_SEND)
- goto abort_request_copyin;
-
- assert(IE_BITS_UREFS(bits) > 0);
-@@ -568,7 +521,6 @@ mach_msg_trap(
- dest_port = (ipc_port_t) entry->ie_object;
- assert(dest_port != IP_NULL);
- }
-- }
-
- /*
- * To do an atomic copyin, need simultaneous
-@@ -649,9 +601,6 @@ mach_msg_trap(
- }
-
- case MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0): {
-- ipc_entry_num_t size;
-- ipc_entry_t table;
--
- /* sending a reply message */
-
- {
-@@ -665,35 +614,18 @@ mach_msg_trap(
- is_write_lock(space);
- assert(space->is_active);
-
-- /* optimized ipc_entry_lookup */
--
-- size = space->is_table_size;
-- table = space->is_table;
--
- {
- ipc_entry_t entry;
-- mach_port_gen_t gen;
-- mach_port_index_t index;
--
-- {
- mach_port_t dest_name =
- kmsg->ikm_header.msgh_remote_port;
-
-- index = MACH_PORT_INDEX(dest_name);
-- gen = MACH_PORT_GEN(dest_name);
-- }
--
-- if (index >= size)
-+ entry = ipc_entry_lookup (space, dest_name);
-+ if (entry == IE_NULL)
- goto abort_reply_dest_copyin;
-
-- entry = &table[index];
--
-- /* check generation, collision bit, and type bit */
--
-- if ((entry->ie_bits & (IE_BITS_GEN_MASK|
-- IE_BITS_COLLISION|
-- MACH_PORT_TYPE_SEND_ONCE)) !=
-- (gen | MACH_PORT_TYPE_SEND_ONCE))
-+ /* check type bits */
-+ if (IE_BITS_TYPE (entry->ie_bits) !=
-+ MACH_PORT_TYPE_SEND_ONCE)
- goto abort_reply_dest_copyin;
-
- /* optimized ipc_right_copyin */
-@@ -716,13 +648,8 @@ mach_msg_trap(
- }
-
- assert(dest_port->ip_sorights > 0);
--
-- /* optimized ipc_entry_dealloc */
--
-- entry->ie_next = table->ie_next;
-- table->ie_next = index;
-- entry->ie_bits = gen;
- entry->ie_object = IO_NULL;
-+ ipc_entry_dealloc (space, dest_name, entry);
- }
-
- kmsg->ikm_header.msgh_bits =
-@@ -735,31 +662,16 @@ mach_msg_trap(
-
- assert(dest_port->ip_receiver != ipc_space_kernel);
-
-- /* optimized ipc_entry_lookup/ipc_mqueue_copyin */
-+ /* optimized ipc_mqueue_copyin */
-
- {
- ipc_entry_t entry;
- ipc_entry_bits_t bits;
--
-- {
-- mach_port_index_t index;
-- mach_port_gen_t gen;
--
-- index = MACH_PORT_INDEX(rcv_name);
-- gen = MACH_PORT_GEN(rcv_name);
--
-- if (index >= size)
-+ entry = ipc_entry_lookup (space, rcv_name);
-+ if (entry == IE_NULL)
- goto abort_reply_rcv_copyin;
--
-- entry = &table[index];
- bits = entry->ie_bits;
-
-- /* check generation number */
--
-- if ((bits & IE_BITS_GEN_MASK) != gen)
-- goto abort_reply_rcv_copyin;
-- }
--
- /* check type bits; looking for receive or set */
-
- if (bits & MACH_PORT_TYPE_PORT_SET) {
-@@ -1072,21 +984,12 @@ mach_msg_trap(
- ip_unlock(reply_port);
-
- {
-- ipc_entry_t table;
- ipc_entry_t entry;
-- mach_port_index_t index;
--
-- /* optimized ipc_entry_get */
--
-- table = space->is_table;
-- index = table->ie_next;
--
-- if (index == 0)
-+ kern_return_t kr;
-+ kr = ipc_entry_get (space, &reply_name, &entry);
-+ if (kr)
- goto abort_request_copyout;
--
-- entry = &table[index];
-- table->ie_next = entry->ie_next;
-- entry->ie_request = 0;
-+ assert (entry != NULL);
-
- {
- mach_port_gen_t gen;
-@@ -1094,8 +997,6 @@ mach_msg_trap(
- assert((entry->ie_bits &~ IE_BITS_GEN_MASK) == 0);
- gen = entry->ie_bits + IE_BITS_GEN_ONE;
-
-- reply_name = MACH_PORT_MAKE(index, gen);
--
- /* optimized ipc_right_copyout */
-
- entry->ie_bits = gen | (MACH_PORT_TYPE_SEND_ONCE | 1);
-diff --git a/kern/exception.c b/kern/exception.c
-index 7954fba..6e84c0a 100644
---- a/kern/exception.c
-+++ b/kern/exception.c
-@@ -603,30 +603,18 @@ exception_raise(
- ip_unlock(reply_port);
-
- {
-- ipc_entry_t table;
-+ kern_return_t kr;
- ipc_entry_t entry;
-- mach_port_index_t index;
--
-- /* optimized ipc_entry_get */
--
-- table = space->is_table;
-- index = table->ie_next;
-
-- if (index == 0)
-+ kr = ipc_entry_get (space, &exc->Head.msgh_remote_port, &entry);
-+ if (kr)
- goto abort_copyout;
--
-- entry = &table[index];
-- table->ie_next = entry->ie_next;
-- entry->ie_request = 0;
--
- {
- mach_port_gen_t gen;
-
- assert((entry->ie_bits &~ IE_BITS_GEN_MASK) == 0);
- gen = entry->ie_bits + IE_BITS_GEN_ONE;
-
-- exc->Head.msgh_remote_port = MACH_PORT_MAKE(index, gen);
--
- /* optimized ipc_right_copyout */
-
- entry->ie_bits = gen | (MACH_PORT_TYPE_SEND_ONCE | 1);
-diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c
-index cc61ec7..22dac42 100644
---- a/kern/ipc_mig.c
-+++ b/kern/ipc_mig.c
-@@ -310,16 +310,18 @@ mig_strncpy(dest, src, len)
- MACRO_BEGIN \
- ipc_space_t space = current_space(); \
- ipc_entry_t entry; \
-- mach_port_index_t index = MACH_PORT_INDEX(name); \
- \
- is_read_lock(space); \
- assert(space->is_active); \
- \
-- if ((index >= space->is_table_size) || \
-- (((entry = &space->is_table[index])->ie_bits & \
-- (IE_BITS_GEN_MASK|MACH_PORT_TYPE_SEND)) != \
-- (MACH_PORT_GEN(name) | MACH_PORT_TYPE_SEND))) { \
-- is_read_unlock(space); \
-+ entry = ipc_entry_lookup (space, name); \
-+ if (entry == IE_NULL) { \
-+ is_read_unlock (space); \
-+ abort; \
-+ } \
-+ \
-+ if (IE_BITS_TYPE (entry->ie_bits) != MACH_PORT_TYPE_SEND) { \
-+ is_read_unlock (space); \
- abort; \
- } \
- \
---
-2.1.4
-