Lines Matching refs:zone
613 struct zone *zone; in zone_key_create() local
637 for (zone = list_head(&zone_active); zone != NULL; in zone_key_create()
638 zone = list_next(&zone_active, zone)) { in zone_key_create()
641 mutex_enter(&zone->zone_lock); in zone_key_create()
644 status = zone_status_get(zone); in zone_key_create()
647 mutex_exit(&zone->zone_lock); in zone_key_create()
651 t = zsd_find_mru(&zone->zone_zsd, key); in zone_key_create()
657 mutex_exit(&zone->zone_lock); in zone_key_create()
668 zone_t *, zone, zone_key_t, key); in zone_key_create()
670 list_insert_tail(&zone->zone_zsd, t); in zone_key_create()
671 mutex_exit(&zone->zone_lock); in zone_key_create()
702 zone_t *zone; in zone_key_delete() local
714 for (zone = list_head(&zone_active); zone != NULL; in zone_key_delete()
715 zone = list_next(&zone_active, zone)) { in zone_key_delete()
718 mutex_enter(&zone->zone_lock); in zone_key_delete()
719 del = zsd_find_mru(&zone->zone_zsd, key); in zone_key_delete()
725 mutex_exit(&zone->zone_lock); in zone_key_delete()
734 zone_t *, zone, zone_key_t, key); in zone_key_delete()
740 zone_t *, zone, zone_key_t, key); in zone_key_delete()
742 mutex_exit(&zone->zone_lock); in zone_key_delete()
753 for (zone = list_head(&zone_active); zone != NULL; in zone_key_delete()
754 zone = list_next(&zone_active, zone)) { in zone_key_delete()
757 mutex_enter(&zone->zone_lock); in zone_key_delete()
758 del = zsd_find(&zone->zone_zsd, key); in zone_key_delete()
760 list_remove(&zone->zone_zsd, del); in zone_key_delete()
764 mutex_exit(&zone->zone_lock); in zone_key_delete()
780 zone_setspecific(zone_key_t key, zone_t *zone, const void *data) in zone_setspecific() argument
784 mutex_enter(&zone->zone_lock); in zone_setspecific()
785 t = zsd_find_mru(&zone->zone_zsd, key); in zone_setspecific()
791 mutex_exit(&zone->zone_lock); in zone_setspecific()
794 mutex_exit(&zone->zone_lock); in zone_setspecific()
802 zone_getspecific(zone_key_t key, zone_t *zone) in zone_getspecific() argument
807 mutex_enter(&zone->zone_lock); in zone_getspecific()
808 t = zsd_find_mru(&zone->zone_zsd, key); in zone_getspecific()
810 mutex_exit(&zone->zone_lock); in zone_getspecific()
821 zone_zsd_configure(zone_t *zone) in zone_zsd_configure() argument
827 ASSERT(list_head(&zone->zone_zsd) == NULL); in zone_zsd_configure()
828 mutex_enter(&zone->zone_lock); in zone_zsd_configure()
836 ASSERT(zsd_find(&zone->zone_zsd, zsdp->zsd_key) == NULL); in zone_zsd_configure()
846 zone_t *, zone, zone_key_t, zsdp->zsd_key); in zone_zsd_configure()
848 list_insert_tail(&zone->zone_zsd, t); in zone_zsd_configure()
851 mutex_exit(&zone->zone_lock); in zone_zsd_configure()
860 zone_zsd_callbacks(zone_t *zone, enum zsd_callback_type ct) in zone_zsd_callbacks() argument
865 ASSERT(ct != ZSD_SHUTDOWN || zone_status_get(zone) >= ZONE_IS_EMPTY); in zone_zsd_callbacks()
866 ASSERT(ct != ZSD_DESTROY || zone_status_get(zone) >= ZONE_IS_DOWN); in zone_zsd_callbacks()
874 mutex_enter(&zone->zone_lock); in zone_zsd_callbacks()
875 for (t = list_head(&zone->zone_zsd); t != NULL; in zone_zsd_callbacks()
876 t = list_next(&zone->zone_zsd, t)) { in zone_zsd_callbacks()
886 zone_t *, zone, zone_key_t, key); in zone_zsd_callbacks()
893 zone_t *, zone, zone_key_t, key); in zone_zsd_callbacks()
897 mutex_exit(&zone->zone_lock); in zone_zsd_callbacks()
900 zsd_apply_all_keys(zsd_apply_shutdown, zone); in zone_zsd_callbacks()
901 zsd_apply_all_keys(zsd_apply_destroy, zone); in zone_zsd_callbacks()
910 zone_free_zsd(zone_t *zone) in zone_free_zsd() argument
917 mutex_enter(&zone->zone_lock); in zone_free_zsd()
918 for (t = list_head(&zone->zone_zsd); t != NULL; t = next) { in zone_free_zsd()
919 next = list_next(&zone->zone_zsd, t); in zone_free_zsd()
920 list_remove(&zone->zone_zsd, t); in zone_free_zsd()
924 list_destroy(&zone->zone_zsd); in zone_free_zsd()
925 mutex_exit(&zone->zone_lock); in zone_free_zsd()
948 zone_t *zone; in zsd_apply_all_zones() local
951 zone = list_head(&zone_active); in zsd_apply_all_zones()
952 while (zone != NULL) { in zsd_apply_all_zones()
953 if ((applyfn)(&zonehash_lock, B_FALSE, zone, key)) { in zsd_apply_all_zones()
955 zone = list_head(&zone_active); in zsd_apply_all_zones()
957 zone = list_next(&zone_active, zone); in zsd_apply_all_zones()
980 zsd_apply_all_keys(zsd_applyfn_t *applyfn, zone_t *zone) in zsd_apply_all_keys() argument
984 mutex_enter(&zone->zone_lock); in zsd_apply_all_keys()
985 t = list_head(&zone->zone_zsd); in zsd_apply_all_keys()
987 if ((applyfn)(NULL, B_TRUE, zone, t->zsd_key)) { in zsd_apply_all_keys()
989 t = list_head(&zone->zone_zsd); in zsd_apply_all_keys()
991 t = list_next(&zone->zone_zsd, t); in zsd_apply_all_keys()
994 mutex_exit(&zone->zone_lock); in zsd_apply_all_keys()
1012 zone_t *zone, zone_key_t key) in zsd_apply_create() argument
1022 ASSERT(MUTEX_HELD(&zone->zone_lock)); in zsd_apply_create()
1024 mutex_enter(&zone->zone_lock); in zsd_apply_create()
1027 t = zsd_find(&zone->zone_zsd, key); in zsd_apply_create()
1034 mutex_exit(&zone->zone_lock); in zsd_apply_create()
1038 if (zsd_wait_for_inprogress(zone, t, lockp)) in zsd_apply_create()
1045 zone_t *, zone, zone_key_t, key); in zsd_apply_create()
1046 mutex_exit(&zone->zone_lock); in zsd_apply_create()
1053 zone_t *, zone, zone_key_t, key); in zsd_apply_create()
1055 result = (*t->zsd_create)(zone->zone_id); in zsd_apply_create()
1058 zone_t *, zone, voidn *, result); in zsd_apply_create()
1063 mutex_enter(&zone->zone_lock); in zsd_apply_create()
1069 zone_t *, zone, zone_key_t, key); in zsd_apply_create()
1072 mutex_exit(&zone->zone_lock); in zsd_apply_create()
1091 zone_t *zone, zone_key_t key) in zsd_apply_shutdown() argument
1101 ASSERT(MUTEX_HELD(&zone->zone_lock)); in zsd_apply_shutdown()
1103 mutex_enter(&zone->zone_lock); in zsd_apply_shutdown()
1106 t = zsd_find(&zone->zone_zsd, key); in zsd_apply_shutdown()
1113 mutex_exit(&zone->zone_lock); in zsd_apply_shutdown()
1117 if (zsd_wait_for_creator(zone, t, lockp)) in zsd_apply_shutdown()
1120 if (zsd_wait_for_inprogress(zone, t, lockp)) in zsd_apply_shutdown()
1127 zone_t *, zone, zone_key_t, key); in zsd_apply_shutdown()
1128 mutex_exit(&zone->zone_lock); in zsd_apply_shutdown()
1137 zone_t *, zone, zone_key_t, key); in zsd_apply_shutdown()
1139 (t->zsd_shutdown)(zone->zone_id, data); in zsd_apply_shutdown()
1141 zone_t *, zone, zone_key_t, key); in zsd_apply_shutdown()
1145 mutex_enter(&zone->zone_lock); in zsd_apply_shutdown()
1150 zone_t *, zone, zone_key_t, key); in zsd_apply_shutdown()
1153 mutex_exit(&zone->zone_lock); in zsd_apply_shutdown()
1172 zone_t *zone, zone_key_t key) in zsd_apply_destroy() argument
1182 ASSERT(MUTEX_HELD(&zone->zone_lock)); in zsd_apply_destroy()
1184 mutex_enter(&zone->zone_lock); in zsd_apply_destroy()
1187 t = zsd_find(&zone->zone_zsd, key); in zsd_apply_destroy()
1194 mutex_exit(&zone->zone_lock); in zsd_apply_destroy()
1198 if (zsd_wait_for_creator(zone, t, lockp)) in zsd_apply_destroy()
1201 if (zsd_wait_for_inprogress(zone, t, lockp)) in zsd_apply_destroy()
1208 zone_t *, zone, zone_key_t, key); in zsd_apply_destroy()
1209 mutex_exit(&zone->zone_lock); in zsd_apply_destroy()
1217 zone_t *, zone, zone_key_t, key); in zsd_apply_destroy()
1219 (t->zsd_destroy)(zone->zone_id, data); in zsd_apply_destroy()
1221 zone_t *, zone, zone_key_t, key); in zsd_apply_destroy()
1225 mutex_enter(&zone->zone_lock); in zsd_apply_destroy()
1231 zone_t *, zone, zone_key_t, key); in zsd_apply_destroy()
1234 mutex_exit(&zone->zone_lock); in zsd_apply_destroy()
1243 zsd_wait_for_creator(zone_t *zone, struct zsd_entry *t, kmutex_t *lockp) in zsd_wait_for_creator() argument
1249 zone_t *, zone, struct zsd_entry *, t); in zsd_wait_for_creator()
1254 cv_wait(&t->zsd_cv, &zone->zone_lock); in zsd_wait_for_creator()
1257 mutex_exit(&zone->zone_lock); in zsd_wait_for_creator()
1259 mutex_enter(&zone->zone_lock); in zsd_wait_for_creator()
1270 zsd_wait_for_inprogress(zone_t *zone, struct zsd_entry *t, kmutex_t *lockp) in zsd_wait_for_inprogress() argument
1276 zone_t *, zone, struct zsd_entry *, t); in zsd_wait_for_inprogress()
1281 cv_wait(&t->zsd_cv, &zone->zone_lock); in zsd_wait_for_inprogress()
1284 mutex_exit(&zone->zone_lock); in zsd_wait_for_inprogress()
1286 mutex_enter(&zone->zone_lock); in zsd_wait_for_inprogress()
1296 zone_free_datasets(zone_t *zone) in zone_free_datasets() argument
1300 for (t = list_head(&zone->zone_datasets); t != NULL; t = next) { in zone_free_datasets()
1301 next = list_next(&zone->zone_datasets, t); in zone_free_datasets()
1302 list_remove(&zone->zone_datasets, t); in zone_free_datasets()
1306 list_destroy(&zone->zone_datasets); in zone_free_datasets()
1327 if (e->rcep_p.zone == NULL) in zone_cpu_shares_set()
1330 e->rcep_p.zone->zone_shares = nv; in zone_cpu_shares_set()
1357 zone_t *zone = e->rcep_p.zone; in zone_cpu_cap_set() local
1362 if (zone == NULL) in zone_cpu_cap_set()
1368 return (cpucaps_zone_set(zone, nv)); in zone_cpu_cap_set()
1383 zone_t *zone = p->p_zone; in zone_lwps_usage() local
1387 mutex_enter(&zone->zone_nlwps_lock); in zone_lwps_usage()
1388 nlwps = zone->zone_nlwps; in zone_lwps_usage()
1389 mutex_exit(&zone->zone_nlwps_lock); in zone_lwps_usage()
1403 if (e->rcep_p.zone == NULL) in zone_lwps_test()
1405 ASSERT(MUTEX_HELD(&(e->rcep_p.zone->zone_nlwps_lock))); in zone_lwps_test()
1406 nlwps = e->rcep_p.zone->zone_nlwps; in zone_lwps_test()
1420 if (e->rcep_p.zone == NULL) in zone_lwps_set()
1422 e->rcep_p.zone->zone_nlwps_ctl = nv; in zone_lwps_set()
1438 zone_t *zone = p->p_zone; in zone_procs_usage() local
1442 mutex_enter(&zone->zone_nlwps_lock); in zone_procs_usage()
1443 nprocs = zone->zone_nprocs; in zone_procs_usage()
1444 mutex_exit(&zone->zone_nlwps_lock); in zone_procs_usage()
1458 if (e->rcep_p.zone == NULL) in zone_procs_test()
1460 ASSERT(MUTEX_HELD(&(e->rcep_p.zone->zone_nlwps_lock))); in zone_procs_test()
1461 nprocs = e->rcep_p.zone->zone_nprocs; in zone_procs_test()
1475 if (e->rcep_p.zone == NULL) in zone_procs_set()
1477 e->rcep_p.zone->zone_nprocs_ctl = nv; in zone_procs_set()
1496 v = e->rcep_p.zone->zone_shmmax + incr; in zone_shmmax_test()
1517 v = e->rcep_p.zone->zone_ipc.ipcq_shmmni + incr; in zone_shmmni_test()
1538 v = e->rcep_p.zone->zone_ipc.ipcq_semmni + incr; in zone_semmni_test()
1559 v = e->rcep_p.zone->zone_ipc.ipcq_msgmni + incr; in zone_msgmni_test()
1592 z = e->rcep_p.zone; in zone_locked_mem_test()
1608 if (e->rcep_p.zone == NULL) in zone_locked_mem_set()
1610 e->rcep_p.zone->zone_locked_mem_ctl = nv; in zone_locked_mem_set()
1643 z = e->rcep_p.zone; in zone_max_swap_test()
1659 if (e->rcep_p.zone == NULL) in zone_max_swap_set()
1661 e->rcep_p.zone->zone_max_swap_ctl = nv; in zone_max_swap_set()
1694 z = e->rcep_p.zone; in zone_max_lofi_test()
1710 if (e->rcep_p.zone == NULL) in zone_max_lofi_set()
1712 e->rcep_p.zone->zone_max_lofi_ctl = nv; in zone_max_lofi_set()
1727 zone_uniqid(zone_t *zone) in zone_uniqid() argument
1732 zone->zone_uniqid = uniqid++; in zone_uniqid()
1741 zone_t *zone; in zone_get_kcred() local
1744 if ((zone = zone_find_by_id(zoneid)) == NULL) in zone_get_kcred()
1746 cr = zone->zone_kcred; in zone_get_kcred()
1748 zone_rele(zone); in zone_get_kcred()
1755 zone_t *zone = ksp->ks_private; in zone_lockedmem_kstat_update() local
1761 zk->zk_usage.value.ui64 = zone->zone_locked_mem; in zone_lockedmem_kstat_update()
1762 zk->zk_value.value.ui64 = zone->zone_locked_mem_ctl; in zone_lockedmem_kstat_update()
1769 zone_t *zone = ksp->ks_private; in zone_nprocs_kstat_update() local
1775 zk->zk_usage.value.ui64 = zone->zone_nprocs; in zone_nprocs_kstat_update()
1776 zk->zk_value.value.ui64 = zone->zone_nprocs_ctl; in zone_nprocs_kstat_update()
1783 zone_t *zone = ksp->ks_private; in zone_swapresv_kstat_update() local
1789 zk->zk_usage.value.ui64 = zone->zone_max_swap; in zone_swapresv_kstat_update()
1790 zk->zk_value.value.ui64 = zone->zone_max_swap_ctl; in zone_swapresv_kstat_update()
1795 zone_kstat_create_common(zone_t *zone, char *name, in zone_kstat_create_common() argument
1801 ksp = rctl_kstat_create_zone(zone, name, KSTAT_TYPE_NAMED, in zone_kstat_create_common()
1809 ksp->ks_data_size += strlen(zone->zone_name) + 1; in zone_kstat_create_common()
1811 kstat_named_setstr(&zk->zk_zonename, zone->zone_name); in zone_kstat_create_common()
1815 ksp->ks_private = zone; in zone_kstat_create_common()
1823 zone_t *zone = ksp->ks_private; in zone_misc_kstat_update() local
1830 tmp = zone->zone_utime; in zone_misc_kstat_update()
1833 tmp = zone->zone_stime; in zone_misc_kstat_update()
1836 tmp = zone->zone_wtime; in zone_misc_kstat_update()
1840 zmp->zm_avenrun1.value.ui32 = zone->zone_avenrun[0]; in zone_misc_kstat_update()
1841 zmp->zm_avenrun5.value.ui32 = zone->zone_avenrun[1]; in zone_misc_kstat_update()
1842 zmp->zm_avenrun15.value.ui32 = zone->zone_avenrun[2]; in zone_misc_kstat_update()
1844 zmp->zm_ffcap.value.ui32 = zone->zone_ffcap; in zone_misc_kstat_update()
1845 zmp->zm_ffnoproc.value.ui32 = zone->zone_ffnoproc; in zone_misc_kstat_update()
1846 zmp->zm_ffnomem.value.ui32 = zone->zone_ffnomem; in zone_misc_kstat_update()
1847 zmp->zm_ffmisc.value.ui32 = zone->zone_ffmisc; in zone_misc_kstat_update()
1853 zone_misc_kstat_create(zone_t *zone) in zone_misc_kstat_create() argument
1858 if ((ksp = kstat_create_zone("zones", zone->zone_id, in zone_misc_kstat_create()
1859 zone->zone_name, "zone_misc", KSTAT_TYPE_NAMED, in zone_misc_kstat_create()
1861 KSTAT_FLAG_VIRTUAL, zone->zone_id)) == NULL) in zone_misc_kstat_create()
1864 if (zone->zone_id != GLOBAL_ZONEID) in zone_misc_kstat_create()
1868 ksp->ks_data_size += strlen(zone->zone_name) + 1; in zone_misc_kstat_create()
1869 ksp->ks_lock = &zone->zone_misc_lock; in zone_misc_kstat_create()
1870 zone->zone_misc_stats = zmp; in zone_misc_kstat_create()
1874 kstat_named_setstr(&zmp->zm_zonename, zone->zone_name); in zone_misc_kstat_create()
1890 ksp->ks_private = zone; in zone_misc_kstat_create()
1897 zone_kstat_create(zone_t *zone) in zone_kstat_create() argument
1899 zone->zone_lockedmem_kstat = zone_kstat_create_common(zone, in zone_kstat_create()
1901 zone->zone_swapresv_kstat = zone_kstat_create_common(zone, in zone_kstat_create()
1903 zone->zone_nprocs_kstat = zone_kstat_create_common(zone, in zone_kstat_create()
1906 if ((zone->zone_misc_ksp = zone_misc_kstat_create(zone)) == NULL) { in zone_kstat_create()
1907 zone->zone_misc_stats = kmem_zalloc( in zone_kstat_create()
1926 zone_kstat_delete(zone_t *zone) in zone_kstat_delete() argument
1928 zone_kstat_delete_common(&zone->zone_lockedmem_kstat, in zone_kstat_delete()
1930 zone_kstat_delete_common(&zone->zone_swapresv_kstat, in zone_kstat_delete()
1932 zone_kstat_delete_common(&zone->zone_nprocs_kstat, in zone_kstat_delete()
1934 zone_kstat_delete_common(&zone->zone_misc_ksp, in zone_kstat_delete()
2166 e.rcep_p.zone = &zone0; in zone_init()
2253 zone_free(zone_t *zone) in zone_free() argument
2255 ASSERT(zone != global_zone); in zone_free()
2256 ASSERT(zone->zone_ntasks == 0); in zone_free()
2257 ASSERT(zone->zone_nlwps == 0); in zone_free()
2258 ASSERT(zone->zone_nprocs == 0); in zone_free()
2259 ASSERT(zone->zone_cred_ref == 0); in zone_free()
2260 ASSERT(zone->zone_kcred == NULL); in zone_free()
2261 ASSERT(zone_status_get(zone) == ZONE_IS_DEAD || in zone_free()
2262 zone_status_get(zone) == ZONE_IS_UNINITIALIZED); in zone_free()
2263 ASSERT(list_is_empty(&zone->zone_ref_list)); in zone_free()
2268 cpucaps_zone_remove(zone); in zone_free()
2270 ASSERT(zone->zone_cpucap == NULL); in zone_free()
2273 if (zone_status_get(zone) == ZONE_IS_DEAD) { in zone_free()
2274 ASSERT(zone->zone_ref == 0); in zone_free()
2276 list_remove(&zone_deathrow, zone); in zone_free()
2280 list_destroy(&zone->zone_ref_list); in zone_free()
2281 zone_free_zsd(zone); in zone_free()
2282 zone_free_datasets(zone); in zone_free()
2283 list_destroy(&zone->zone_dl_list); in zone_free()
2285 if (zone->zone_rootvp != NULL) in zone_free()
2286 VN_RELE(zone->zone_rootvp); in zone_free()
2287 if (zone->zone_rootpath) in zone_free()
2288 kmem_free(zone->zone_rootpath, zone->zone_rootpathlen); in zone_free()
2289 if (zone->zone_name != NULL) in zone_free()
2290 kmem_free(zone->zone_name, ZONENAME_MAX); in zone_free()
2291 if (zone->zone_slabel != NULL) in zone_free()
2292 label_rele(zone->zone_slabel); in zone_free()
2293 if (zone->zone_nodename != NULL) in zone_free()
2294 kmem_free(zone->zone_nodename, _SYS_NMLN); in zone_free()
2295 if (zone->zone_domain != NULL) in zone_free()
2296 kmem_free(zone->zone_domain, _SYS_NMLN); in zone_free()
2297 if (zone->zone_privset != NULL) in zone_free()
2298 kmem_free(zone->zone_privset, sizeof (priv_set_t)); in zone_free()
2299 if (zone->zone_rctls != NULL) in zone_free()
2300 rctl_set_free(zone->zone_rctls); in zone_free()
2301 if (zone->zone_bootargs != NULL) in zone_free()
2302 strfree(zone->zone_bootargs); in zone_free()
2303 if (zone->zone_initname != NULL) in zone_free()
2304 strfree(zone->zone_initname); in zone_free()
2305 if (zone->zone_fs_allowed != NULL) in zone_free()
2306 strfree(zone->zone_fs_allowed); in zone_free()
2307 if (zone->zone_pfexecd != NULL) in zone_free()
2308 klpd_freelist(&zone->zone_pfexecd); in zone_free()
2309 id_free(zoneid_space, zone->zone_id); in zone_free()
2310 mutex_destroy(&zone->zone_lock); in zone_free()
2311 cv_destroy(&zone->zone_cv); in zone_free()
2312 rw_destroy(&zone->zone_mlps.mlpl_rwlock); in zone_free()
2313 rw_destroy(&zone->zone_mntfs_db_lock); in zone_free()
2314 kmem_free(zone, sizeof (zone_t)); in zone_free()
2325 zone_status_set(zone_t *zone, zone_status_t status) in zone_status_set() argument
2331 status >= zone_status_get(zone)); in zone_status_set()
2334 nvlist_add_string(nvl, ZONE_CB_NAME, zone->zone_name) || in zone_status_set()
2338 zone_status_table[zone->zone_status]) || in zone_status_set()
2339 nvlist_add_int32(nvl, ZONE_CB_ZONEID, zone->zone_id) || in zone_status_set()
2350 zone->zone_status = status; in zone_status_set()
2352 cv_broadcast(&zone->zone_cv); in zone_status_set()
2360 zone_status_get(zone_t *zone) in zone_status_get() argument
2362 return (zone->zone_status); in zone_status_get()
2366 zone_set_bootargs(zone_t *zone, const char *zone_bootargs) in zone_set_bootargs() argument
2371 ASSERT(zone != global_zone); in zone_set_bootargs()
2375 if (zone->zone_bootargs != NULL) in zone_set_bootargs()
2376 strfree(zone->zone_bootargs); in zone_set_bootargs()
2378 zone->zone_bootargs = strdup(buf); in zone_set_bootargs()
2386 zone_set_brand(zone_t *zone, const char *brand) in zone_set_brand() argument
2411 if ((ZONE_IS_BRANDED(zone)) || in zone_set_brand()
2412 (zone_status_get(zone) >= ZONE_IS_BOOTING)) { in zone_set_brand()
2419 zone->zone_brand = bp; in zone_set_brand()
2420 ZBROP(zone)->b_init_brand_data(zone); in zone_set_brand()
2427 zone_set_fs_allowed(zone_t *zone, const char *zone_fs_allowed) in zone_set_fs_allowed() argument
2432 ASSERT(zone != global_zone); in zone_set_fs_allowed()
2437 if (zone->zone_fs_allowed != NULL) in zone_set_fs_allowed()
2438 strfree(zone->zone_fs_allowed); in zone_set_fs_allowed()
2440 zone->zone_fs_allowed = strdup(buf); in zone_set_fs_allowed()
2448 zone_set_initname(zone_t *zone, const char *zone_initname) in zone_set_initname() argument
2454 ASSERT(zone != global_zone); in zone_set_initname()
2458 if (zone->zone_initname != NULL) in zone_set_initname()
2459 strfree(zone->zone_initname); in zone_set_initname()
2461 zone->zone_initname = kmem_alloc(strlen(initname) + 1, KM_SLEEP); in zone_set_initname()
2462 (void) strcpy(zone->zone_initname, initname); in zone_set_initname()
2467 zone_set_phys_mcap(zone_t *zone, const uint64_t *zone_mcap) in zone_set_phys_mcap() argument
2473 zone->zone_phys_mcap = mcap; in zone_set_phys_mcap()
2479 zone_set_sched_class(zone_t *zone, const char *new_class) in zone_set_sched_class() argument
2485 ASSERT(zone != global_zone); in zone_set_sched_class()
2491 zone->zone_defaultcid = classid; in zone_set_sched_class()
2492 ASSERT(zone->zone_defaultcid > 0 && in zone_set_sched_class()
2493 zone->zone_defaultcid < loaded_classes); in zone_set_sched_class()
2502 zone_status_wait(zone_t *zone, zone_status_t status) in zone_status_wait() argument
2507 while (zone->zone_status < status) { in zone_status_wait()
2508 cv_wait(&zone->zone_cv, &zone_status_lock); in zone_status_wait()
2517 zone_status_wait_cpr(zone_t *zone, zone_status_t status, char *str) in zone_status_wait_cpr() argument
2526 while (zone->zone_status < status) { in zone_status_wait_cpr()
2528 cv_wait(&zone->zone_cv, &zone_status_lock); in zone_status_wait_cpr()
2542 zone_status_wait_sig(zone_t *zone, zone_status_t status) in zone_status_wait_sig() argument
2547 while (zone->zone_status < status) { in zone_status_wait_sig()
2548 if (!cv_wait_sig(&zone->zone_cv, &zone_status_lock)) { in zone_status_wait_sig()
2563 zone_status_timedwait(zone_t *zone, clock_t tim, zone_status_t status) in zone_status_timedwait() argument
2570 while (zone->zone_status < status && timeleft != -1) { in zone_status_timedwait()
2571 timeleft = cv_timedwait(&zone->zone_cv, &zone_status_lock, tim); in zone_status_timedwait()
2583 zone_status_timedwait_sig(zone_t *zone, clock_t tim, zone_status_t status) in zone_status_timedwait_sig() argument
2590 while (zone->zone_status < status) { in zone_status_timedwait_sig()
2591 timeleft = cv_timedwait_sig(&zone->zone_cv, &zone_status_lock, in zone_status_timedwait_sig()
2653 #define ZONE_IS_UNREF(zone) ((zone)->zone_ref == 1 && \ argument
2654 (!zone_wait_for_cred || (zone)->zone_cred_ref == 0))
2827 zone_task_rele(zone_t *zone) in zone_task_rele() argument
2831 mutex_enter(&zone->zone_lock); in zone_task_rele()
2832 ASSERT(zone->zone_ntasks != 0); in zone_task_rele()
2833 refcnt = --zone->zone_ntasks; in zone_task_rele()
2835 mutex_exit(&zone->zone_lock); in zone_task_rele()
2838 zone_hold_locked(zone); /* so we can use the zone_t later */ in zone_task_rele()
2839 mutex_exit(&zone->zone_lock); in zone_task_rele()
2845 if (zone_status_get(zone) != ZONE_IS_SHUTTING_DOWN) { in zone_task_rele()
2853 mutex_enter(&zone->zone_lock); in zone_task_rele()
2854 if (refcnt != zone->zone_ntasks) { in zone_task_rele()
2855 mutex_exit(&zone->zone_lock); in zone_task_rele()
2858 mutex_exit(&zone->zone_lock); in zone_task_rele()
2863 zone_status_set(zone, ZONE_IS_EMPTY); in zone_task_rele()
2871 zone->zone_zsched = NULL; /* paranoia */ in zone_task_rele()
2873 zone_status_set(zone, ZONE_IS_DEAD); in zone_task_rele()
2876 zone_rele(zone); in zone_task_rele()
2893 zone_t *zone = NULL; in zone_find_all_by_id() local
2899 zone = (zone_t *)hv; in zone_find_all_by_id()
2900 return (zone); in zone_find_all_by_id()
2907 zone_t *zone = NULL; in zone_find_all_by_label() local
2917 zone = (zone_t *)hv; in zone_find_all_by_label()
2918 return (zone); in zone_find_all_by_label()
2925 zone_t *zone = NULL; in zone_find_all_by_name() local
2930 zone = (zone_t *)hv; in zone_find_all_by_name()
2931 return (zone); in zone_find_all_by_name()
2945 zone_t *zone; in zone_find_by_id() local
2949 if ((zone = zone_find_all_by_id(zoneid)) == NULL) { in zone_find_by_id()
2953 status = zone_status_get(zone); in zone_find_by_id()
2961 zone_hold(zone); in zone_find_by_id()
2963 return (zone); in zone_find_by_id()
2972 zone_t *zone; in zone_find_by_label() local
2976 if ((zone = zone_find_all_by_label(label)) == NULL) { in zone_find_by_label()
2981 status = zone_status_get(zone); in zone_find_by_label()
2989 zone_hold(zone); in zone_find_by_label()
2991 return (zone); in zone_find_by_label()
3000 zone_t *zone; in zone_find_by_name() local
3004 if ((zone = zone_find_all_by_name(name)) == NULL) { in zone_find_by_name()
3008 status = zone_status_get(zone); in zone_find_by_name()
3016 zone_hold(zone); in zone_find_by_name()
3018 return (zone); in zone_find_by_name()
3036 zone_t *zone; in zone_find_by_path() local
3049 for (zone = list_head(&zone_active); zone != NULL; in zone_find_by_path()
3050 zone = list_next(&zone_active, zone)) { in zone_find_by_path()
3051 if (ZONE_PATH_VISIBLE(path, zone)) in zone_find_by_path()
3052 zret = zone; in zone_find_by_path()
3159 zone_ncpus_get(zone_t *zone) in zone_ncpus_get() argument
3161 int myncpus = zone == NULL ? 0 : zone->zone_ncpus; in zone_ncpus_get()
3172 zone_ncpus_online_get(zone_t *zone) in zone_ncpus_online_get() argument
3174 int myncpus_online = zone == NULL ? 0 : zone->zone_ncpus_online; in zone_ncpus_online_get()
3183 zone_pool_get(zone_t *zone) in zone_pool_get() argument
3187 return (zone->zone_pool); in zone_pool_get()
3195 zone_pool_set(zone_t *zone, pool_t *pool) in zone_pool_set() argument
3200 zone->zone_pool = pool; in zone_pool_set()
3201 zone_pset_set(zone, pool->pool_pset->pset_id); in zone_pool_set()
3210 zone_pset_get(zone_t *zone) in zone_pset_get() argument
3214 return (zone->zone_psetid); in zone_pset_get()
3223 zone_pset_set(zone_t *zone, psetid_t newpsetid) in zone_pset_set() argument
3228 oldpsetid = zone_pset_get(zone); in zone_pset_set()
3235 if (zone != global_zone) { in zone_pset_set()
3236 zone->zone_psetid = newpsetid; in zone_pset_set()
3238 pool_pset_visibility_add(newpsetid, zone); in zone_pset_set()
3240 pool_pset_visibility_remove(oldpsetid, zone); in zone_pset_set()
3247 zone->zone_ncpus = 0; in zone_pset_set()
3248 zone->zone_ncpus_online = 0; in zone_pset_set()
3263 zone_t *zone; in zone_walk() local
3268 for (zone = list_head(&zone_active); zone != NULL; in zone_walk()
3269 zone = list_next(&zone_active, zone)) { in zone_walk()
3273 status = zone_status_get(zone); in zone_walk()
3280 ret = (*cb)(zone, data); in zone_walk()
3289 zone_set_root(zone_t *zone, const char *upath) in zone_set_root() argument
3340 zone->zone_rootvp = vp; /* we hold a reference to vp */ in zone_set_root()
3341 zone->zone_rootpath = path; in zone_set_root()
3342 zone->zone_rootpathlen = pathlen; in zone_set_root()
3344 zone->zone_flags |= ZF_IS_SCRATCH; in zone_set_root()
3358 zone_set_name(zone_t *zone, const char *uname) in zone_set_name() argument
3391 zone->zone_name = kname; in zone_set_name()
3431 zone_t *zone = curproc->p_zone; in zthread_create() local
3432 proc_t *pp = zone->zone_zsched; in zthread_create()
3434 zone_hold(zone); /* Reference to be dropped when thread exits */ in zthread_create()
3441 ASSERT(!(zone->zone_kthreads == NULL && in zthread_create()
3442 zone_status_get(zone) >= ZONE_IS_EMPTY)); in zthread_create()
3450 if (zone->zone_kthreads == NULL) { in zthread_create()
3453 kthread_t *tx = zone->zone_kthreads; in zthread_create()
3460 zone->zone_kthreads = t; in zthread_create()
3490 zone_t *zone = pp->p_zone; in zthread_exit() local
3519 zone->zone_kthreads = NULL; in zthread_exit()
3520 if (zone_status_get(zone) == ZONE_IS_EMPTY) { in zthread_exit()
3521 zone_status_set(zone, ZONE_IS_DOWN); in zthread_exit()
3525 cpucaps_zone_remove(zone); in zthread_exit()
3530 if (zone->zone_kthreads == t) in zthread_exit()
3531 zone->zone_kthreads = t->t_forw; in zthread_exit()
3534 zone_rele(zone); in zthread_exit()
3665 zone_t *zone; member
3683 zone_t *zone = za->zone; in zsched() local
3708 zone_hold(zone); /* this hold is released by zone_destroy() */ in zsched()
3709 zone->zone_zsched = pp; in zsched()
3711 pp->p_zone = zone; in zsched()
3738 upcount_inc(crgetruid(kcred), zone->zone_id); in zsched()
3768 tk = task_create(0, zone); in zsched()
3774 mutex_enter(&zone->zone_mem_lock); in zsched()
3775 zone->zone_locked_mem += pp->p_locked_mem; in zsched()
3777 mutex_exit(&zone->zone_mem_lock); in zsched()
3784 mutex_enter(&zone->zone_nlwps_lock); in zsched()
3787 zone->zone_nlwps += pp->p_lwpcnt; in zsched()
3789 zone->zone_nprocs++; in zsched()
3790 mutex_exit(&zone->zone_nlwps_lock); in zsched()
3800 cr = zone->zone_kcred; in zsched()
3821 zone_chdir(zone->zone_rootvp, &PTOU(pp)->u_cdir, pp); in zsched()
3822 zone_chdir(zone->zone_rootvp, &PTOU(pp)->u_rdir, pp); in zsched()
3830 e.rcep_p.zone = zone; in zsched()
3832 zone->zone_rctls = rctl_set_init(RCENTITY_ZONE, pp, &e, set, gp); in zsched()
3905 zone_uniqid(zone); in zsched()
3906 zone_zsd_configure(zone); in zsched()
3908 zone_pset_set(zone, pool_default->pool_pset->pset_id); in zsched()
3910 ASSERT(zone_status_get(zone) == ZONE_IS_UNINITIALIZED); in zsched()
3911 zone_status_set(zone, ZONE_IS_INITIALIZED); in zsched()
3918 zsd_apply_all_keys(zsd_apply_create, zone); in zsched()
3922 ASSERT(zone_status_get(zone) == ZONE_IS_INITIALIZED); in zsched()
3923 zone_status_set(zone, ZONE_IS_READY); in zsched()
3930 zone_status_wait_cpr(zone, ZONE_IS_BOOTING, "zsched"); in zsched()
3932 if (zone_status_get(zone) == ZONE_IS_BOOTING) { in zsched()
3950 if (zone->zone_defaultcid > 0) in zsched()
3951 cid = zone->zone_defaultcid; in zsched()
3953 cid = pool_get_class(zone->zone_pool); in zsched()
3962 if ((zone->zone_boot_err = newproc(zone_start_init, NULL, cid, in zsched()
3965 zone_status_set(zone, ZONE_IS_SHUTTING_DOWN); in zsched()
3968 zone->zone_boot_time = gethrestime_sec(); in zsched()
3978 zone_status_wait_cpr(zone, ZONE_IS_DYING, "zsched"); in zsched()
3996 crfree(zone->zone_kcred); in zsched()
3997 zone->zone_kcred = NULL; in zsched()
4048 zone_t *zone; in zone_is_nested() local
4061 for (zone = list_head(&zone_active); zone != NULL; in zone_is_nested()
4062 zone = list_next(&zone_active, zone)) { in zone_is_nested()
4063 if (zone == global_zone) in zone_is_nested()
4065 len = strlen(zone->zone_rootpath); in zone_is_nested()
4066 if (strncmp(rootpath, zone->zone_rootpath, in zone_is_nested()
4074 zone_set_privset(zone_t *zone, const priv_set_t *zone_privs, in zone_set_privset() argument
4089 zone->zone_privset = privs; in zone_set_privset()
4182 zone_set_label(zone_t *zone, const bslabel_t *lab, uint32_t doi) in zone_set_label() argument
4194 zone->zone_slabel = tsl; in zone_set_label()
4202 parse_zfs(zone_t *zone, caddr_t ubuf, size_t buflen) in parse_zfs() argument
4235 list_insert_head(&zone->zone_datasets, zd); in parse_zfs()
4267 zone_t *zone, *ztmp; in zone_create() local
4283 zone = kmem_zalloc(sizeof (zone_t), KM_SLEEP); in zone_create()
4284 zoneid = zone->zone_id = id_alloc(zoneid_space); in zone_create()
4285 zone->zone_status = ZONE_IS_UNINITIALIZED; in zone_create()
4286 zone->zone_pool = pool_default; in zone_create()
4287 zone->zone_pool_mod = gethrtime(); in zone_create()
4288 zone->zone_psetid = ZONE_PS_INVAL; in zone_create()
4289 zone->zone_ncpus = 0; in zone_create()
4290 zone->zone_ncpus_online = 0; in zone_create()
4291 zone->zone_restart_init = B_TRUE; in zone_create()
4292 zone->zone_brand = &native_brand; in zone_create()
4293 zone->zone_initname = NULL; in zone_create()
4294 mutex_init(&zone->zone_lock, NULL, MUTEX_DEFAULT, NULL); in zone_create()
4295 mutex_init(&zone->zone_nlwps_lock, NULL, MUTEX_DEFAULT, NULL); in zone_create()
4296 mutex_init(&zone->zone_mem_lock, NULL, MUTEX_DEFAULT, NULL); in zone_create()
4297 cv_init(&zone->zone_cv, NULL, CV_DEFAULT, NULL); in zone_create()
4298 list_create(&zone->zone_ref_list, sizeof (zone_ref_t), in zone_create()
4300 list_create(&zone->zone_zsd, sizeof (struct zsd_entry), in zone_create()
4302 list_create(&zone->zone_datasets, sizeof (zone_dataset_t), in zone_create()
4304 list_create(&zone->zone_dl_list, sizeof (zone_dl_t), in zone_create()
4306 rw_init(&zone->zone_mlps.mlpl_rwlock, NULL, RW_DEFAULT, NULL); in zone_create()
4307 rw_init(&zone->zone_mntfs_db_lock, NULL, RW_DEFAULT, NULL); in zone_create()
4310 zone->zone_flags |= ZF_NET_EXCL; in zone_create()
4313 if ((error = zone_set_name(zone, zone_name)) != 0) { in zone_create()
4314 zone_free(zone); in zone_create()
4318 if ((error = zone_set_root(zone, zone_root)) != 0) { in zone_create()
4319 zone_free(zone); in zone_create()
4322 if ((error = zone_set_privset(zone, zone_privs, zone_privssz)) != 0) { in zone_create()
4323 zone_free(zone); in zone_create()
4328 zone->zone_nodename = kmem_alloc(_SYS_NMLN, KM_SLEEP); in zone_create()
4329 (void) strncpy(zone->zone_nodename, zone->zone_name, _SYS_NMLN); in zone_create()
4330 zone->zone_nodename[_SYS_NMLN - 1] = '\0'; in zone_create()
4332 zone->zone_domain = kmem_alloc(_SYS_NMLN, KM_SLEEP); in zone_create()
4333 zone->zone_domain[0] = '\0'; in zone_create()
4334 zone->zone_hostid = HW_INVALID_HOSTID; in zone_create()
4335 zone->zone_shares = 1; in zone_create()
4336 zone->zone_shmmax = 0; in zone_create()
4337 zone->zone_ipc.ipcq_shmmni = 0; in zone_create()
4338 zone->zone_ipc.ipcq_semmni = 0; in zone_create()
4339 zone->zone_ipc.ipcq_msgmni = 0; in zone_create()
4340 zone->zone_bootargs = NULL; in zone_create()
4341 zone->zone_fs_allowed = NULL; in zone_create()
4342 zone->zone_initname = in zone_create()
4344 (void) strcpy(zone->zone_initname, zone_default_initname); in zone_create()
4345 zone->zone_nlwps = 0; in zone_create()
4346 zone->zone_nlwps_ctl = INT_MAX; in zone_create()
4347 zone->zone_nprocs = 0; in zone_create()
4348 zone->zone_nprocs_ctl = INT_MAX; in zone_create()
4349 zone->zone_locked_mem = 0; in zone_create()
4350 zone->zone_locked_mem_ctl = UINT64_MAX; in zone_create()
4351 zone->zone_max_swap = 0; in zone_create()
4352 zone->zone_max_swap_ctl = UINT64_MAX; in zone_create()
4353 zone->zone_max_lofi = 0; in zone_create()
4354 zone->zone_max_lofi_ctl = UINT64_MAX; in zone_create()
4361 zone->zone_rctls = NULL; in zone_create()
4364 zone_free(zone); in zone_create()
4368 if ((error = parse_zfs(zone, zfsbuf, zfsbufsz)) != 0) { in zone_create()
4369 zone_free(zone); in zone_create()
4377 zone->zone_match = match; in zone_create()
4378 if (is_system_labeled() && !(zone->zone_flags & ZF_IS_SCRATCH)) { in zone_create()
4381 zone_free(zone); in zone_create()
4385 error = zone_set_label(zone, label, default_doi); in zone_create()
4387 zone_free(zone); in zone_create()
4393 zone->zone_slabel = l_admin_low; in zone_create()
4404 zone_free(zone); in zone_create()
4409 if (block_mounts(zone) == 0) { in zone_create()
4414 zone_free(zone); in zone_create()
4424 zone->zone_kcred = crdup(kcred); in zone_create()
4425 crsetzone(zone->zone_kcred, zone); in zone_create()
4426 priv_intersect(zone->zone_privset, &CR_PPRIV(zone->zone_kcred)); in zone_create()
4427 priv_intersect(zone->zone_privset, &CR_EPRIV(zone->zone_kcred)); in zone_create()
4428 priv_intersect(zone->zone_privset, &CR_IPRIV(zone->zone_kcred)); in zone_create()
4429 priv_intersect(zone->zone_privset, &CR_LPRIV(zone->zone_kcred)); in zone_create()
4438 if ((ztmp = zone_find_all_by_name(zone->zone_name)) != NULL || in zone_create()
4440 (ztmp = zone_find_all_by_label(zone->zone_slabel)) != NULL)) { in zone_create()
4459 if (zone_is_nested(zone->zone_rootpath)) { in zone_create()
4470 if (zone_mount_count(zone->zone_rootpath) != 0) { in zone_create()
4485 (mod_hash_key_t)(uintptr_t)zone->zone_id, in zone_create()
4486 (mod_hash_val_t)(uintptr_t)zone); in zone_create()
4487 str = kmem_alloc(strlen(zone->zone_name) + 1, KM_SLEEP); in zone_create()
4488 (void) strcpy(str, zone->zone_name); in zone_create()
4490 (mod_hash_val_t)(uintptr_t)zone); in zone_create()
4493 (mod_hash_key_t)zone->zone_slabel, (mod_hash_val_t)zone); in zone_create()
4494 zone->zone_flags |= ZF_HASHED_LABEL; in zone_create()
4503 list_insert_tail(&zone_active, zone); in zone_create()
4506 zarg.zone = zone; in zone_create()
4520 list_remove(&zone_active, zone); in zone_create()
4521 if (zone->zone_flags & ZF_HASHED_LABEL) { in zone_create()
4522 ASSERT(zone->zone_slabel != NULL); in zone_create()
4524 (mod_hash_key_t)zone->zone_slabel); in zone_create()
4527 (mod_hash_key_t)(uintptr_t)zone->zone_name); in zone_create()
4529 (mod_hash_key_t)(uintptr_t)zone->zone_id); in zone_create()
4542 zone_kstat_create(zone); in zone_create()
4555 zone_status_wait(zone, ZONE_IS_READY); in zone_create()
4559 resume_mounts(zone); in zone_create()
4574 resume_mounts(zone); in zone_create()
4581 ASSERT(zone->zone_cred_ref == 1); in zone_create()
4582 ASSERT(zone->zone_kcred->cr_ref == 1); in zone_create()
4583 ASSERT(zone->zone_ref == 0); in zone_create()
4584 zkcr = zone->zone_kcred; in zone_create()
4585 zone->zone_kcred = NULL; in zone_create()
4600 zone_t *zone; in zone_boot() local
4612 if ((zone = zone_find_all_by_id(zoneid)) == NULL) { in zone_boot()
4618 if (zone_status_get(zone) != ZONE_IS_READY) { in zone_boot()
4623 zone_status_set(zone, ZONE_IS_BOOTING); in zone_boot()
4626 zone_hold(zone); /* so we can use the zone_t later */ in zone_boot()
4629 if (zone_status_wait_sig(zone, ZONE_IS_RUNNING) == 0) { in zone_boot()
4630 zone_rele(zone); in zone_boot()
4639 err = zone->zone_boot_err; in zone_boot()
4640 zone_rele(zone); in zone_boot()
4649 zone_empty(zone_t *zone) in zone_empty() argument
4659 while ((waitstatus = zone_status_timedwait_sig(zone, in zone_empty()
4661 killall(zone->zone_id); in zone_empty()
4683 zone_list_access(zone_t *zone) in zone_list_access() argument
4687 curproc->p_zone == zone) { in zone_list_access()
4689 } else if (is_system_labeled() && !(zone->zone_flags & ZF_IS_SCRATCH)) { in zone_list_access()
4694 zone_label = label2bslabel(zone->zone_slabel); in zone_list_access()
4696 if (zone->zone_id != GLOBAL_ZONEID && in zone_list_access()
4720 zone_t *zone; in zone_shutdown() local
4733 if ((zone = zone_find_all_by_id(zoneid)) == NULL) { in zone_shutdown()
4742 zone_hold(zone); in zone_shutdown()
4753 if (block_mounts(zone) == 0) { in zone_shutdown()
4754 zone_rele(zone); in zone_shutdown()
4760 status = zone_status_get(zone); in zone_shutdown()
4767 resume_mounts(zone); in zone_shutdown()
4768 zone_rele(zone); in zone_shutdown()
4778 resume_mounts(zone); in zone_shutdown()
4779 zone_rele(zone); in zone_shutdown()
4790 mutex_enter(&zone->zone_lock); in zone_shutdown()
4791 if ((ntasks = zone->zone_ntasks) != 1) { in zone_shutdown()
4795 zone_status_set(zone, ZONE_IS_SHUTTING_DOWN); in zone_shutdown()
4797 mutex_exit(&zone->zone_lock); in zone_shutdown()
4804 if (zone->zone_kthreads == NULL) { in zone_shutdown()
4808 zone_status_set(zone, ZONE_IS_DOWN); in zone_shutdown()
4810 zone_status_set(zone, ZONE_IS_EMPTY); in zone_shutdown()
4816 resume_mounts(zone); in zone_shutdown()
4818 if (error = zone_empty(zone)) { in zone_shutdown()
4819 zone_rele(zone); in zone_shutdown()
4836 zone_rele(zone); in zone_shutdown()
4841 zone_pool_set(zone, pool_default); in zone_shutdown()
4845 zone_pset_set(zone, ZONE_PS_INVAL); in zone_shutdown()
4854 zone_zsd_callbacks(zone, ZSD_SHUTDOWN); in zone_shutdown()
4857 if (zone->zone_kthreads == NULL && zone_status_get(zone) < ZONE_IS_DOWN) in zone_shutdown()
4858 zone_status_set(zone, ZONE_IS_DOWN); in zone_shutdown()
4864 if (!zone_status_wait_sig(zone, ZONE_IS_DOWN)) { in zone_shutdown()
4865 zone_rele(zone); in zone_shutdown()
4875 zone_rele(zone); in zone_shutdown()
4884 zone_log_refcounts(zone_t *zone) in zone_log_refcounts() argument
4913 mutex_enter(&zone->zone_lock); in zone_log_refcounts()
4914 zone->zone_flags |= ZF_REFCOUNTS_LOGGED; in zone_log_refcounts()
4915 ref = zone->zone_ref; in zone_log_refcounts()
4916 cred_ref = zone->zone_cred_ref; in zone_log_refcounts()
4918 if (zone->zone_subsys_ref[index] != 0) in zone_log_refcounts()
4927 mutex_exit(&zone->zone_lock); in zone_log_refcounts()
4931 zone->zone_name, zone->zone_id, ref, cred_ref); in zone_log_refcounts()
4953 if (zone->zone_subsys_ref[index] != 0) in zone_log_refcounts()
4956 zone->zone_subsys_ref[index]); in zone_log_refcounts()
4958 mutex_exit(&zone->zone_lock); in zone_log_refcounts()
4969 "%u credential references are still extant %s", zone->zone_name, in zone_log_refcounts()
4970 zone->zone_id, ref, cred_ref, buffer); in zone_log_refcounts()
4986 zone_t *zone; in zone_destroy() local
5001 if ((zone = zone_find_all_by_id(zoneid)) == NULL) { in zone_destroy()
5006 if (zone_mount_count(zone->zone_rootpath) != 0) { in zone_destroy()
5011 status = zone_status_get(zone); in zone_destroy()
5017 zone_status_set(zone, ZONE_IS_DYING); /* Tell zsched to exit */ in zone_destroy()
5020 zone_hold(zone); in zone_destroy()
5026 zone_status_wait(zone, ZONE_IS_DEAD); in zone_destroy()
5027 zone_zsd_callbacks(zone, ZSD_DESTROY); in zone_destroy()
5028 zone->zone_netstack = NULL; in zone_destroy()
5029 uniqid = zone->zone_uniqid; in zone_destroy()
5030 zone_rele(zone); in zone_destroy()
5031 zone = NULL; /* potentially free'd */ in zone_destroy()
5040 if ((zone = zone_find_all_by_id(zoneid)) == NULL || in zone_destroy()
5041 zone->zone_uniqid != uniqid) { in zone_destroy()
5049 mutex_enter(&zone->zone_lock); in zone_destroy()
5050 unref = ZONE_IS_UNREF(zone); in zone_destroy()
5051 refs_have_been_logged = (zone->zone_flags & in zone_destroy()
5053 mutex_exit(&zone->zone_lock); in zone_destroy()
5121 zone_log_refcounts(zone); in zone_destroy()
5134 cpucaps_zone_remove(zone); in zone_destroy()
5137 zone_kstat_delete(zone); in zone_destroy()
5140 if (zone->zone_pfexecd != NULL) { in zone_destroy()
5141 klpd_freelist(&zone->zone_pfexecd); in zone_destroy()
5142 zone->zone_pfexecd = NULL; in zone_destroy()
5146 if (ZONE_IS_BRANDED(zone)) in zone_destroy()
5147 ZBROP(zone)->b_free_brand_data(zone); in zone_destroy()
5150 brand_unregister_zone(zone->zone_brand); in zone_destroy()
5160 list_remove(&zone_active, zone); in zone_destroy()
5162 (mod_hash_key_t)zone->zone_name); in zone_destroy()
5164 (mod_hash_key_t)(uintptr_t)zone->zone_id); in zone_destroy()
5165 if (zone->zone_flags & ZF_HASHED_LABEL) in zone_destroy()
5167 (mod_hash_key_t)zone->zone_slabel); in zone_destroy()
5174 if (zone->zone_rootvp != NULL) { in zone_destroy()
5175 VN_RELE(zone->zone_rootvp); in zone_destroy()
5176 zone->zone_rootvp = NULL; in zone_destroy()
5181 list_insert_tail(&zone_deathrow, zone); in zone_destroy()
5188 zone_rele(zone); in zone_destroy()
5200 zone_t *zone; in zone_getattr() local
5211 if ((zone = zone_find_all_by_id(zoneid)) == NULL) { in zone_getattr()
5215 zone_status = zone_status_get(zone); in zone_getattr()
5220 zone_hold(zone); in zone_getattr()
5228 if (!zone_list_access(zone)) { in zone_getattr()
5229 zone_rele(zone); in zone_getattr()
5240 if (zone != global_zone) in zone_getattr()
5241 size = zone->zone_rootpathlen - 1; in zone_getattr()
5243 size = zone->zone_rootpathlen; in zone_getattr()
5245 bcopy(zone->zone_rootpath, zonepath, size); in zone_getattr()
5262 int zname_len = strlen(zone->zone_name); in zone_getattr()
5267 bcopy(zone->zone_name, zonepath + in zone_getattr()
5284 size = strlen(zone->zone_name) + 1; in zone_getattr()
5288 err = copyoutstr(zone->zone_name, buf, bufsize, NULL); in zone_getattr()
5302 zone_status = zone_status_get(zone); in zone_getattr()
5308 size = sizeof (zone->zone_flags); in zone_getattr()
5311 flags = zone->zone_flags; in zone_getattr()
5321 copyout(zone->zone_privset, buf, bufsize) != 0) in zone_getattr()
5325 size = sizeof (zone->zone_uniqid); in zone_getattr()
5329 copyout(&zone->zone_uniqid, buf, bufsize) != 0) in zone_getattr()
5341 pool = zone_pool_get(zone); in zone_getattr()
5355 if (zone->zone_slabel == NULL) in zone_getattr()
5358 copyout(label2bslabel(zone->zone_slabel), buf, in zone_getattr()
5366 initpid = zone->zone_proc_initpid; in zone_getattr()
5376 size = strlen(zone->zone_brand->b_name) + 1; in zone_getattr()
5381 err = copyoutstr(zone->zone_brand->b_name, buf, in zone_getattr()
5388 size = strlen(zone->zone_initname) + 1; in zone_getattr()
5392 err = copyoutstr(zone->zone_initname, buf, bufsize, in zone_getattr()
5399 if (zone->zone_bootargs == NULL) in zone_getattr()
5402 outstr = zone->zone_bootargs; in zone_getattr()
5413 size = sizeof (zone->zone_phys_mcap); in zone_getattr()
5417 copyout(&zone->zone_phys_mcap, buf, bufsize) != 0) in zone_getattr()
5423 if (zone->zone_defaultcid >= loaded_classes) in zone_getattr()
5426 outstr = sclass[zone->zone_defaultcid].cl_name; in zone_getattr()
5439 if (zone->zone_hostid != HW_INVALID_HOSTID && in zone_getattr()
5440 bufsize == sizeof (zone->zone_hostid)) { in zone_getattr()
5441 size = sizeof (zone->zone_hostid); in zone_getattr()
5442 if (buf != NULL && copyout(&zone->zone_hostid, buf, in zone_getattr()
5450 if (zone->zone_fs_allowed == NULL) in zone_getattr()
5453 outstr = zone->zone_fs_allowed; in zone_getattr()
5475 if ((attr >= ZONE_ATTR_BRAND_ATTRS) && ZONE_IS_BRANDED(zone)) { in zone_getattr()
5477 error = ZBROP(zone)->b_getattr(zone, attr, buf, &size); in zone_getattr()
5482 zone_rele(zone); in zone_getattr()
5496 zone_t *zone; in zone_setattr() local
5513 if ((zone = zone_find_all_by_id(zoneid)) == NULL) { in zone_setattr()
5517 zone_hold(zone); in zone_setattr()
5524 zone_status = zone_status_get(zone); in zone_setattr()
5532 err = zone_set_initname(zone, (const char *)buf); in zone_setattr()
5535 zone->zone_restart_init = B_FALSE; in zone_setattr()
5539 err = zone_set_bootargs(zone, (const char *)buf); in zone_setattr()
5542 err = zone_set_brand(zone, (const char *)buf); in zone_setattr()
5545 err = zone_set_fs_allowed(zone, (const char *)buf); in zone_setattr()
5548 err = zone_set_phys_mcap(zone, (const uint64_t *)buf); in zone_setattr()
5551 err = zone_set_sched_class(zone, (const char *)buf); in zone_setattr()
5554 if (bufsize == sizeof (zone->zone_hostid)) { in zone_setattr()
5555 if (copyin(buf, &zone->zone_hostid, bufsize) == 0) in zone_setattr()
5578 if ((attr >= ZONE_ATTR_BRAND_ATTRS) && ZONE_IS_BRANDED(zone)) in zone_setattr()
5579 err = ZBROP(zone)->b_setattr(zone, attr, buf, bufsize); in zone_setattr()
5585 zone_rele(zone); in zone_setattr()
5669 zone_t *zone; in zone_enter() local
5720 zone = zone_find_all_by_id(zoneid); in zone_enter()
5721 if (zone == NULL) { in zone_enter()
5758 if (contract_getzuniqid(next) != zone->zone_uniqid) { in zone_enter()
5771 status = zone_status_get(zone); in zone_enter()
5784 if (!priv_issubset(zone->zone_privset, &CR_OPPRIV(CRED()))) { in zone_enter()
5794 zone_hold(zone); in zone_enter()
5803 zone_rele(zone); in zone_enter()
5812 newpool = zone_pool_get(zone); in zone_enter()
5817 zone_rele(zone); in zone_enter()
5830 if (zone_status_get(zone) >= ZONE_IS_SHUTTING_DOWN) { in zone_enter()
5841 zone_rele(zone); in zone_enter()
5856 zone_proj0 = zone->zone_zsched->p_task->tk_proj; in zone_enter()
5858 mutex_enter(&zone->zone_nlwps_lock); in zone_enter()
5861 zone->zone_nlwps += pp->p_lwpcnt; in zone_enter()
5866 zone->zone_nprocs++; in zone_enter()
5867 mutex_exit(&zone->zone_nlwps_lock); in zone_enter()
5869 mutex_enter(&zone->zone_mem_lock); in zone_enter()
5870 zone->zone_locked_mem += pp->p_locked_mem; in zone_enter()
5872 zone->zone_max_swap += swap; in zone_enter()
5873 mutex_exit(&zone->zone_mem_lock); in zone_enter()
5898 pp->p_zone = zone; in zone_enter()
5924 contract_setzuniqid(ct, zone->zone_uniqid); in zone_enter()
5935 tk = task_create(0, zone); in zone_enter()
5942 e.rcep_p.zone = zone; in zone_enter()
5944 (void) rctl_set_dup(NULL, NULL, pp, &e, zone->zone_rctls, NULL, in zone_enter()
5958 sp = zone->zone_zsched->p_sessp; in zone_enter()
5959 sess_hold(zone->zone_zsched); in zone_enter()
5964 pgjoin(pp, zone->zone_zsched->p_pidp); in zone_enter()
5994 if (zone->zone_defaultcid > 0 && in zone_enter()
5995 zone->zone_defaultcid != curthread->t_cid) { in zone_enter()
5998 pcparms.pc_cid = zone->zone_defaultcid; in zone_enter()
6024 zone_rele(zone); in zone_enter()
6029 vp = zone->zone_rootvp; in zone_enter()
6040 crsetzone(newcr, zone); in zone_enter()
6046 priv_intersect(zone->zone_privset, &CR_PPRIV(newcr)); in zone_enter()
6047 priv_intersect(zone->zone_privset, &CR_EPRIV(newcr)); in zone_enter()
6048 priv_intersect(zone->zone_privset, &CR_IPRIV(newcr)); in zone_enter()
6049 priv_intersect(zone->zone_privset, &CR_LPRIV(newcr)); in zone_enter()
6089 zone_t *zone, *myzone; in zone_list() local
6115 for (zone = list_head(&zone_active); in zone_list()
6116 zone != NULL; in zone_list()
6117 zone = list_next(&zone_active, zone)) { in zone_list()
6118 if (zone->zone_id == GLOBAL_ZONEID) in zone_list()
6120 if (zone != myzone && in zone_list()
6121 (zone->zone_flags & ZF_IS_SCRATCH)) in zone_list()
6129 label2bslabel(zone->zone_slabel))) { in zone_list()
6131 zone->zone_id; in zone_list()
6144 for (zone = list_head(&zone_active); zone != NULL; in zone_list()
6145 zone = list_next(&zone_active, zone)) in zone_list()
6146 zoneids[domi_nzones++] = zone->zone_id; in zone_list()
6187 zone_t *zone; in zone_lookup() local
6203 zone = zone_find_all_by_name(kname); in zone_lookup()
6209 if (zone == NULL || in zone_lookup()
6210 zone_status_get(zone) < ZONE_IS_READY || in zone_lookup()
6211 !zone_list_access(zone)) { in zone_lookup()
6215 zoneid = zone->zone_id; in zone_lookup()
6233 zone(int cmd, void *arg1, void *arg2, void *arg3, void *arg4) in zone() function
6330 zone_t *zone; member
6364 zone_t *zone; in zone_ki_call_zoneadmd() local
6371 zone = zargp->zone; in zone_ki_call_zoneadmd()
6375 zone_namelen = strlen(zone->zone_name) + 1; in zone_ki_call_zoneadmd()
6377 bcopy(zone->zone_name, zone_name, zone_namelen); in zone_ki_call_zoneadmd()
6378 zoneid = zone->zone_id; in zone_ki_call_zoneadmd()
6379 uniqid = zone->zone_uniqid; in zone_ki_call_zoneadmd()
6386 (void) zone_empty(zone); in zone_ki_call_zoneadmd()
6387 ASSERT(zone_status_get(zone) >= ZONE_IS_EMPTY); in zone_ki_call_zoneadmd()
6388 zone_rele(zone); in zone_ki_call_zoneadmd()
6446 if ((zone = zone_find_by_id(zoneid)) == NULL) { in zone_ki_call_zoneadmd()
6452 if (zone->zone_uniqid != uniqid) { in zone_ki_call_zoneadmd()
6456 zone_rele(zone); in zone_ki_call_zoneadmd()
6464 zone_rele(zone); in zone_ki_call_zoneadmd()
6492 zone_t *zone; in zone_kadmin() local
6494 zone = curproc->p_zone; in zone_kadmin()
6538 ASSERT(zone_status_get(zone) < ZONE_IS_EMPTY); in zone_kadmin()
6539 if (zone_status_get(zone) > ZONE_IS_RUNNING) { in zone_kadmin()
6549 zone_status_set(zone, ZONE_IS_SHUTTING_DOWN); in zone_kadmin()
6557 killall(zone->zone_id); in zone_kadmin()
6565 zargp->arg.uniqid = zone->zone_uniqid; in zone_kadmin()
6566 zargp->zone = zone; in zone_kadmin()
6572 zone_hold(zone); in zone_kadmin()
6629 zone_t *zone = curproc->p_zone; in zone_dataset_visible() local
6641 for (zd = list_head(&zone->zone_datasets); zd != NULL; in zone_dataset_visible()
6642 zd = list_next(&zone->zone_datasets, zd)) { in zone_dataset_visible()
6662 for (zd = list_head(&zone->zone_datasets); zd != NULL; in zone_dataset_visible()
6663 zd = list_next(&zone->zone_datasets, zd)) { in zone_dataset_visible()
6695 vfsp = zone->zone_vfslist; in zone_dataset_visible()
6727 } while (vfsp != zone->zone_vfslist); in zone_dataset_visible()
6755 zone_t *zone; in zone_find_by_any_path() local
6769 for (zone = list_head(&zone_active); zone != NULL; in zone_find_by_any_path()
6770 zone = list_next(&zone_active, zone)) { in zone_find_by_any_path()
6775 if (zone == global_zone) /* skip global zone */ in zone_find_by_any_path()
6779 c = zone->zone_rootpath + zone->zone_rootpathlen - 2; in zone_find_by_any_path()
6784 pathlen = c - zone->zone_rootpath + 1 - path_offset; in zone_find_by_any_path()
6785 rootpath_start = (zone->zone_rootpath + path_offset); in zone_find_by_any_path()
6789 if (zone == NULL) in zone_find_by_any_path()
6790 zone = global_zone; in zone_find_by_any_path()
6791 zone_hold(zone); in zone_find_by_any_path()
6793 return (zone); in zone_find_by_any_path()
6801 zone_find_dl(zone_t *zone, datalink_id_t linkid) in zone_find_dl() argument
6805 ASSERT(mutex_owned(&zone->zone_lock)); in zone_find_dl()
6806 for (zdl = list_head(&zone->zone_dl_list); zdl != NULL; in zone_find_dl()
6807 zdl = list_next(&zone->zone_dl_list, zdl)) { in zone_find_dl()
6815 zone_dl_exists(zone_t *zone, datalink_id_t linkid) in zone_dl_exists() argument
6819 mutex_enter(&zone->zone_lock); in zone_dl_exists()
6820 exists = (zone_find_dl(zone, linkid) != NULL); in zone_dl_exists()
6821 mutex_exit(&zone->zone_lock); in zone_dl_exists()
6832 zone_t *zone; in zone_add_datalink() local
6840 for (zone = list_head(&zone_active); zone != NULL; in zone_add_datalink()
6841 zone = list_next(&zone_active, zone)) { in zone_add_datalink()
6842 if (zone_dl_exists(zone, linkid)) { in zone_add_datalink()
6845 return (set_errno((zone == thiszone) ? EEXIST : EPERM)); in zone_add_datalink()
6864 zone_t *zone; in zone_remove_datalink() local
6867 if ((zone = zone_find_by_id(zoneid)) == NULL) in zone_remove_datalink()
6870 mutex_enter(&zone->zone_lock); in zone_remove_datalink()
6871 if ((zdl = zone_find_dl(zone, linkid)) == NULL) { in zone_remove_datalink()
6874 list_remove(&zone->zone_dl_list, zdl); in zone_remove_datalink()
6878 mutex_exit(&zone->zone_lock); in zone_remove_datalink()
6879 zone_rele(zone); in zone_remove_datalink()
6891 zone_t *zone; in zone_check_datalink() local
6895 if ((zone = zone_find_by_id(*zoneidp)) != NULL) { in zone_check_datalink()
6896 if (zone_dl_exists(zone, linkid)) in zone_check_datalink()
6898 zone_rele(zone); in zone_check_datalink()
6904 for (zone = list_head(&zone_active); zone != NULL; in zone_check_datalink()
6905 zone = list_next(&zone_active, zone)) { in zone_check_datalink()
6906 if (zone_dl_exists(zone, linkid)) { in zone_check_datalink()
6907 *zoneidp = zone->zone_id; in zone_check_datalink()
6929 zone_t *zone; in zone_list_datalink() local
6935 if ((zone = zone_find_by_id(zoneid)) == NULL) in zone_list_datalink()
6939 mutex_enter(&zone->zone_lock); in zone_list_datalink()
6940 for (zdl = list_head(&zone->zone_dl_list); zdl != NULL; in zone_list_datalink()
6941 zdl = list_next(&zone->zone_dl_list, zdl)) { in zone_list_datalink()
6949 mutex_exit(&zone->zone_lock); in zone_list_datalink()
6950 zone_rele(zone); in zone_list_datalink()
6955 mutex_exit(&zone->zone_lock); in zone_list_datalink()
6956 zone_rele(zone); in zone_list_datalink()
6983 zone_t *zone; in zone_find_by_id_nolock() local
6987 zone = &zone0; in zone_find_by_id_nolock()
6989 zone = zone_find_all_by_id(zoneid); in zone_find_by_id_nolock()
6991 return (zone); in zone_find_by_id_nolock()
7001 zone_t *zone; in zone_datalink_walk() local
7007 if ((zone = zone_find_by_id(zoneid)) == NULL) in zone_datalink_walk()
7014 mutex_enter(&zone->zone_lock); in zone_datalink_walk()
7015 for (zdl = list_head(&zone->zone_dl_list); zdl != NULL; in zone_datalink_walk()
7016 zdl = list_next(&zone->zone_dl_list, zdl)) { in zone_datalink_walk()
7021 mutex_exit(&zone->zone_lock); in zone_datalink_walk()
7022 zone_rele(zone); in zone_datalink_walk()
7028 mutex_exit(&zone->zone_lock); in zone_datalink_walk()
7029 zone_rele(zone); in zone_datalink_walk()
7033 for (i = 0, zdl = list_head(&zone->zone_dl_list); zdl != NULL; in zone_datalink_walk()
7034 i++, zdl = list_next(&zone->zone_dl_list, zdl)) { in zone_datalink_walk()
7038 mutex_exit(&zone->zone_lock); in zone_datalink_walk()
7045 zone_rele(zone); in zone_datalink_walk()
7066 zone_t *zone; in zone_set_network() local
7087 if ((zone = zone_find_by_id(zoneid)) == NULL) { in zone_set_network()
7091 mutex_enter(&zone->zone_lock); in zone_set_network()
7092 if ((zdl = zone_find_dl(zone, linkid)) == NULL) { in zone_set_network()
7111 mutex_exit(&zone->zone_lock); in zone_set_network()
7112 zone_rele(zone); in zone_set_network()
7122 zone_t *zone; in zone_get_network() local
7142 if ((zone = zone_find_by_id(zoneid)) == NULL) in zone_get_network()
7145 mutex_enter(&zone->zone_lock); in zone_get_network()
7146 if ((zdl = zone_find_dl(zone, linkid)) == NULL) { in zone_get_network()
7164 mutex_exit(&zone->zone_lock); in zone_get_network()
7165 zone_rele(zone); in zone_get_network()