X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/e5568f75972dfc723778653c11cb6b4dc825716a..060df5ea7c632b1ac8cc8aac1fb59758165c2084:/osfmk/ipc/ipc_hash.c diff --git a/osfmk/ipc/ipc_hash.c b/osfmk/ipc/ipc_hash.c index 844501695..2f43a63cf 100644 --- a/osfmk/ipc/ipc_hash.c +++ b/osfmk/ipc/ipc_hash.c @@ -1,23 +1,29 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -205,16 +211,15 @@ ipc_hash_index_t ipc_hash_global_mask; ipc_hash_global_mask) typedef struct ipc_hash_global_bucket { - decl_mutex_data(, ihgb_lock_data) + decl_lck_mtx_data(, ihgb_lock_data) ipc_tree_entry_t ihgb_head; } *ipc_hash_global_bucket_t; #define IHGB_NULL ((ipc_hash_global_bucket_t) 0) -#define ihgb_lock_init(ihgb) mutex_init(&(ihgb)->ihgb_lock_data, \ - ETAP_IPC_IHGB) -#define ihgb_lock(ihgb) mutex_lock(&(ihgb)->ihgb_lock_data) -#define ihgb_unlock(ihgb) mutex_unlock(&(ihgb)->ihgb_lock_data) +#define ihgb_lock_init(ihgb) lck_mtx_init(&(ihgb)->ihgb_lock_data, &ipc_lck_grp, &ipc_lck_attr) +#define ihgb_lock(ihgb) lck_mtx_lock(&(ihgb)->ihgb_lock_data) +#define ihgb_unlock(ihgb) lck_mtx_unlock(&(ihgb)->ihgb_lock_data) ipc_hash_global_bucket_t ipc_hash_global_table; @@ -284,17 +289,14 @@ ipc_hash_global_lookup( void ipc_hash_global_insert( - ipc_space_t space, - ipc_object_t obj, - mach_port_name_t name, - ipc_tree_entry_t entry) + ipc_space_t space, + ipc_object_t obj, + __assert_only mach_port_name_t name, + ipc_tree_entry_t entry) { ipc_hash_global_bucket_t bucket; - assert(!is_fast_space(space)); - - assert(entry->ite_name == name); assert(space != IS_NULL); assert(entry->ite_space == space); @@ -325,16 +327,15 @@ ipc_hash_global_insert( void ipc_hash_global_delete( - ipc_space_t space, - ipc_object_t obj, - mach_port_name_t name, - ipc_tree_entry_t entry) + ipc_space_t space, + ipc_object_t obj, + __assert_only mach_port_name_t name, + ipc_tree_entry_t entry) { ipc_hash_global_bucket_t bucket; ipc_tree_entry_t this, *last; assert(!is_fast_space(space)); - assert(entry->ite_name == name); assert(space != IS_NULL); assert(entry->ite_space == space); @@ -393,7 +394,7 @@ ipc_hash_global_delete( */ #define IH_LOCAL_HASH(obj, size) \ - ((((mach_port_index_t) (obj)) >> 6) % (size)) + ((mach_port_index_t)((((uintptr_t) (obj)) >> 6) % (size))) /* * Routine: ipc_hash_local_lookup @@ -457,10 +458,10 @@ ipc_hash_local_lookup( void ipc_hash_local_insert( - ipc_space_t space, - ipc_object_t obj, - mach_port_index_t index, - ipc_entry_t entry) + ipc_space_t space, + ipc_object_t obj, + mach_port_index_t index, + __assert_only ipc_entry_t entry) { ipc_entry_t table; ipc_entry_num_t size; @@ -501,10 +502,10 @@ ipc_hash_local_insert( void ipc_hash_local_delete( - ipc_space_t space, - ipc_object_t obj, - mach_port_index_t index, - ipc_entry_t entry) + ipc_space_t space, + ipc_object_t obj, + mach_port_index_t index, + __assert_only ipc_entry_t entry) { ipc_entry_t table; ipc_entry_num_t size; @@ -638,6 +639,17 @@ ipc_hash_init(void) #if MACH_IPC_DEBUG +/* + * Routine: ipc_hash_size + * Purpose: + * Return the size of the global reverse hash table. + */ +natural_t +ipc_hash_size(void) +{ + return ipc_hash_global_size; +} + /* * Routine: ipc_hash_info * Purpose: @@ -653,7 +665,7 @@ ipc_hash_init(void) ipc_hash_index_t ipc_hash_info( hash_info_bucket_t *info, - mach_msg_type_number_t count) + natural_t count) { ipc_hash_index_t i;