fssproj
fssproj_t *fssproj;
(fssproj = fsspset->fssps_list) == NULL) {
fsszone = fssproj->fssp_fsszone;
fssproj->fssp_usage =
(fssproj->fssp_usage * FSS_DECAY_USG) /
fssproj->fssp_ticks;
fssproj->fssp_ticks = 0;
zp->zone_run_ticks += fssproj->fssp_tick_cnt;
fssproj->fssp_tick_cnt = 0;
kpj_shares = fssproj->fssp_proj->kpj_shares;
if (fssproj->fssp_shares != kpj_shares) {
if (fssproj->fssp_runnable != 0) {
fssproj->fssp_shares;
fssproj->fssp_shares = kpj_shares;
if (fssproj->fssp_runnable > 0) {
fssproj->fssp_shr_pct = 0;
fssproj->fssp_shr_pct =
fssproj);
fssproj->fssp_shusage = 0;
} else if (FSSPROJ2KPROJ(fssproj) == proj0p) {
fssproj->fssp_shr_pct = zone_shr_pct / 2;
fssproj->fssp_shusage = (fssproj->fssp_usage *
fssproj->fssp_shusage = fssproj->fssp_usage *
fssproj->fssp_shusage /=
fssproj->fssp_shusage *=
fssproj->fssp_shusage /=
fssproj = fssproj->fssp_next;
} while (fssproj != fsspset->fssps_list);
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
if (fssproj == NULL)
if (fssproj->fssp_shares != 0) {
fssproj_t *fssproj;
if ((fssproj = fss_find_fssproj(fsspset, kpj)) == NULL) {
if ((fssproj = kmem_zalloc(sizeof (fssproj_t), KM_NOSLEEP))
fss_insert_fssproj(fsspset, kpj, fsszone, fssproj);
fssproj->fssp_threads++;
fssproc->fss_proj = fssproj;
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
fsspset = FSSPROJ2FSSPSET(fssproj);
fsszone = fssproj->fssp_fsszone;
if (--fssproj->fssp_runnable == 0) {
fsszone->fssz_shares -= fssproj->fssp_shares;
if (--fssproj->fssp_threads == 0) {
fss_remove_fssproj(fsspset, fssproj);
kmem_free(fssproj, sizeof (fssproj_t));
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(pfssproc);
fsspset = FSSPROJ2FSSPSET(fssproj);
ASSERT(FSSPROJ(pt) == fssproj);
cfssproc->fss_proj = fssproj;
fssproj->fssp_threads++;
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
fsspset = FSSPROJ2FSSPSET(fssproj);
fsszone = fssproj->fssp_fsszone;
if (--fssproj->fssp_runnable == 0) {
fsszone->fssz_shares -= fssproj->fssp_shares;
if (--fssproj->fssp_threads == 0) {
fss_remove_fssproj(fsspset, fssproj);
kmem_free(fssproj, sizeof (fssproj_t));
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
if (fssproj != NULL) {
fsspset_t *fsspset = FSSPROJ2FSSPSET(fssproj);
fssproj->fssp_ticks += fss_nice_tick[fssproc->fss_nice];
fssproj->fssp_tick_cnt++;
fssproj_t *fssproj;
fssproj = fsspset->fssps_list;
if (fssproj->fssp_proj == kpj) {
ASSERT(fssproj->fssp_pset == fsspset);
return (fssproj);
fssproj = fssproj->fssp_next;
} while (fssproj != fsspset->fssps_list);
fssproj_t *fssproj)
fssproj->fssp_pset = fsspset;
fssproj->fssp_proj = kpj;
fssproj->fssp_shares = kpj->kpj_shares;
fssproj->fssp_next = fssproj->fssp_prev = fssproj;
fsspset->fssps_list = fssproj;
fssproj->fssp_next = fssp_head;
fssproj->fssp_prev = fssp_head->fssp_prev;
fssp_head->fssp_prev->fssp_next = fssproj;
fssp_head->fssp_prev = fssproj;
fsspset->fssps_list = fssproj;
fssproj->fssp_fsszone = fsszone;
fss_remove_fssproj(fsspset_t *fsspset, fssproj_t *fssproj)
ASSERT(fssproj->fssp_runnable == 0);
fsszone = fssproj->fssp_fsszone;
if (fssproj->fssp_next != fssproj) {
fssproj->fssp_prev->fssp_next = fssproj->fssp_next;
fssproj->fssp_next->fssp_prev = fssproj->fssp_prev;
if (fsspset->fssps_list == fssproj)
fsspset->fssps_list = fssproj->fssp_next;
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
if (fssproj == NULL) /* if this thread already exited */
fsspset = FSSPROJ2FSSPSET(fssproj);
fsszone = fssproj->fssp_fsszone;
ASSERT(fssproj->fssp_runnable > 0);
if (--fssproj->fssp_runnable == 0) {
fsszone->fssz_shares -= fssproj->fssp_shares;
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
if (fssproj == NULL) /* if this thread already exited */
fsspset = FSSPROJ2FSSPSET(fssproj);
fsszone = fssproj->fssp_fsszone;
if (++fssproj->fssp_runnable == 1) {
fsszone->fssz_shares += fssproj->fssp_shares;
fssproj_t *fssproj;
fssproj = FSSPROC2FSSPROJ(fssproc);
fsszone = FSSPROJ2FSSZONE(fssproj);
if (fssproj == NULL)
fsspset = FSSPROJ2FSSPSET(fssproj);
if (fssproj->fssp_shares == 0 || fsszone->fssz_rshares == 0) {
n_runnable = fssproj->fssp_runnable;
fsspri += fssproj->fssp_shusage * n_runnable * ticks;
struct fssproj *fssp_next; /* next project on this pset */
struct fssproj *fssp_prev; /* prev project on this pset */
struct fssproj *fssps_list; /* list of project parts */