vmu_data
vmu_data.vmu_all_vnodes_hash, (caddr_t)svd->vp,
vmu_data.vmu_all_amps_hash, (caddr_t)svd->amp,
vmu_data.vmu_all_amps_hash, (caddr_t)shmd->shm_amp,
if ((vmu_data.vmu_system) != NULL) {
tmp = vmu_data.vmu_system;
if (vmu_data.vmu_calc_flags &
ret = i_mod_hash_find_nosync(vmu_data.vmu_zones_hash,
ret = i_mod_hash_insert_nosync(vmu_data.vmu_zones_hash,
if (vmu_data.vmu_calc_flags &
if (vmu_data.vmu_calc_flags &
if (vmu_data.vmu_calc_flags &
if (vmu_data.vmu_calc_flags &
if (vmu_data.vmu_calc_flags & VMUSAGE_COL_PROJECTS) {
tmp = vmu_find_insert_entity(vmu_data.vmu_projects_col_hash,
if (vmu_data.vmu_calc_flags & VMUSAGE_COL_RUSERS) {
tmp = vmu_find_insert_entity(vmu_data.vmu_rusers_col_hash,
if (vmu_data.vmu_calc_flags & VMUSAGE_COL_EUSERS) {
tmp = vmu_find_insert_entity(vmu_data.vmu_eusers_col_hash,
if (vmu_data.vmu_system != NULL) {
vmu_free_entity(vmu_data.vmu_system);
vmu_data.vmu_system = NULL;
if (vmu_data.vmu_zones_hash != NULL)
i_mod_hash_clear_nosync(vmu_data.vmu_zones_hash);
if (vmu_data.vmu_projects_col_hash != NULL)
i_mod_hash_clear_nosync(vmu_data.vmu_projects_col_hash);
if (vmu_data.vmu_rusers_col_hash != NULL)
i_mod_hash_clear_nosync(vmu_data.vmu_rusers_col_hash);
if (vmu_data.vmu_eusers_col_hash != NULL)
i_mod_hash_clear_nosync(vmu_data.vmu_eusers_col_hash);
i_mod_hash_clear_nosync(vmu_data.vmu_all_vnodes_hash);
i_mod_hash_clear_nosync(vmu_data.vmu_all_amps_hash);
while (vmu_data.vmu_free_bounds != NULL) {
tb = vmu_data.vmu_free_bounds;
vmu_data.vmu_free_bounds = vmu_data.vmu_free_bounds->vmb_next;
while (vmu_data.vmu_free_objects != NULL) {
to = vmu_data.vmu_free_objects;
vmu_data.vmu_free_objects =
vmu_data.vmu_free_objects->vmo_next;
while (vmu_data.vmu_free_entities != NULL) {
te = vmu_data.vmu_free_entities;
vmu_data.vmu_free_entities =
vmu_data.vmu_free_entities->vme_next;
while (vmu_data.vmu_free_zones != NULL) {
tz = vmu_data.vmu_free_zones;
vmu_data.vmu_free_zones =
vmu_data.vmu_free_zones->vmz_next;
if (vmu_data.vmu_calc_flags & VMUSAGE_SYSTEM)
vmu_data.vmu_system = vmu_alloc_entity(0, VMUSAGE_SYSTEM,
ASSERT(MUTEX_HELD(&vmu_data.vmu_lock));
ASSERT(MUTEX_HELD(&vmu_data.vmu_lock));
mutex_enter(&vmu_data.vmu_lock);
if (vmu_data.vmu_cache != NULL) {
if ((vmu_data.vmu_cache->vmc_timestamp +
if ((vmu_data.vmu_cache->vmc_flags & flags) == flags &&
cache = vmu_data.vmu_cache;
mutex_exit(&vmu_data.vmu_lock);
mutex_enter(&vmu_data.vmu_lock);
if (vmu_data.vmu_pending_waiters > 0)
cv_broadcast(&vmu_data.vmu_cv);
mutex_exit(&vmu_data.vmu_lock);
flags = vmu_data.vmu_cache->vmc_flags | flags;
if (vmu_data.vmu_calc_thread == NULL) {
vmu_data.vmu_calc_thread = curthread;
vmu_data.vmu_calc_flags = flags;
vmu_data.vmu_entities = NULL;
vmu_data.vmu_nentities = 0;
if (vmu_data.vmu_pending_waiters > 0)
vmu_data.vmu_calc_flags |=
vmu_data.vmu_pending_flags;
vmu_data.vmu_pending_flags = 0;
mutex_exit(&vmu_data.vmu_lock);
mutex_enter(&vmu_data.vmu_lock);
if (vmu_data.vmu_cache != NULL)
vmu_cache_rele(vmu_data.vmu_cache);
cache = vmu_data.vmu_cache =
vmu_cache_alloc(vmu_data.vmu_nentities,
vmu_data.vmu_calc_flags);
for (entity = vmu_data.vmu_entities; entity != NULL;
vmu_data.vmu_calc_flags = 0;
vmu_data.vmu_calc_thread = NULL;
if (vmu_data.vmu_pending_waiters > 0)
cv_broadcast(&vmu_data.vmu_cv);
mutex_exit(&vmu_data.vmu_lock);
mutex_enter(&vmu_data.vmu_lock);
mutex_exit(&vmu_data.vmu_lock);
vmu_data.vmu_pending_flags |= flags;
vmu_data.vmu_pending_waiters++;
while (vmu_data.vmu_calc_thread != NULL) {
if (cv_wait_sig(&vmu_data.vmu_cv,
&vmu_data.vmu_lock) == 0) {
vmu_data.vmu_pending_waiters--;
mutex_exit(&vmu_data.vmu_lock);
vmu_data.vmu_pending_waiters--;
static vmu_data_t vmu_data;
bound->vmb_next = vmu_data.vmu_free_bounds;
vmu_data.vmu_free_bounds = bound;
obj->vmo_next = vmu_data.vmu_free_objects;
vmu_data.vmu_free_objects = obj;
entity->vme_next = vmu_data.vmu_free_entities;
vmu_data.vmu_free_entities = entity;
zone->vmz_next = vmu_data.vmu_free_zones;
vmu_data.vmu_free_zones = zone;
mutex_init(&vmu_data.vmu_lock, NULL, MUTEX_DEFAULT, NULL);
cv_init(&vmu_data.vmu_cv, NULL, CV_DEFAULT, NULL);
vmu_data.vmu_system = NULL;
vmu_data.vmu_zones_hash = NULL;
vmu_data.vmu_projects_col_hash = NULL;
vmu_data.vmu_rusers_col_hash = NULL;
vmu_data.vmu_eusers_col_hash = NULL;
vmu_data.vmu_free_bounds = NULL;
vmu_data.vmu_free_objects = NULL;
vmu_data.vmu_free_entities = NULL;
vmu_data.vmu_free_zones = NULL;
vmu_data.vmu_all_vnodes_hash = mod_hash_create_ptrhash(
vmu_data.vmu_all_amps_hash = mod_hash_create_ptrhash(
vmu_data.vmu_projects_col_hash = mod_hash_create_idhash(
vmu_data.vmu_rusers_col_hash = mod_hash_create_idhash(
vmu_data.vmu_eusers_col_hash = mod_hash_create_idhash(
vmu_data.vmu_zones_hash = mod_hash_create_idhash(
vmu_data.vmu_entities = NULL;
vmu_data.vmu_nentities = 0;
vmu_data.vmu_cache = NULL;
vmu_data.vmu_calc_thread = NULL;
vmu_data.vmu_calc_flags = 0;
vmu_data.vmu_pending_flags = 0;
vmu_data.vmu_pending_waiters = 0;
if (vmu_data.vmu_free_entities != NULL) {
entity = vmu_data.vmu_free_entities;
vmu_data.vmu_free_entities =
vmu_data.vmu_free_entities->vme_next;
entity->vme_next = vmu_data.vmu_entities;
vmu_data.vmu_entities = entity;
vmu_data.vmu_nentities++;
if (vmu_data.vmu_free_zones != NULL) {
zone = vmu_data.vmu_free_zones;
vmu_data.vmu_free_zones =
vmu_data.vmu_free_zones->vmz_next;
if ((vmu_data.vmu_calc_flags & (VMUSAGE_ZONE | VMUSAGE_ALL_ZONES)) != 0)
if ((vmu_data.vmu_calc_flags & (VMUSAGE_PROJECTS |
if ((vmu_data.vmu_calc_flags & (VMUSAGE_TASKS | VMUSAGE_ALL_TASKS))
if ((vmu_data.vmu_calc_flags & (VMUSAGE_RUSERS | VMUSAGE_ALL_RUSERS))
if ((vmu_data.vmu_calc_flags & (VMUSAGE_EUSERS | VMUSAGE_ALL_EUSERS))
if (vmu_data.vmu_free_objects != NULL) {
object = vmu_data.vmu_free_objects;
vmu_data.vmu_free_objects =
vmu_data.vmu_free_objects->vmo_next;
if (vmu_data.vmu_free_bounds != NULL) {
bound = vmu_data.vmu_free_bounds;
vmu_data.vmu_free_bounds =
vmu_data.vmu_free_bounds->vmb_next;