From 4934e7c3735dbd25953c922a1327a875f47046a4 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: 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 -------------------------------------------------------- 1 file changed, 119 deletions(-) (limited to 'ipc/ipc_entry.c') 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 @@ -51,93 +51,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: @@ -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 #include -- cgit v1.2.3