--- Gnu-Mach/ipc/ipc_init.c 2020/09/02 04:36:56 1.1 +++ Gnu-Mach/ipc/ipc_init.c 2020/09/02 04:47:19 1.1.1.5 @@ -35,8 +35,8 @@ */ #include -#include #include +#include #include #include #include @@ -52,13 +52,9 @@ -vm_map_t ipc_kernel_map; -vm_size_t ipc_kernel_map_size = 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; +static struct vm_map ipc_kernel_map_store; +vm_map_t ipc_kernel_map = &ipc_kernel_map_store; +const vm_size_t ipc_kernel_map_size = 8 * 1024 * 1024; /* * Routine: ipc_bootstrap @@ -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), - ipc_space_max * sizeof(struct ipc_space), - sizeof(struct ipc_space), - IPC_ZONE_TYPE, "ipc spaces"); - - ipc_tree_entry_zone = - zinit(sizeof(struct ipc_tree_entry), - 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), - ipc_port_max * sizeof(struct ipc_port), - sizeof(struct ipc_port), - ZONE_EXHAUSTIBLE, "ipc ports"); - - ipc_object_zones[IOT_PORT_SET] = - zinit(sizeof(struct ipc_pset), - 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 */ @@ -108,11 +93,6 @@ ipc_bootstrap(void) kr = ipc_space_create_special(&ipc_space_reply); assert(kr == KERN_SUCCESS); -#if NORMA_IPC - kr = ipc_space_create_special(&ipc_space_remote); - assert(kr == KERN_SUCCESS); -#endif NORMA_IPC - /* initialize modules with hidden data structures */ ipc_table_init(); @@ -128,12 +108,12 @@ ipc_bootstrap(void) */ void -ipc_init() +ipc_init(void) { 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(); }