Lines Matching refs:cap

264 	cpucap_t *cap = kmem_zalloc(sizeof (cpucap_t), KM_SLEEP);  in cap_alloc()  local
266 DISP_LOCK_INIT(&cap->cap_usagelock); in cap_alloc()
267 waitq_init(&cap->cap_waitq); in cap_alloc()
269 return (cap); in cap_alloc()
276 cap_free(cpucap_t *cap) in cap_free() argument
278 if (cap == NULL) in cap_free()
284 ASSERT(!list_link_active(&cap->cap_link)); in cap_free()
285 ASSERT(cap->cap_value == 0); in cap_free()
286 ASSERT(!DISP_LOCK_HELD(&cap->cap_usagelock)); in cap_free()
288 waitq_fini(&cap->cap_waitq); in cap_free()
289 DISP_LOCK_DESTROY(&cap->cap_usagelock); in cap_free()
291 kmem_free(cap, sizeof (cpucap_t)); in cap_free()
300 cap_enable(list_t *l, cpucap_t *cap, hrtime_t value) in cap_enable() argument
307 ASSERT(!CAP_ENABLED(cap)); in cap_enable()
308 ASSERT(!list_link_active(&cap->cap_link)); in cap_enable()
310 list_insert_tail(l, cap); in cap_enable()
311 cap->cap_below = cap->cap_above = 0; in cap_enable()
312 cap->cap_maxusage = 0; in cap_enable()
313 cap->cap_usage = 0; in cap_enable()
314 cap->cap_value = value; in cap_enable()
315 waitq_unblock(&cap->cap_waitq); in cap_enable()
332 cap_disable(list_t *l, cpucap_t *cap) in cap_disable() argument
339 ASSERT(list_link_active(&cap->cap_link)); in cap_disable()
340 ASSERT(CAP_ENABLED(cap)); in cap_disable()
342 waitq_block(&cap->cap_waitq); in cap_disable()
343 list_remove(l, cap); in cap_disable()
348 cap->cap_value = 0; in cap_disable()
349 cap->cap_project = NULL; in cap_disable()
350 cap->cap_zone = NULL; in cap_disable()
351 if (cap->cap_kstat != NULL) { in cap_disable()
352 kstat_delete(cap->cap_kstat); in cap_disable()
353 cap->cap_kstat = NULL; in cap_disable()
366 cpucap_t *cap = kpj->kpj_cpucap; in cap_project_enable() local
369 ASSERT(cap != NULL); in cap_project_enable()
371 if (CAP_DISABLED(cap)) { in cap_project_enable()
372 ASSERT(cap->cap_kstat == NULL); in cap_project_enable()
373 cap_enable(&capped_projects, cap, value); in cap_project_enable()
374 cap->cap_project = kpj; in cap_project_enable()
375 cap->cap_zone = kpj->kpj_zone; in cap_project_enable()
380 if ((cap->cap_kstat = rctl_kstat_create_project(kpj, "cpucaps", in cap_project_enable()
384 cap->cap_kstat->ks_data_size += in cap_project_enable()
385 strlen(cap->cap_zone->zone_name) + 1; in cap_project_enable()
386 cap->cap_kstat->ks_lock = &cap_kstat_lock; in cap_project_enable()
387 cap->cap_kstat->ks_data = &cap_kstat; in cap_project_enable()
388 cap->cap_kstat->ks_update = cap_kstat_update; in cap_project_enable()
389 cap->cap_kstat->ks_private = cap; in cap_project_enable()
390 kstat_install(cap->cap_kstat); in cap_project_enable()
403 cpucap_t *cap = kpj->kpj_cpucap; in cap_project_disable() local
406 ASSERT(cap != NULL); in cap_project_disable()
407 ASSERT(cap->cap_project == kpj); in cap_project_disable()
409 if (CAP_ENABLED(cap)) in cap_project_disable()
410 cap_disable(&capped_projects, cap); in cap_project_disable()
421 cpucap_t *cap = zone->zone_cpucap; in cap_zone_enable() local
424 ASSERT(cap != NULL); in cap_zone_enable()
426 if (CAP_DISABLED(cap)) { in cap_zone_enable()
427 ASSERT(cap->cap_kstat == NULL); in cap_zone_enable()
428 cap_enable(&capped_zones, cap, value); in cap_zone_enable()
429 cap->cap_zone = zone; in cap_zone_enable()
434 if ((cap->cap_kstat = rctl_kstat_create_zone(zone, "cpucaps", in cap_zone_enable()
438 cap->cap_kstat->ks_data_size += in cap_zone_enable()
439 strlen(cap->cap_zone->zone_name) + 1; in cap_zone_enable()
440 cap->cap_kstat->ks_lock = &cap_kstat_lock; in cap_zone_enable()
441 cap->cap_kstat->ks_data = &cap_kstat; in cap_zone_enable()
442 cap->cap_kstat->ks_update = cap_kstat_update; in cap_zone_enable()
443 cap->cap_kstat->ks_private = cap; in cap_zone_enable()
444 kstat_install(cap->cap_kstat); in cap_zone_enable()
457 cpucap_t *cap = zone->zone_cpucap; in cap_zone_disable() local
460 ASSERT(cap != NULL); in cap_zone_disable()
461 ASSERT(cap->cap_zone == zone); in cap_zone_disable()
463 if (CAP_ENABLED(cap)) in cap_zone_disable()
464 cap_disable(&capped_zones, cap); in cap_zone_disable()
474 cpucap_t *cap; in cap_walk() local
478 for (cap = list_head(l); cap != NULL; cap = list_next(l, cap)) { in cap_walk()
479 (*cb)(cap, cpucap_walk_gen); in cap_walk()
493 cap_poke_waitq(cpucap_t *cap, int64_t gen) in cap_poke_waitq() argument
497 if (cap->cap_usage >= cap->cap_value) { in cap_poke_waitq()
498 cap->cap_above++; in cap_poke_waitq()
500 waitq_t *wq = &cap->cap_waitq; in cap_poke_waitq()
502 cap->cap_below++; in cap_poke_waitq()
516 cap_project_usage_walker(cpucap_t *cap, int64_t gen) in cap_project_usage_walker() argument
518 zone_t *zone = cap->cap_zone; in cap_project_usage_walker()
519 hrtime_t cap_usage = cap->cap_usage; in cap_project_usage_walker()
522 ASSERT(cap->cap_project->kpj_cpucap == cap); in cap_project_usage_walker()
523 ASSERT(zone == cap->cap_project->kpj_zone); in cap_project_usage_walker()
524 ASSERT(CAP_ENABLED(cap)); in cap_project_usage_walker()
530 cap_poke_waitq(cap, 0); in cap_project_usage_walker()
563 disp_lock_enter(&cap->cap_usagelock); in cap_project_usage_walker()
564 cap->cap_usage -= ROUND_SCALE(cap_usage, CAP_DECAY_FACTOR); in cap_project_usage_walker()
565 disp_lock_exit(&cap->cap_usagelock); in cap_project_usage_walker()
657 cpucap_t *cap = NULL; in cpucaps_zone_set() local
675 cap = cap_alloc(); in cpucaps_zone_set()
689 zone->zone_cpucap = cap; in cpucaps_zone_set()
690 } else if (cap != NULL) { in cpucaps_zone_set()
691 cap_free(cap); in cpucaps_zone_set()
694 cap = zone->zone_cpucap; in cpucaps_zone_set()
700 if (value == cap->cap_value) { in cpucaps_zone_set()
708 cap->cap_above = cap->cap_below = 0; in cpucaps_zone_set()
712 if (CAP_ENABLED(cap)) { in cpucaps_zone_set()
724 cap_project_zone_modify_walker, cap); in cpucaps_zone_set()
729 } else if (CAP_DISABLED(cap)) { in cpucaps_zone_set()
741 cap_project_zone_modify_walker, cap); in cpucaps_zone_set()
749 cap->cap_value = value; in cpucaps_zone_set()
801 cpucap_t *cap = NULL; in cpucaps_project_add() local
810 cap = cap_alloc(); in cpucaps_project_add()
817 kpj->kpj_cpucap = cap; in cpucaps_project_add()
818 } else if (cap != NULL) { in cpucaps_project_add()
819 cap_free(cap); in cpucaps_project_add()
839 cpucap_t *cap = NULL; in cpucaps_project_set() local
862 cap = cap_alloc(); in cpucaps_project_set()
871 kpj->kpj_cpucap = cap; in cpucaps_project_set()
872 } else if (cap != NULL) { in cpucaps_project_set()
873 cap_free(cap); in cpucaps_project_set()
879 cap = kpj->kpj_cpucap; in cpucaps_project_set()
887 if (value == cap->cap_value) { in cpucaps_project_set()
895 cap->cap_above = cap->cap_below = 0; in cpucaps_project_set()
896 cap->cap_maxusage = 0; in cpucaps_project_set()
902 if (CAP_DISABLED(cap)) in cpucaps_project_set()
905 cap->cap_value = value; in cpucaps_project_set()
906 } else if (CAP_ENABLED(cap)) { in cpucaps_project_set()
913 cap->cap_value = MAX_USAGE; in cpucaps_project_set()
927 cap_get(cpucap_t *cap) in cap_get() argument
929 return (cap != NULL ? (rctl_qty_t)(cap->cap_usage / cap_tick_cost) : 0); in cap_get()
987 cpucap_t *cap = kpj->kpj_cpucap; in caps_charge_adjust() local
992 disp_lock_enter_high(&cap->cap_usagelock); in caps_charge_adjust()
993 cap->cap_usage += usage_delta; in caps_charge_adjust()
996 if (cap->cap_usage < 0) in caps_charge_adjust()
997 cap->cap_usage = MAX_USAGE - 1; in caps_charge_adjust()
999 disp_lock_exit_high(&cap->cap_usagelock); in caps_charge_adjust()
1005 if (cap->cap_usage > cap->cap_maxusage) in caps_charge_adjust()
1006 cap->cap_maxusage = cap->cap_usage; in caps_charge_adjust()
1127 cpucap_t *cap = ksp->ks_private; in cap_kstat_update() local
1129 char *zonename = cap->cap_zone->zone_name; in cap_kstat_update()
1135 ROUND_SCALE(cap->cap_value, cap_tick_cost); in cap_kstat_update()
1137 ROUND_SCALE(cap->cap_usage, cap_tick_cost); in cap_kstat_update()
1139 ROUND_SCALE(cap->cap_maxusage, cap_tick_cost); in cap_kstat_update()
1140 capsp->cap_nwait.value.ui64 = cap->cap_waitq.wq_count; in cap_kstat_update()
1141 capsp->cap_below.value.ui64 = ROUND_SCALE(cap->cap_below, tick_sec); in cap_kstat_update()
1142 capsp->cap_above.value.ui64 = ROUND_SCALE(cap->cap_above, tick_sec); in cap_kstat_update()