diff options
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/ipc_entry.c | 4 | ||||
-rw-r--r-- | ipc/ipc_entry.h | 8 | ||||
-rw-r--r-- | ipc/ipc_hash.c | 8 | ||||
-rw-r--r-- | ipc/ipc_hash.h | 2 | ||||
-rw-r--r-- | ipc/ipc_init.c | 47 | ||||
-rw-r--r-- | ipc/ipc_init.h | 8 | ||||
-rw-r--r-- | ipc/ipc_marequest.c | 27 | ||||
-rw-r--r-- | ipc/ipc_marequest.h | 1 | ||||
-rw-r--r-- | ipc/ipc_object.c | 3 | ||||
-rw-r--r-- | ipc/ipc_object.h | 10 | ||||
-rw-r--r-- | ipc/ipc_space.c | 4 | ||||
-rw-r--r-- | ipc/ipc_space.h | 7 | ||||
-rw-r--r-- | ipc/ipc_table.c | 7 |
13 files changed, 49 insertions, 87 deletions
diff --git a/ipc/ipc_entry.c b/ipc/ipc_entry.c index 42e8dd8..3a06244 100644 --- a/ipc/ipc_entry.c +++ b/ipc/ipc_entry.c @@ -41,7 +41,7 @@ #include <mach/port.h> #include <kern/assert.h> #include <kern/sched_prim.h> -#include <kern/zalloc.h> +#include <kern/slab.h> #include <ipc/port.h> #include <ipc/ipc_types.h> #include <ipc/ipc_entry.h> @@ -51,7 +51,7 @@ #include <ipc/ipc_table.h> #include <ipc/ipc_object.h> -zone_t ipc_tree_entry_zone; +struct kmem_cache ipc_tree_entry_cache; /* * Routine: ipc_entry_tree_collision diff --git a/ipc/ipc_entry.h b/ipc/ipc_entry.h index a577cf0..6afa4f6 100644 --- a/ipc/ipc_entry.h +++ b/ipc/ipc_entry.h @@ -41,7 +41,7 @@ #include <mach/mach_types.h> #include <mach/port.h> #include <mach/kern_return.h> -#include <kern/zalloc.h> +#include <kern/slab.h> #include <ipc/port.h> #include <ipc/ipc_table.h> #include <ipc/ipc_types.h> @@ -129,10 +129,10 @@ typedef struct ipc_tree_entry { #define ite_request ite_entry.ie_request #define ite_next ite_entry.hash.tree -extern zone_t ipc_tree_entry_zone; +extern struct kmem_cache ipc_tree_entry_cache; -#define ite_alloc() ((ipc_tree_entry_t) zalloc(ipc_tree_entry_zone)) -#define ite_free(ite) zfree(ipc_tree_entry_zone, (vm_offset_t) (ite)) +#define ite_alloc() ((ipc_tree_entry_t) kmem_cache_alloc(&ipc_tree_entry_cache)) +#define ite_free(ite) kmem_cache_free(&ipc_tree_entry_cache, (vm_offset_t) (ite)) extern ipc_entry_t diff --git a/ipc/ipc_hash.c b/ipc/ipc_hash.c index c241289..ad05016 100644 --- a/ipc/ipc_hash.c +++ b/ipc/ipc_hash.c @@ -535,13 +535,9 @@ ipc_hash_init(void) { ipc_hash_index_t i; - /* if not configured, initialize ipc_hash_global_size */ + /* initialize ipc_hash_global_size */ - if (ipc_hash_global_size == 0) { - ipc_hash_global_size = ipc_tree_entry_max >> 8; - if (ipc_hash_global_size < 32) - ipc_hash_global_size = 32; - } + ipc_hash_global_size = IPC_HASH_GLOBAL_SIZE; /* make sure it is a power of two */ diff --git a/ipc/ipc_hash.h b/ipc/ipc_hash.h index 58c56ca..929ba77 100644 --- a/ipc/ipc_hash.h +++ b/ipc/ipc_hash.h @@ -67,6 +67,8 @@ ipc_hash_delete(ipc_space_t space, ipc_object_t obj, * and the local primitives, for table entries. */ +#define IPC_HASH_GLOBAL_SIZE 256 + extern boolean_t ipc_hash_global_lookup(ipc_space_t space, ipc_object_t obj, mach_port_t *namep, ipc_tree_entry_t *entryp); diff --git a/ipc/ipc_init.c b/ipc/ipc_init.c index e9ca64d..ca7e791 100644 --- a/ipc/ipc_init.c +++ b/ipc/ipc_init.c @@ -35,8 +35,8 @@ */ #include <mach/kern_return.h> -#include <kern/mach_param.h> #include <kern/ipc_host.h> +#include <kern/slab.h> #include <vm/vm_map.h> #include <vm/vm_kern.h> #include <ipc/ipc_entry.h> @@ -52,14 +52,10 @@ -vm_map_t ipc_kernel_map; +static struct vm_map ipc_kernel_map_store; +vm_map_t ipc_kernel_map = &ipc_kernel_map_store; vm_size_t ipc_kernel_map_size = 8 * 1024 * 1024; -int ipc_space_max = SPACE_MAX; -int ipc_tree_entry_max = ITE_MAX; -int ipc_port_max = PORT_MAX; -int ipc_pset_max = SET_MAX; - /* * Routine: ipc_bootstrap * Purpose: @@ -77,28 +73,17 @@ ipc_bootstrap(void) ipc_port_timestamp_lock_init(); ipc_port_timestamp_data = 0; - ipc_space_zone = zinit(sizeof(struct ipc_space), 0, - ipc_space_max * sizeof(struct ipc_space), - sizeof(struct ipc_space), - 0, "ipc spaces"); - - ipc_tree_entry_zone = - zinit(sizeof(struct ipc_tree_entry), 0, - ipc_tree_entry_max * sizeof(struct ipc_tree_entry), - sizeof(struct ipc_tree_entry), - IPC_ZONE_TYPE, "ipc tree entries"); - - ipc_object_zones[IOT_PORT] = - zinit(sizeof(struct ipc_port), 0, - ipc_port_max * sizeof(struct ipc_port), - sizeof(struct ipc_port), - 0, "ipc ports"); - - ipc_object_zones[IOT_PORT_SET] = - zinit(sizeof(struct ipc_pset), 0, - ipc_pset_max * sizeof(struct ipc_pset), - sizeof(struct ipc_pset), - IPC_ZONE_TYPE, "ipc port sets"); + kmem_cache_init(&ipc_space_cache, "ipc_space", + sizeof(struct ipc_space), 0, NULL, NULL, NULL, 0); + + kmem_cache_init(&ipc_tree_entry_cache, "ipc_tree_entry", + sizeof(struct ipc_tree_entry), 0, NULL, NULL, NULL, 0); + + kmem_cache_init(&ipc_object_caches[IOT_PORT], "ipc_port", + sizeof(struct ipc_port), 0, NULL, NULL, NULL, 0); + + kmem_cache_init(&ipc_object_caches[IOT_PORT_SET], "ipc_pset", + sizeof(struct ipc_pset), 0, NULL, NULL, NULL, 0); /* create special spaces */ @@ -127,8 +112,8 @@ ipc_init() { vm_offset_t min, max; - ipc_kernel_map = kmem_suballoc(kernel_map, &min, &max, - ipc_kernel_map_size, TRUE); + kmem_submap(ipc_kernel_map, kernel_map, &min, &max, + ipc_kernel_map_size, TRUE); ipc_host_init(); } diff --git a/ipc/ipc_init.h b/ipc/ipc_init.h index b2f1dd4..8dd64bb 100644 --- a/ipc/ipc_init.h +++ b/ipc/ipc_init.h @@ -37,14 +37,6 @@ #ifndef _IPC_IPC_INIT_H_ #define _IPC_IPC_INIT_H_ -/* all IPC zones should be exhaustible */ -#define IPC_ZONE_TYPE ZONE_EXHAUSTIBLE - -extern int ipc_space_max; -extern int ipc_tree_entry_max; -extern int ipc_port_max; -extern int ipc_pset_max; - /* * Exported interfaces */ diff --git a/ipc/ipc_marequest.c b/ipc/ipc_marequest.c index 540382a..06c53eb 100644 --- a/ipc/ipc_marequest.c +++ b/ipc/ipc_marequest.c @@ -37,9 +37,8 @@ #include <mach/message.h> #include <mach/port.h> #include <kern/lock.h> -#include <kern/mach_param.h> #include <kern/kalloc.h> -#include <kern/zalloc.h> +#include <kern/slab.h> #include <ipc/port.h> #include <ipc/ipc_init.h> #include <ipc/ipc_space.h> @@ -58,11 +57,10 @@ #endif -zone_t ipc_marequest_zone; -int ipc_marequest_max = IMAR_MAX; +struct kmem_cache ipc_marequest_cache; -#define imar_alloc() ((ipc_marequest_t) zalloc(ipc_marequest_zone)) -#define imar_free(imar) zfree(ipc_marequest_zone, (vm_offset_t) (imar)) +#define imar_alloc() ((ipc_marequest_t) kmem_cache_alloc(&ipc_marequest_cache)) +#define imar_free(imar) kmem_cache_free(&ipc_marequest_cache, (vm_offset_t) (imar)) typedef unsigned int ipc_marequest_index_t; @@ -100,13 +98,9 @@ ipc_marequest_init(void) { ipc_marequest_index_t i; - /* if not configured, initialize ipc_marequest_size */ + /* initialize ipc_marequest_size */ - if (ipc_marequest_size == 0) { - ipc_marequest_size = ipc_marequest_max >> 8; - if (ipc_marequest_size < 16) - ipc_marequest_size = 16; - } + ipc_marequest_size = IPC_MAREQUEST_SIZE; /* make sure it is a power of two */ @@ -142,11 +136,8 @@ ipc_marequest_init(void) bucket->imarb_head = IMAR_NULL; } - ipc_marequest_zone = - zinit(sizeof(struct ipc_marequest), 0, - ipc_marequest_max * sizeof(struct ipc_marequest), - sizeof(struct ipc_marequest), - IPC_ZONE_TYPE, "ipc msg-accepted requests"); + kmem_cache_init(&ipc_marequest_cache, "ipc_marequest", + sizeof(struct ipc_marequest), 0, NULL, NULL, NULL, 0); } /* @@ -439,7 +430,7 @@ ipc_marequest_info(maxp, info, count) info[i].hib_count = bucket_count; } - *maxp = ipc_marequest_max; + *maxp = (unsigned int)-1; return ipc_marequest_size; } diff --git a/ipc/ipc_marequest.h b/ipc/ipc_marequest.h index eb3746d..4f6f758 100644 --- a/ipc/ipc_marequest.h +++ b/ipc/ipc_marequest.h @@ -70,6 +70,7 @@ typedef struct ipc_marequest { #define IMAR_NULL ((ipc_marequest_t) 0) +#define IPC_MAREQUEST_SIZE 16 extern void ipc_marequest_init(void); diff --git a/ipc/ipc_object.c b/ipc/ipc_object.c index a7a7ddb..4850fb1 100644 --- a/ipc/ipc_object.c +++ b/ipc/ipc_object.c @@ -47,8 +47,9 @@ #include <ipc/ipc_pset.h> #include <kern/debug.h> #include <kern/printf.h> +#include <kern/slab.h> -zone_t ipc_object_zones[IOT_NUMBER]; +struct kmem_cache ipc_object_caches[IOT_NUMBER]; diff --git a/ipc/ipc_object.h b/ipc/ipc_object.h index 2bbf8bd..adf5bca 100644 --- a/ipc/ipc_object.h +++ b/ipc/ipc_object.h @@ -39,7 +39,7 @@ #include <ipc/ipc_types.h> #include <kern/lock.h> #include <kern/macro_help.h> -#include <kern/zalloc.h> +#include <kern/slab.h> typedef unsigned int ipc_object_refs_t; typedef unsigned int ipc_object_bits_t; @@ -57,7 +57,7 @@ typedef struct ipc_object { #define IO_VALID(io) (((io) != IO_NULL) && ((io) != IO_DEAD)) #define IO_BITS_KOTYPE 0x0000ffff /* used by the object */ -#define IO_BITS_OTYPE 0x7fff0000 /* determines a zone */ +#define IO_BITS_OTYPE 0x7fff0000 /* determines a cache */ #define IO_BITS_ACTIVE 0x80000000U /* is object alive? */ #define io_active(io) ((int)(io)->io_bits < 0) /* hack */ @@ -75,13 +75,13 @@ typedef struct ipc_object { #define IOT_PORT_SET 1 #define IOT_NUMBER 2 /* number of types used */ -extern zone_t ipc_object_zones[IOT_NUMBER]; +extern struct kmem_cache ipc_object_caches[IOT_NUMBER]; #define io_alloc(otype) \ - ((ipc_object_t) zalloc(ipc_object_zones[(otype)])) + ((ipc_object_t) kmem_cache_alloc(&ipc_object_caches[(otype)])) #define io_free(otype, io) \ - zfree(ipc_object_zones[(otype)], (vm_offset_t) (io)) + kmem_cache_free(&ipc_object_caches[(otype)], (vm_offset_t) (io)) #define io_lock_init(io) simple_lock_init(&(io)->io_lock_data) #define io_lock(io) simple_lock(&(io)->io_lock_data) diff --git a/ipc/ipc_space.c b/ipc/ipc_space.c index 0f50f15..ab55e83 100644 --- a/ipc/ipc_space.c +++ b/ipc/ipc_space.c @@ -43,7 +43,7 @@ #include <mach/port.h> #include <kern/assert.h> #include <kern/sched_prim.h> -#include <kern/zalloc.h> +#include <kern/slab.h> #include <ipc/port.h> #include <ipc/ipc_entry.h> #include <ipc/ipc_splay.h> @@ -55,7 +55,7 @@ -zone_t ipc_space_zone; +struct kmem_cache ipc_space_cache; ipc_space_t ipc_space_kernel; ipc_space_t ipc_space_reply; diff --git a/ipc/ipc_space.h b/ipc/ipc_space.h index d030bf7..c4683d2 100644 --- a/ipc/ipc_space.h +++ b/ipc/ipc_space.h @@ -44,6 +44,7 @@ #include <mach/mach_types.h> #include <kern/macro_help.h> #include <kern/lock.h> +#include <kern/slab.h> #include <ipc/ipc_splay.h> #include <ipc/ipc_types.h> @@ -82,10 +83,10 @@ struct ipc_space { #define IS_NULL ((ipc_space_t) 0) -extern zone_t ipc_space_zone; +extern struct kmem_cache ipc_space_cache; -#define is_alloc() ((ipc_space_t) zalloc(ipc_space_zone)) -#define is_free(is) zfree(ipc_space_zone, (vm_offset_t) (is)) +#define is_alloc() ((ipc_space_t) kmem_cache_alloc(&ipc_space_cache)) +#define is_free(is) kmem_cache_free(&ipc_space_cache, (vm_offset_t) (is)) extern struct ipc_space *ipc_space_kernel; extern struct ipc_space *ipc_space_reply; diff --git a/ipc/ipc_table.c b/ipc/ipc_table.c index e572358..d5b7904 100644 --- a/ipc/ipc_table.c +++ b/ipc/ipc_table.c @@ -50,13 +50,6 @@ void ipc_table_fill( unsigned int min, vm_size_t elemsize); -/* - * We borrow the kalloc map, rather than creating - * yet another submap of the kernel map. - */ - -extern vm_map_t kalloc_map; - ipc_table_size_t ipc_table_entries; unsigned int ipc_table_entries_size = 512; |