Lines Matching full:ss
242 struct cgroup_subsys *ss);
472 * @ss: the subsystem of interest (%NULL returns @cgrp->self)
474 * Return @cgrp's css (cgroup_subsys_state) associated with @ss. This
481 struct cgroup_subsys *ss) in cgroup_css() argument
483 if (CGROUP_HAS_SUBSYS_CONFIG && ss) in cgroup_css()
484 return rcu_dereference_check(cgrp->subsys[ss->id], in cgroup_css()
493 * @ss: the subsystem of interest
495 * Find and get @cgrp's css associated with @ss. If the css doesn't exist
499 struct cgroup_subsys *ss) in cgroup_tryget_css() argument
504 css = cgroup_css(cgrp, ss); in cgroup_tryget_css()
513 * cgroup_e_css_by_mask - obtain a cgroup's effective css for the specified ss
515 * @ss: the subsystem of interest (%NULL returns @cgrp->self)
518 * as the matching css of the nearest ancestor including self which has @ss
519 * enabled. If @ss is associated with the hierarchy @cgrp is on, this
523 struct cgroup_subsys *ss) in cgroup_e_css_by_mask() argument
527 if (!ss) in cgroup_e_css_by_mask()
534 while (!(cgroup_ss_mask(cgrp) & (1 << ss->id))) { in cgroup_e_css_by_mask()
540 return cgroup_css(cgrp, ss); in cgroup_e_css_by_mask()
546 * @ss: the subsystem of interest
548 * Find and get the effective css of @cgrp for @ss. The effective css is
550 * has @ss enabled. If @ss is not mounted on the hierarchy @cgrp is on,
557 struct cgroup_subsys *ss) in cgroup_e_css() argument
565 css = cgroup_css(cgrp, ss); in cgroup_e_css()
572 return init_css_set.subsys[ss->id]; in cgroup_e_css()
578 * @ss: the subsystem of interest
580 * Find and get the effective css of @cgrp for @ss. The effective css is
582 * has @ss enabled. If @ss is not mounted on the hierarchy @cgrp is on,
587 struct cgroup_subsys *ss) in cgroup_get_e_css() argument
597 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
604 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
664 if (CGROUP_HAS_SUBSYS_CONFIG && cft->ss) in of_css()
665 return rcu_dereference_raw(cgrp->subsys[cft->ss->id]); in of_css()
703 * @ss: the iteration cursor
704 * @ssid: the index of @ss, CGROUP_SUBSYS_COUNT after reaching the end
710 #define do_each_subsys_mask(ss, ssid, ss_mask) do { \ argument
717 (ss) = cgroup_subsys[ssid]; \
944 struct cgroup_subsys *ss; in css_set_hash() local
947 for_each_subsys(ss, i) in css_set_hash()
957 struct cgroup_subsys *ss; in put_css_set_locked() local
968 for_each_subsys(ss, ssid) { in put_css_set_locked()
1085 struct cgroup_subsys *ss; in find_existing_css_set() local
1095 for_each_subsys(ss, i) { in find_existing_css_set()
1098 * @ss is in this hierarchy, so we want the in find_existing_css_set()
1101 template[i] = cgroup_e_css_by_mask(cgrp, ss); in find_existing_css_set()
1104 * @ss is not in this hierarchy, so we don't want in find_existing_css_set()
1206 struct cgroup_subsys *ss; in find_css_set() local
1267 for_each_subsys(ss, ssid) { in find_css_set()
1490 struct cgroup_subsys *ss = cft->ss; in cgroup_file_name() local
1492 if (cft->ss && !(cft->flags & CFTYPE_NO_PREFIX) && in cgroup_file_name()
1497 dbg, cgroup_on_dfl(cgrp) ? ss->name : ss->legacy_name, in cgroup_file_name()
1543 struct cgroup_subsys *ss; in cgroup_calc_subtree_ss_mask() local
1553 do_each_subsys_mask(ss, ssid, cur_ss_mask) { in cgroup_calc_subtree_ss_mask()
1554 new_ss_mask |= ss->depends_on; in cgroup_calc_subtree_ss_mask()
1652 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file()
1679 if (!css->ss) { in css_clear_dir()
1687 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1707 if (!css->ss) { in css_populate_dir()
1717 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1730 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1741 struct cgroup_subsys *ss; in rebind_subsystems() local
1746 do_each_subsys_mask(ss, ssid, ss_mask) { in rebind_subsystems()
1748 * If @ss has non-root csses attached to it, can't move. in rebind_subsystems()
1749 * If @ss is an implicit controller, it is exempt from this in rebind_subsystems()
1752 if (css_next_child(NULL, cgroup_css(&ss->root->cgrp, ss)) && in rebind_subsystems()
1753 !ss->implicit_on_dfl) in rebind_subsystems()
1757 if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root) in rebind_subsystems()
1761 do_each_subsys_mask(ss, ssid, ss_mask) { in rebind_subsystems()
1762 struct cgroup_root *src_root = ss->root; in rebind_subsystems()
1764 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems()
1767 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1777 ss->root = dst_root; in rebind_subsystems()
1782 list_move_tail(&cset->e_cset_node[ss->id], in rebind_subsystems()
1783 &dcgrp->e_csets[ss->id]); in rebind_subsystems()
1786 if (ss->css_rstat_flush) { in rebind_subsystems()
1804 ss->name, ret); in rebind_subsystems()
1806 if (ss->bind) in rebind_subsystems()
1807 ss->bind(css); in rebind_subsystems()
1920 struct cgroup_subsys *ss; in init_cgroup_housekeeping() local
1936 for_each_subsys(ss, ssid) in init_cgroup_housekeeping()
2435 struct cgroup_subsys *ss; in cgroup_migrate_execute() local
2442 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2443 if (ss->can_attach) { in cgroup_migrate_execute()
2445 ret = ss->can_attach(tset); in cgroup_migrate_execute()
2489 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2490 if (ss->attach) { in cgroup_migrate_execute()
2492 ss->attach(tset); in cgroup_migrate_execute()
2502 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2505 if (ss->cancel_attach) { in cgroup_migrate_execute()
2507 ss->cancel_attach(tset); in cgroup_migrate_execute()
2670 struct cgroup_subsys *ss; in cgroup_migrate_prepare_dst() local
2701 for_each_subsys(ss, ssid) in cgroup_migrate_prepare_dst()
2858 struct cgroup_subsys *ss; in cgroup_procs_write_finish() local
2866 for_each_subsys(ss, ssid) in cgroup_procs_write_finish()
2867 if (ss->post_attach) in cgroup_procs_write_finish()
2868 ss->post_attach(); in cgroup_procs_write_finish()
2873 struct cgroup_subsys *ss; in cgroup_print_ss_mask() local
2877 do_each_subsys_mask(ss, ssid, ss_mask) { in cgroup_print_ss_mask()
2880 seq_puts(seq, ss->name); in cgroup_print_ss_mask()
2971 struct cgroup_subsys *ss; in cgroup_lock_and_drain_offline() local
2978 for_each_subsys(ss, ssid) { in cgroup_lock_and_drain_offline()
2979 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_lock_and_drain_offline()
3062 struct cgroup_subsys *ss = css->ss; in css_visible() local
3065 if (cgroup_control(cgrp) & (1 << ss->id)) in css_visible()
3067 if (!(cgroup_ss_mask(cgrp) & (1 << ss->id))) in css_visible()
3069 return cgroup_on_dfl(cgrp) && ss->implicit_on_dfl; in css_visible()
3089 struct cgroup_subsys *ss; in cgroup_apply_control_enable() local
3093 for_each_subsys(ss, ssid) { in cgroup_apply_control_enable()
3094 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_enable()
3096 if (!(cgroup_ss_mask(dsct) & (1 << ss->id))) in cgroup_apply_control_enable()
3100 css = css_create(dsct, ss); in cgroup_apply_control_enable()
3135 struct cgroup_subsys *ss; in cgroup_apply_control_disable() local
3139 for_each_subsys(ss, ssid) { in cgroup_apply_control_disable()
3140 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_disable()
3148 !(cgroup_ss_mask(dsct) & (1 << ss->id))) { in cgroup_apply_control_disable()
3152 if (ss->css_reset) in cgroup_apply_control_disable()
3153 ss->css_reset(css); in cgroup_apply_control_disable()
3262 struct cgroup_subsys *ss; in cgroup_subtree_control_write() local
3274 do_each_subsys_mask(ss, ssid, ~cgrp_dfl_inhibit_ss_mask) { in cgroup_subtree_control_write()
3276 strcmp(tok + 1, ss->name)) in cgroup_subtree_control_write()
3298 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3556 struct cgroup_subsys *ss = cgroup_subsys[ssid]; in cgroup_extra_stat_show() local
3560 if (!ss->css_extra_stat_show) in cgroup_extra_stat_show()
3563 css = cgroup_tryget_css(cgrp, ss); in cgroup_extra_stat_show()
3567 ret = ss->css_extra_stat_show(seq, css); in cgroup_extra_stat_show()
3838 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
4032 struct cgroup_subsys *ss = cfts[0].ss; in cgroup_apply_cftypes() local
4033 struct cgroup *root = &ss->root->cgrp; in cgroup_apply_cftypes()
4040 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
4065 cft->ss = NULL; in cgroup_exit_cftypes()
4072 static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_init_cftypes() argument
4079 WARN_ON(cft->ss || cft->kf_ops); in cgroup_init_cftypes()
4103 cft->ss = ss; in cgroup_init_cftypes()
4113 if (!cfts || !cfts[0].ss) in cgroup_rm_cftypes_locked()
4145 * @ss: target cgroup subsystem
4148 * Register @cfts to @ss. Files described by @cfts are created for all
4149 * existing cgroups to which @ss is attached and all future cgroups will
4150 * have them too. This function can be called anytime whether @ss is
4157 static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_cftypes() argument
4161 if (!cgroup_ssid_enabled(ss->id)) in cgroup_add_cftypes()
4167 ret = cgroup_init_cftypes(ss, cfts); in cgroup_add_cftypes()
4173 list_add_tail(&cfts->node, &ss->cfts); in cgroup_add_cftypes()
4184 * @ss: target cgroup subsystem
4190 int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_dfl_cftypes() argument
4196 return cgroup_add_cftypes(ss, cfts); in cgroup_add_dfl_cftypes()
4201 * @ss: target cgroup subsystem
4207 int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_legacy_cftypes() argument
4213 return cgroup_add_cftypes(ss, cfts); in cgroup_add_legacy_cftypes()
4499 if (it->ss) { in css_task_iter_next_css_set()
4500 cset = container_of(l, struct css_set, e_cset_node[it->ss->id]); in css_task_iter_next_css_set()
4659 it->ss = css->ss; in css_task_iter_start()
4662 if (CGROUP_HAS_SUBSYS_CONFIG && it->ss) in css_task_iter_start()
4663 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
5049 struct cgroup_subsys *ss = css->ss; in css_free_rwork_fn() local
5054 if (ss) { in css_free_rwork_fn()
5059 ss->css_free(css); in css_free_rwork_fn()
5060 cgroup_idr_remove(&ss->css_idr, id); in css_free_rwork_fn()
5098 struct cgroup_subsys *ss = css->ss; in css_release_work_fn() local
5106 if (ss) { in css_release_work_fn()
5113 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
5114 if (ss->css_released) in css_release_work_fn()
5115 ss->css_released(css); in css_release_work_fn()
5158 struct cgroup_subsys *ss, struct cgroup *cgrp) in init_and_link_css() argument
5166 css->ss = ss; in init_and_link_css()
5175 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
5179 if (ss->css_rstat_flush) in init_and_link_css()
5182 BUG_ON(cgroup_css(cgrp, ss)); in init_and_link_css()
5188 struct cgroup_subsys *ss = css->ss; in online_css() local
5193 if (ss->css_online) in online_css()
5194 ret = ss->css_online(css); in online_css()
5197 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
5209 struct cgroup_subsys *ss = css->ss; in offline_css() local
5216 if (ss->css_offline) in offline_css()
5217 ss->css_offline(css); in offline_css()
5220 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
5228 * @ss: the subsys of new css
5230 * Create a new css associated with @cgrp - @ss pair. On success, the new
5235 struct cgroup_subsys *ss) in css_create() argument
5238 struct cgroup_subsys_state *parent_css = cgroup_css(parent, ss); in css_create()
5244 css = ss->css_alloc(parent_css); in css_create()
5250 init_and_link_css(css, ss, cgrp); in css_create()
5256 err = cgroup_idr_alloc(&ss->css_idr, NULL, 2, 0, GFP_KERNEL); in css_create()
5263 cgroup_idr_replace(&ss->css_idr, css, css->id); in css_create()
5678 static void __init cgroup_init_subsys(struct cgroup_subsys *ss, bool early) in cgroup_init_subsys() argument
5682 pr_debug("Initializing cgroup subsys %s\n", ss->name); in cgroup_init_subsys()
5686 idr_init(&ss->css_idr); in cgroup_init_subsys()
5687 INIT_LIST_HEAD(&ss->cfts); in cgroup_init_subsys()
5690 ss->root = &cgrp_dfl_root; in cgroup_init_subsys()
5691 css = ss->css_alloc(cgroup_css(&cgrp_dfl_root.cgrp, ss)); in cgroup_init_subsys()
5694 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
5706 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
5714 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
5716 have_fork_callback |= (bool)ss->fork << ss->id; in cgroup_init_subsys()
5717 have_exit_callback |= (bool)ss->exit << ss->id; in cgroup_init_subsys()
5718 have_release_callback |= (bool)ss->release << ss->id; in cgroup_init_subsys()
5719 have_canfork_callback |= (bool)ss->can_fork << ss->id; in cgroup_init_subsys()
5740 struct cgroup_subsys *ss; in cgroup_init_early() local
5749 for_each_subsys(ss, i) { in cgroup_init_early()
5750 WARN(!ss->css_alloc || !ss->css_free || ss->name || ss->id, in cgroup_init_early()
5752 i, cgroup_subsys_name[i], ss->css_alloc, ss->css_free, in cgroup_init_early()
5753 ss->id, ss->name); in cgroup_init_early()
5757 ss->id = i; in cgroup_init_early()
5758 ss->name = cgroup_subsys_name[i]; in cgroup_init_early()
5759 if (!ss->legacy_name) in cgroup_init_early()
5760 ss->legacy_name = cgroup_subsys_name[i]; in cgroup_init_early()
5762 if (ss->early_init) in cgroup_init_early()
5763 cgroup_init_subsys(ss, true); in cgroup_init_early()
5776 struct cgroup_subsys *ss; in cgroup_init() local
5806 for_each_subsys(ss, ssid) { in cgroup_init()
5807 if (ss->early_init) { in cgroup_init()
5809 init_css_set.subsys[ss->id]; in cgroup_init()
5811 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
5815 cgroup_init_subsys(ss, false); in cgroup_init()
5831 ss->name); in cgroup_init()
5833 cgrp_dfl_root.subsys_mask |= 1 << ss->id; in cgroup_init()
5836 WARN_ON(ss->implicit_on_dfl && !ss->threaded); in cgroup_init()
5838 if (ss->implicit_on_dfl) in cgroup_init()
5839 cgrp_dfl_implicit_ss_mask |= 1 << ss->id; in cgroup_init()
5840 else if (!ss->dfl_cftypes) in cgroup_init()
5841 cgrp_dfl_inhibit_ss_mask |= 1 << ss->id; in cgroup_init()
5843 if (ss->threaded) in cgroup_init()
5844 cgrp_dfl_threaded_ss_mask |= 1 << ss->id; in cgroup_init()
5846 if (ss->dfl_cftypes == ss->legacy_cftypes) { in cgroup_init()
5847 WARN_ON(cgroup_add_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
5849 WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
5850 WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes)); in cgroup_init()
5853 if (ss->bind) in cgroup_init()
5854 ss->bind(init_css_set.subsys[ssid]); in cgroup_init()
5950 struct cgroup_subsys *ss; in proc_cgroup_show() local
5959 for_each_subsys(ss, ssid) in proc_cgroup_show()
5962 ss->legacy_name); in proc_cgroup_show()
6177 struct cgroup_subsys *ss; in cgroup_can_fork() local
6184 do_each_subsys_mask(ss, i, have_canfork_callback) { in cgroup_can_fork()
6185 ret = ss->can_fork(child, kargs->cset); in cgroup_can_fork()
6193 for_each_subsys(ss, j) { in cgroup_can_fork()
6196 if (ss->cancel_fork) in cgroup_can_fork()
6197 ss->cancel_fork(child, kargs->cset); in cgroup_can_fork()
6217 struct cgroup_subsys *ss; in cgroup_cancel_fork() local
6220 for_each_subsys(ss, i) in cgroup_cancel_fork()
6221 if (ss->cancel_fork) in cgroup_cancel_fork()
6222 ss->cancel_fork(child, kargs->cset); in cgroup_cancel_fork()
6240 struct cgroup_subsys *ss; in cgroup_post_fork() local
6295 * Call ss->fork(). This must happen after @child is linked on in cgroup_post_fork()
6299 do_each_subsys_mask(ss, i, have_fork_callback) { in cgroup_post_fork()
6300 ss->fork(child); in cgroup_post_fork()
6328 struct cgroup_subsys *ss; in cgroup_exit() local
6348 do_each_subsys_mask(ss, i, have_exit_callback) { in cgroup_exit()
6349 ss->exit(tsk); in cgroup_exit()
6355 struct cgroup_subsys *ss; in cgroup_release() local
6358 do_each_subsys_mask(ss, ssid, have_release_callback) { in cgroup_release()
6359 ss->release(task); in cgroup_release()
6376 struct cgroup_subsys *ss; in cgroup_disable() local
6384 for_each_subsys(ss, i) { in cgroup_disable()
6385 if (strcmp(token, ss->name) && in cgroup_disable()
6386 strcmp(token, ss->legacy_name)) in cgroup_disable()
6391 ss->name); in cgroup_disable()
6420 * @ss: subsystem of interest
6422 * If @dentry is a directory for a cgroup which has @ss enabled on it, try
6427 struct cgroup_subsys *ss) in css_tryget_online_from_dir() argument
6448 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
6460 * @ss: cgroup subsys to be looked into
6465 struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss) in css_from_id() argument
6468 return idr_find(&ss->css_idr, id); in css_from_id()
6695 struct cgroup_subsys *ss; in delegate_show() local
6702 for_each_subsys(ss, ssid) in delegate_show()
6703 ret += show_delegatable_files(ss->dfl_cftypes, buf + ret, in delegate_show()