diff options
Diffstat (limited to 'debian/patches/0007-ipc-inline-key-ipc-entry-lookup-functions.patch')
-rw-r--r-- | debian/patches/0007-ipc-inline-key-ipc-entry-lookup-functions.patch | 316 |
1 files changed, 0 insertions, 316 deletions
diff --git a/debian/patches/0007-ipc-inline-key-ipc-entry-lookup-functions.patch b/debian/patches/0007-ipc-inline-key-ipc-entry-lookup-functions.patch deleted file mode 100644 index b43233b..0000000 --- a/debian/patches/0007-ipc-inline-key-ipc-entry-lookup-functions.patch +++ /dev/null @@ -1,316 +0,0 @@ -From 8346e6fb9bbe15c86d5736d53379f8366f17a127 Mon Sep 17 00:00:00 2001 -From: Justus Winter <4winter@informatik.uni-hamburg.de> -Date: Wed, 1 Apr 2015 17:17:01 +0200 -Subject: [PATCH gnumach 7/8] ipc: inline key ipc entry lookup functions - -Declare functions looking up IPC entries that were previously inlined -manually with `static inline' so that they will be inlined into the -fast paths by the compiler. - -* ipc/ipc_entry.c (ipc_entry_lookup, ipc_entry_get, -ipc_entry_dealloc): Move functions... -* ipc/ipc_space.h: ... here, and declare them as `static inline'. -* ipc/ipc_entry.h: Drop associated declarations. ---- - ipc/ipc_entry.c | 119 ------------------------------------------------------- - ipc/ipc_entry.h | 9 ----- - ipc/ipc_space.h | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 120 insertions(+), 128 deletions(-) - -diff --git a/ipc/ipc_entry.c b/ipc/ipc_entry.c -index 2d6e665..a5fe319 100644 ---- a/ipc/ipc_entry.c -+++ b/ipc/ipc_entry.c -@@ -52,93 +52,6 @@ - struct kmem_cache ipc_entry_cache; - - /* -- * Routine: ipc_entry_lookup -- * Purpose: -- * Searches for an entry, given its name. -- * Conditions: -- * The space must be read or write locked throughout. -- * The space must be active. -- */ -- --ipc_entry_t --ipc_entry_lookup( -- ipc_space_t space, -- mach_port_t name) --{ -- ipc_entry_t entry; -- -- assert(space->is_active); -- entry = rdxtree_lookup(&space->is_map, (rdxtree_key_t) name); -- if (entry != IE_NULL -- && IE_BITS_TYPE(entry->ie_bits) == MACH_PORT_TYPE_NONE) -- entry = NULL; -- assert((entry == IE_NULL) || IE_BITS_TYPE(entry->ie_bits)); -- return entry; --} -- --/* -- * Routine: ipc_entry_get -- * Purpose: -- * Tries to allocate an entry out of the space. -- * Conditions: -- * The space is write-locked and active throughout. -- * An object may be locked. Will not allocate memory. -- * Returns: -- * KERN_SUCCESS A free entry was found. -- * KERN_NO_SPACE No entry allocated. -- */ -- --kern_return_t --ipc_entry_get( -- ipc_space_t space, -- mach_port_t *namep, -- ipc_entry_t *entryp) --{ -- mach_port_t new_name; -- ipc_entry_t free_entry; -- -- assert(space->is_active); -- -- /* Get entry from the free list. */ -- free_entry = space->is_free_list; -- if (free_entry == IE_NULL) -- return KERN_NO_SPACE; -- -- space->is_free_list = free_entry->ie_next_free; -- space->is_free_list_size -= 1; -- -- /* -- * Initialize the new entry. We need only -- * increment the generation number and clear ie_request. -- */ -- -- { -- mach_port_gen_t gen; -- -- assert((free_entry->ie_bits &~ IE_BITS_GEN_MASK) == 0); -- gen = free_entry->ie_bits + IE_BITS_GEN_ONE; -- free_entry->ie_bits = gen; -- free_entry->ie_request = 0; -- new_name = MACH_PORT_MAKE(free_entry->ie_name, gen); -- } -- -- /* -- * The new name can't be MACH_PORT_NULL because index -- * is non-zero. It can't be MACH_PORT_DEAD because -- * the table isn't allowed to grow big enough. -- * (See comment in ipc/ipc_table.h.) -- */ -- -- assert(MACH_PORT_VALID(new_name)); -- assert(free_entry->ie_object == IO_NULL); -- -- space->is_size += 1; -- *namep = new_name; -- *entryp = free_entry; -- return KERN_SUCCESS; --} -- --/* - * Routine: ipc_entry_alloc - * Purpose: - * Allocate an entry out of the space. -@@ -293,38 +206,6 @@ ipc_entry_alloc_name( - return KERN_SUCCESS; - } - --/* -- * Routine: ipc_entry_dealloc -- * Purpose: -- * Deallocates an entry from a space. -- * Conditions: -- * The space must be write-locked throughout. -- * The space must be active. -- */ -- --void --ipc_entry_dealloc( -- ipc_space_t space, -- mach_port_t name, -- ipc_entry_t entry) --{ -- assert(space->is_active); -- assert(entry->ie_object == IO_NULL); -- assert(entry->ie_request == 0); -- -- if (space->is_free_list_size < IS_FREE_LIST_SIZE_LIMIT) { -- space->is_free_list_size += 1; -- entry->ie_bits &= IE_BITS_GEN_MASK; -- entry->ie_next_free = space->is_free_list; -- space->is_free_list = entry; -- } else { -- rdxtree_remove(&space->is_map, (rdxtree_key_t) name); -- ie_free(entry); -- } -- space->is_size -= 1; --} -- -- - #if MACH_KDB - #include <ddb/db_output.h> - #include <kern/task.h> -diff --git a/ipc/ipc_entry.h b/ipc/ipc_entry.h -index 451dc53..ee3c2d4 100644 ---- a/ipc/ipc_entry.h -+++ b/ipc/ipc_entry.h -@@ -104,21 +104,12 @@ extern struct kmem_cache ipc_entry_cache; - #define ie_alloc() ((ipc_entry_t) kmem_cache_alloc(&ipc_entry_cache)) - #define ie_free(e) kmem_cache_free(&ipc_entry_cache, (vm_offset_t) (e)) - --extern ipc_entry_t --ipc_entry_lookup(ipc_space_t space, mach_port_t name); -- --extern kern_return_t --ipc_entry_get(ipc_space_t space, mach_port_t *namep, ipc_entry_t *entryp); -- - extern kern_return_t - ipc_entry_alloc(ipc_space_t space, mach_port_t *namep, ipc_entry_t *entryp); - - extern kern_return_t - ipc_entry_alloc_name(ipc_space_t space, mach_port_t name, ipc_entry_t *entryp); - --extern void --ipc_entry_dealloc(ipc_space_t space, mach_port_t name, ipc_entry_t entry); -- - ipc_entry_t - db_ipc_object_by_name( - task_t task, -diff --git a/ipc/ipc_space.h b/ipc/ipc_space.h -index c90a2a3..404f708 100644 ---- a/ipc/ipc_space.h -+++ b/ipc/ipc_space.h -@@ -137,6 +137,126 @@ kern_return_t ipc_space_create(ipc_table_size_t, ipc_space_t *); - kern_return_t ipc_space_create_special(struct ipc_space **); - void ipc_space_destroy(struct ipc_space *); - -+/* IPC entry lookups. */ -+ -+/* -+ * Routine: ipc_entry_lookup -+ * Purpose: -+ * Searches for an entry, given its name. -+ * Conditions: -+ * The space must be read or write locked throughout. -+ * The space must be active. -+ */ -+ -+static inline ipc_entry_t -+ipc_entry_lookup( -+ ipc_space_t space, -+ mach_port_t name) -+{ -+ ipc_entry_t entry; -+ -+ assert(space->is_active); -+ entry = rdxtree_lookup(&space->is_map, (rdxtree_key_t) name); -+ if (entry != IE_NULL -+ && IE_BITS_TYPE(entry->ie_bits) == MACH_PORT_TYPE_NONE) -+ entry = NULL; -+ assert((entry == IE_NULL) || IE_BITS_TYPE(entry->ie_bits)); -+ return entry; -+} -+ -+/* -+ * Routine: ipc_entry_get -+ * Purpose: -+ * Tries to allocate an entry out of the space. -+ * Conditions: -+ * The space is write-locked and active throughout. -+ * An object may be locked. Will not allocate memory. -+ * Returns: -+ * KERN_SUCCESS A free entry was found. -+ * KERN_NO_SPACE No entry allocated. -+ */ -+ -+static inline kern_return_t -+ipc_entry_get( -+ ipc_space_t space, -+ mach_port_t *namep, -+ ipc_entry_t *entryp) -+{ -+ mach_port_t new_name; -+ ipc_entry_t free_entry; -+ -+ assert(space->is_active); -+ -+ /* Get entry from the free list. */ -+ free_entry = space->is_free_list; -+ if (free_entry == IE_NULL) -+ return KERN_NO_SPACE; -+ -+ space->is_free_list = free_entry->ie_next_free; -+ space->is_free_list_size -= 1; -+ -+ /* -+ * Initialize the new entry. We need only -+ * increment the generation number and clear ie_request. -+ */ -+ -+ { -+ mach_port_gen_t gen; -+ -+ assert((free_entry->ie_bits &~ IE_BITS_GEN_MASK) == 0); -+ gen = free_entry->ie_bits + IE_BITS_GEN_ONE; -+ free_entry->ie_bits = gen; -+ free_entry->ie_request = 0; -+ new_name = MACH_PORT_MAKE(free_entry->ie_name, gen); -+ } -+ -+ /* -+ * The new name can't be MACH_PORT_NULL because index -+ * is non-zero. It can't be MACH_PORT_DEAD because -+ * the table isn't allowed to grow big enough. -+ * (See comment in ipc/ipc_table.h.) -+ */ -+ -+ assert(MACH_PORT_VALID(new_name)); -+ assert(free_entry->ie_object == IO_NULL); -+ -+ space->is_size += 1; -+ *namep = new_name; -+ *entryp = free_entry; -+ return KERN_SUCCESS; -+} -+ -+/* -+ * Routine: ipc_entry_dealloc -+ * Purpose: -+ * Deallocates an entry from a space. -+ * Conditions: -+ * The space must be write-locked throughout. -+ * The space must be active. -+ */ -+ -+static inline void -+ipc_entry_dealloc( -+ ipc_space_t space, -+ mach_port_t name, -+ ipc_entry_t entry) -+{ -+ assert(space->is_active); -+ assert(entry->ie_object == IO_NULL); -+ assert(entry->ie_request == 0); -+ -+ if (space->is_free_list_size < IS_FREE_LIST_SIZE_LIMIT) { -+ space->is_free_list_size += 1; -+ entry->ie_bits &= IE_BITS_GEN_MASK; -+ entry->ie_next_free = space->is_free_list; -+ space->is_free_list = entry; -+ } else { -+ rdxtree_remove(&space->is_map, (rdxtree_key_t) name); -+ ie_free(entry); -+ } -+ space->is_size -= 1; -+} -+ - /* Reverse lookups. */ - - /* Cast a pointer to a suitable key. */ --- -2.1.4 - |