Lines Matching refs:cgrp
15 static bool cgroup_update_frozen_flag(struct cgroup *cgrp, bool frozen) in cgroup_update_frozen_flag() argument
20 if (test_bit(CGRP_FROZEN, &cgrp->flags) == frozen) in cgroup_update_frozen_flag()
24 set_bit(CGRP_FROZEN, &cgrp->flags); in cgroup_update_frozen_flag()
26 clear_bit(CGRP_FROZEN, &cgrp->flags); in cgroup_update_frozen_flag()
28 cgroup_file_notify(&cgrp->events_file); in cgroup_update_frozen_flag()
29 TRACE_CGROUP_PATH(notify_frozen, cgrp, frozen); in cgroup_update_frozen_flag()
36 static void cgroup_propagate_frozen(struct cgroup *cgrp, bool frozen) in cgroup_propagate_frozen() argument
46 while ((cgrp = cgroup_parent(cgrp))) { in cgroup_propagate_frozen()
48 cgrp->freezer.nr_frozen_descendants += desc; in cgroup_propagate_frozen()
49 if (!test_bit(CGRP_FREEZE, &cgrp->flags) || in cgroup_propagate_frozen()
50 (cgrp->freezer.nr_frozen_descendants != in cgroup_propagate_frozen()
51 cgrp->nr_descendants)) in cgroup_propagate_frozen()
54 cgrp->freezer.nr_frozen_descendants -= desc; in cgroup_propagate_frozen()
57 if (cgroup_update_frozen_flag(cgrp, frozen)) in cgroup_propagate_frozen()
66 void cgroup_update_frozen(struct cgroup *cgrp) in cgroup_update_frozen() argument
75 frozen = test_bit(CGRP_FREEZE, &cgrp->flags) && in cgroup_update_frozen()
76 cgrp->freezer.nr_frozen_tasks == __cgroup_task_count(cgrp); in cgroup_update_frozen()
79 if (cgroup_update_frozen_flag(cgrp, frozen)) in cgroup_update_frozen()
80 cgroup_propagate_frozen(cgrp, frozen); in cgroup_update_frozen()
86 static void cgroup_inc_frozen_cnt(struct cgroup *cgrp) in cgroup_inc_frozen_cnt() argument
88 cgrp->freezer.nr_frozen_tasks++; in cgroup_inc_frozen_cnt()
94 static void cgroup_dec_frozen_cnt(struct cgroup *cgrp) in cgroup_dec_frozen_cnt() argument
96 cgrp->freezer.nr_frozen_tasks--; in cgroup_dec_frozen_cnt()
97 WARN_ON_ONCE(cgrp->freezer.nr_frozen_tasks < 0); in cgroup_dec_frozen_cnt()
106 struct cgroup *cgrp; in cgroup_enter_frozen() local
113 cgrp = task_dfl_cgroup(current); in cgroup_enter_frozen()
114 cgroup_inc_frozen_cnt(cgrp); in cgroup_enter_frozen()
115 cgroup_update_frozen(cgrp); in cgroup_enter_frozen()
130 struct cgroup *cgrp; in cgroup_leave_frozen() local
133 cgrp = task_dfl_cgroup(current); in cgroup_leave_frozen()
134 if (always_leave || !test_bit(CGRP_FREEZE, &cgrp->flags)) { in cgroup_leave_frozen()
135 cgroup_dec_frozen_cnt(cgrp); in cgroup_leave_frozen()
136 cgroup_update_frozen(cgrp); in cgroup_leave_frozen()
174 static void cgroup_do_freeze(struct cgroup *cgrp, bool freeze, u64 ts_nsec) in cgroup_do_freeze() argument
182 write_seqcount_begin(&cgrp->freezer.freeze_seq); in cgroup_do_freeze()
184 set_bit(CGRP_FREEZE, &cgrp->flags); in cgroup_do_freeze()
185 cgrp->freezer.freeze_start_nsec = ts_nsec; in cgroup_do_freeze()
187 clear_bit(CGRP_FREEZE, &cgrp->flags); in cgroup_do_freeze()
188 cgrp->freezer.frozen_nsec += (ts_nsec - in cgroup_do_freeze()
189 cgrp->freezer.freeze_start_nsec); in cgroup_do_freeze()
191 write_seqcount_end(&cgrp->freezer.freeze_seq); in cgroup_do_freeze()
195 TRACE_CGROUP_PATH(freeze, cgrp); in cgroup_do_freeze()
197 TRACE_CGROUP_PATH(unfreeze, cgrp); in cgroup_do_freeze()
199 css_task_iter_start(&cgrp->self, 0, &it); in cgroup_do_freeze()
216 if (cgrp->nr_descendants == cgrp->freezer.nr_frozen_descendants) in cgroup_do_freeze()
217 cgroup_update_frozen(cgrp); in cgroup_do_freeze()
263 void cgroup_freeze(struct cgroup *cgrp, bool freeze) in cgroup_freeze() argument
277 if (cgrp->freezer.freeze == freeze) in cgroup_freeze()
280 cgrp->freezer.freeze = freeze; in cgroup_freeze()
286 css_for_each_descendant_pre(css, &cgrp->self) { in cgroup_freeze()
322 TRACE_CGROUP_PATH(notify_frozen, cgrp, in cgroup_freeze()
323 test_bit(CGRP_FROZEN, &cgrp->flags)); in cgroup_freeze()
324 cgroup_file_notify(&cgrp->events_file); in cgroup_freeze()