diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-04-07 18:01:06 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-04-07 18:01:06 +0200 |
commit | cdcfc6bd47fedfb62ba68ea3ad3166c78cfc6e46 (patch) | |
tree | 36ea28be2f6166a08711a007e34bac40ce068ace /debian/patches/0003-ipc-undo-manual-inlining-of-ipc_entry_X-functions.patch | |
parent | 1cdf04818937220532bced88127482063ba8e857 (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.patch | 535 |
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 - |