Lines Matching refs:ss

247 					      struct cgroup_subsys *ss);
488 struct cgroup_subsys *ss) in cgroup_css() argument
490 if (CGROUP_HAS_SUBSYS_CONFIG && ss) in cgroup_css()
491 return rcu_dereference_check(cgrp->subsys[ss->id], in cgroup_css()
508 struct cgroup_subsys *ss) in cgroup_e_css_by_mask() argument
512 if (!ss) in cgroup_e_css_by_mask()
519 while (!(cgroup_ss_mask(cgrp) & (1 << ss->id))) { in cgroup_e_css_by_mask()
525 return cgroup_css(cgrp, ss); in cgroup_e_css_by_mask()
542 struct cgroup_subsys *ss) in cgroup_e_css() argument
550 css = cgroup_css(cgrp, ss); in cgroup_e_css()
557 return init_css_set.subsys[ss->id]; in cgroup_e_css()
572 struct cgroup_subsys *ss) in cgroup_get_e_css() argument
582 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
589 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
662 if (CGROUP_HAS_SUBSYS_CONFIG && cft->ss) in of_css()
663 return rcu_dereference_raw(cgrp->subsys[cft->ss->id]); in of_css()
693 #define do_each_subsys_mask(ss, ssid, ss_mask) do { \ argument
700 (ss) = cgroup_subsys[ssid]; \
928 struct cgroup_subsys *ss; in css_set_hash() local
931 for_each_subsys(ss, i) in css_set_hash()
941 struct cgroup_subsys *ss; in put_css_set_locked() local
952 for_each_subsys(ss, ssid) { in put_css_set_locked()
1069 struct cgroup_subsys *ss; in find_existing_css_set() local
1079 for_each_subsys(ss, i) { in find_existing_css_set()
1085 template[i] = cgroup_e_css_by_mask(cgrp, ss); in find_existing_css_set()
1190 struct cgroup_subsys *ss; in find_css_set() local
1252 for_each_subsys(ss, ssid) { in find_css_set()
1529 struct cgroup_subsys *ss = cft->ss; in cgroup_file_name() local
1531 if (cft->ss && !(cft->flags & CFTYPE_NO_PREFIX) && in cgroup_file_name()
1536 dbg, cgroup_on_dfl(cgrp) ? ss->name : ss->legacy_name, in cgroup_file_name()
1582 struct cgroup_subsys *ss; in cgroup_calc_subtree_ss_mask() local
1592 do_each_subsys_mask(ss, ssid, cur_ss_mask) { in cgroup_calc_subtree_ss_mask()
1593 new_ss_mask |= ss->depends_on; in cgroup_calc_subtree_ss_mask()
1691 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file()
1718 if (!css->ss) { in css_clear_dir()
1730 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1750 if (!css->ss) { in css_populate_dir()
1773 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1786 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1797 struct cgroup_subsys *ss; in rebind_subsystems() local
1803 do_each_subsys_mask(ss, ssid, ss_mask) { in rebind_subsystems()
1809 if (css_next_child(NULL, cgroup_css(&ss->root->cgrp, ss)) && in rebind_subsystems()
1810 !ss->implicit_on_dfl) in rebind_subsystems()
1814 if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root) in rebind_subsystems()
1821 if (ss->root == &cgrp_dfl_root) in rebind_subsystems()
1838 do_each_subsys_mask(ss, ssid, ss_mask) { in rebind_subsystems()
1839 struct cgroup_root *src_root = ss->root; in rebind_subsystems()
1841 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems()
1845 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1857 ss->root = dst_root; in rebind_subsystems()
1861 WARN_ON(!list_empty(&dcgrp->e_csets[ss->id])); in rebind_subsystems()
1862 list_for_each_entry_safe(cset, cset_pos, &scgrp->e_csets[ss->id], in rebind_subsystems()
1863 e_cset_node[ss->id]) { in rebind_subsystems()
1864 list_move_tail(&cset->e_cset_node[ss->id], in rebind_subsystems()
1865 &dcgrp->e_csets[ss->id]); in rebind_subsystems()
1874 if (it->cset_head == &scgrp->e_csets[ss->id]) in rebind_subsystems()
1875 it->cset_head = &dcgrp->e_csets[ss->id]; in rebind_subsystems()
1879 if (ss->css_rstat_flush) { in rebind_subsystems()
1898 ss->name, ret); in rebind_subsystems()
1900 if (ss->bind) in rebind_subsystems()
1901 ss->bind(css); in rebind_subsystems()
2055 struct cgroup_subsys *ss; in init_cgroup_housekeeping() local
2071 for_each_subsys(ss, ssid) in init_cgroup_housekeeping()
2607 struct cgroup_subsys *ss; in cgroup_migrate_execute() local
2614 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2615 if (ss->can_attach) { in cgroup_migrate_execute()
2617 ret = ss->can_attach(tset); in cgroup_migrate_execute()
2661 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2662 if (ss->attach) { in cgroup_migrate_execute()
2664 ss->attach(tset); in cgroup_migrate_execute()
2674 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2677 if (ss->cancel_attach) { in cgroup_migrate_execute()
2679 ss->cancel_attach(tset); in cgroup_migrate_execute()
2844 struct cgroup_subsys *ss; in cgroup_migrate_prepare_dst() local
2875 for_each_subsys(ss, ssid) in cgroup_migrate_prepare_dst()
3022 struct cgroup_subsys *ss; in cgroup_procs_write_finish() local
3030 for_each_subsys(ss, ssid) in cgroup_procs_write_finish()
3031 if (ss->post_attach) in cgroup_procs_write_finish()
3032 ss->post_attach(); in cgroup_procs_write_finish()
3037 struct cgroup_subsys *ss; in cgroup_print_ss_mask() local
3041 do_each_subsys_mask(ss, ssid, ss_mask) { in cgroup_print_ss_mask()
3044 seq_puts(seq, ss->name); in cgroup_print_ss_mask()
3153 struct cgroup_subsys *ss; in cgroup_lock_and_drain_offline() local
3160 for_each_subsys(ss, ssid) { in cgroup_lock_and_drain_offline()
3161 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_lock_and_drain_offline()
3244 struct cgroup_subsys *ss = css->ss; in css_visible() local
3247 if (cgroup_control(cgrp) & (1 << ss->id)) in css_visible()
3249 if (!(cgroup_ss_mask(cgrp) & (1 << ss->id))) in css_visible()
3251 return cgroup_on_dfl(cgrp) && ss->implicit_on_dfl; in css_visible()
3271 struct cgroup_subsys *ss; in cgroup_apply_control_enable() local
3275 for_each_subsys(ss, ssid) { in cgroup_apply_control_enable()
3276 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_enable()
3278 if (!(cgroup_ss_mask(dsct) & (1 << ss->id))) in cgroup_apply_control_enable()
3282 css = css_create(dsct, ss); in cgroup_apply_control_enable()
3317 struct cgroup_subsys *ss; in cgroup_apply_control_disable() local
3321 for_each_subsys(ss, ssid) { in cgroup_apply_control_disable()
3322 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_disable()
3330 !(cgroup_ss_mask(dsct) & (1 << ss->id))) { in cgroup_apply_control_disable()
3334 if (ss->css_reset) in cgroup_apply_control_disable()
3335 ss->css_reset(css); in cgroup_apply_control_disable()
3440 struct cgroup_subsys *ss; in cgroup_subtree_control_write() local
3452 do_each_subsys_mask(ss, ssid, ~cgrp_dfl_inhibit_ss_mask) { in cgroup_subtree_control_write()
3454 strcmp(tok + 1, ss->name)) in cgroup_subtree_control_write()
3476 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3769 struct cgroup_subsys *ss) in cgroup_tryget_css() argument
3774 css = cgroup_css(cgrp, ss); in cgroup_tryget_css()
3785 struct cgroup_subsys *ss = cgroup_subsys[ssid]; in cgroup_extra_stat_show() local
3789 if (!ss->css_extra_stat_show) in cgroup_extra_stat_show()
3792 css = cgroup_tryget_css(cgrp, ss); in cgroup_extra_stat_show()
3796 ret = ss->css_extra_stat_show(seq, css); in cgroup_extra_stat_show()
3804 struct cgroup_subsys *ss = cgroup_subsys[ssid]; in cgroup_local_stat_show() local
3808 if (!ss->css_local_stat_show) in cgroup_local_stat_show()
3811 css = cgroup_tryget_css(cgrp, ss); in cgroup_local_stat_show()
3815 ret = ss->css_local_stat_show(seq, css); in cgroup_local_stat_show()
4190 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
4361 struct cgroup_subsys *ss = cfts[0].ss; in cgroup_apply_cftypes() local
4362 struct cgroup *root = &ss->root->cgrp; in cgroup_apply_cftypes()
4369 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
4394 cft->ss = NULL; in cgroup_exit_cftypes()
4402 static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_init_cftypes() argument
4410 WARN_ON(cft->ss || cft->kf_ops); in cgroup_init_cftypes()
4436 cft->ss = ss; in cgroup_init_cftypes()
4493 int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_cftypes() argument
4497 if (!cgroup_ssid_enabled(ss->id)) in cgroup_add_cftypes()
4503 ret = cgroup_init_cftypes(ss, cfts); in cgroup_add_cftypes()
4509 list_add_tail(&cfts->node, &ss->cfts); in cgroup_add_cftypes()
4526 int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_dfl_cftypes() argument
4532 return cgroup_add_cftypes(ss, cfts); in cgroup_add_dfl_cftypes()
4543 int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_legacy_cftypes() argument
4549 return cgroup_add_cftypes(ss, cfts); in cgroup_add_legacy_cftypes()
4857 if (it->ss) { in css_task_iter_next_css_set()
4858 cset = container_of(l, struct css_set, e_cset_node[it->ss->id]); in css_task_iter_next_css_set()
5019 it->ss = css->ss; in css_task_iter_start()
5022 if (CGROUP_HAS_SUBSYS_CONFIG && it->ss) in css_task_iter_start()
5023 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
5443 struct cgroup_subsys *ss = css->ss; in css_free_rwork_fn() local
5448 if (ss) { in css_free_rwork_fn()
5453 ss->css_free(css); in css_free_rwork_fn()
5454 cgroup_idr_remove(&ss->css_idr, id); in css_free_rwork_fn()
5494 struct cgroup_subsys *ss = css->ss; in css_release_work_fn() local
5502 if (ss) { in css_release_work_fn()
5511 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
5512 if (ss->css_released) in css_release_work_fn()
5513 ss->css_released(css); in css_release_work_fn()
5515 cgrp->nr_dying_subsys[ss->id]--; in css_release_work_fn()
5526 parent_cgrp->nr_dying_subsys[ss->id]--; in css_release_work_fn()
5571 struct cgroup_subsys *ss, struct cgroup *cgrp) in init_and_link_css() argument
5579 css->ss = ss; in init_and_link_css()
5588 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
5592 if (ss->css_rstat_flush) in init_and_link_css()
5595 BUG_ON(cgroup_css(cgrp, ss)); in init_and_link_css()
5601 struct cgroup_subsys *ss = css->ss; in online_css() local
5606 if (ss->css_online) in online_css()
5607 ret = ss->css_online(css); in online_css()
5610 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
5625 struct cgroup_subsys *ss = css->ss; in offline_css() local
5632 if (ss->css_offline) in offline_css()
5633 ss->css_offline(css); in offline_css()
5636 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
5640 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5647 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5661 struct cgroup_subsys *ss) in css_create() argument
5664 struct cgroup_subsys_state *parent_css = cgroup_css(parent, ss); in css_create()
5670 css = ss->css_alloc(parent_css); in css_create()
5676 init_and_link_css(css, ss, cgrp); in css_create()
5682 err = cgroup_idr_alloc(&ss->css_idr, NULL, 2, 0, GFP_KERNEL); in css_create()
5689 cgroup_idr_replace(&ss->css_idr, css, css->id); in css_create()
5958 if (css->ss->css_killed) in kill_css()
5959 css->ss->css_killed(css); in kill_css()
6109 static void __init cgroup_init_subsys(struct cgroup_subsys *ss, bool early) in cgroup_init_subsys() argument
6113 pr_debug("Initializing cgroup subsys %s\n", ss->name); in cgroup_init_subsys()
6117 idr_init(&ss->css_idr); in cgroup_init_subsys()
6118 INIT_LIST_HEAD(&ss->cfts); in cgroup_init_subsys()
6121 ss->root = &cgrp_dfl_root; in cgroup_init_subsys()
6122 css = ss->css_alloc(NULL); in cgroup_init_subsys()
6125 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
6137 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
6145 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
6147 have_fork_callback |= (bool)ss->fork << ss->id; in cgroup_init_subsys()
6148 have_exit_callback |= (bool)ss->exit << ss->id; in cgroup_init_subsys()
6149 have_release_callback |= (bool)ss->release << ss->id; in cgroup_init_subsys()
6150 have_canfork_callback |= (bool)ss->can_fork << ss->id; in cgroup_init_subsys()
6171 struct cgroup_subsys *ss; in cgroup_init_early() local
6180 for_each_subsys(ss, i) { in cgroup_init_early()
6181 WARN(!ss->css_alloc || !ss->css_free || ss->name || ss->id, in cgroup_init_early()
6183 i, cgroup_subsys_name[i], ss->css_alloc, ss->css_free, in cgroup_init_early()
6184 ss->id, ss->name); in cgroup_init_early()
6188 ss->id = i; in cgroup_init_early()
6189 ss->name = cgroup_subsys_name[i]; in cgroup_init_early()
6190 if (!ss->legacy_name) in cgroup_init_early()
6191 ss->legacy_name = cgroup_subsys_name[i]; in cgroup_init_early()
6193 if (ss->early_init) in cgroup_init_early()
6194 cgroup_init_subsys(ss, true); in cgroup_init_early()
6207 struct cgroup_subsys *ss; in cgroup_init() local
6232 for_each_subsys(ss, ssid) { in cgroup_init()
6233 if (ss->early_init) { in cgroup_init()
6235 init_css_set.subsys[ss->id]; in cgroup_init()
6237 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
6241 cgroup_init_subsys(ss, false); in cgroup_init()
6257 ss->legacy_name); in cgroup_init()
6259 cgrp_dfl_root.subsys_mask |= 1 << ss->id; in cgroup_init()
6262 WARN_ON(ss->implicit_on_dfl && !ss->threaded); in cgroup_init()
6264 if (ss->implicit_on_dfl) in cgroup_init()
6265 cgrp_dfl_implicit_ss_mask |= 1 << ss->id; in cgroup_init()
6266 else if (!ss->dfl_cftypes) in cgroup_init()
6267 cgrp_dfl_inhibit_ss_mask |= 1 << ss->id; in cgroup_init()
6269 if (ss->threaded) in cgroup_init()
6270 cgrp_dfl_threaded_ss_mask |= 1 << ss->id; in cgroup_init()
6272 if (ss->dfl_cftypes == ss->legacy_cftypes) { in cgroup_init()
6273 WARN_ON(cgroup_add_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
6275 WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
6276 WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes)); in cgroup_init()
6279 if (ss->bind) in cgroup_init()
6280 ss->bind(init_css_set.subsys[ssid]); in cgroup_init()
6393 struct cgroup_subsys *ss; in proc_cgroup_show() local
6407 for_each_subsys(ss, ssid) in proc_cgroup_show()
6410 ss->legacy_name); in proc_cgroup_show()
6658 struct cgroup_subsys *ss; in cgroup_can_fork() local
6665 do_each_subsys_mask(ss, i, have_canfork_callback) { in cgroup_can_fork()
6666 ret = ss->can_fork(child, kargs->cset); in cgroup_can_fork()
6674 for_each_subsys(ss, j) { in cgroup_can_fork()
6677 if (ss->cancel_fork) in cgroup_can_fork()
6678 ss->cancel_fork(child, kargs->cset); in cgroup_can_fork()
6698 struct cgroup_subsys *ss; in cgroup_cancel_fork() local
6701 for_each_subsys(ss, i) in cgroup_cancel_fork()
6702 if (ss->cancel_fork) in cgroup_cancel_fork()
6703 ss->cancel_fork(child, kargs->cset); in cgroup_cancel_fork()
6723 struct cgroup_subsys *ss; in cgroup_post_fork() local
6785 do_each_subsys_mask(ss, i, have_fork_callback) { in cgroup_post_fork()
6786 ss->fork(child); in cgroup_post_fork()
6814 struct cgroup_subsys *ss; in cgroup_exit() local
6839 do_each_subsys_mask(ss, i, have_exit_callback) { in cgroup_exit()
6840 ss->exit(tsk); in cgroup_exit()
6846 struct cgroup_subsys *ss; in cgroup_release() local
6849 do_each_subsys_mask(ss, ssid, have_release_callback) { in cgroup_release()
6850 ss->release(task); in cgroup_release()
6869 struct cgroup_subsys *ss; in cgroup_disable() local
6877 for_each_subsys(ss, i) { in cgroup_disable()
6878 if (strcmp(token, ss->name) && in cgroup_disable()
6879 strcmp(token, ss->legacy_name)) in cgroup_disable()
6884 ss->name); in cgroup_disable()
6926 struct cgroup_subsys *ss) in css_tryget_online_from_dir() argument
6947 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
6964 struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss) in css_from_id() argument
6967 return idr_find(&ss->css_idr, id); in css_from_id()
7173 struct cgroup_subsys *ss; in delegate_show() local
7183 for_each_subsys(ss, ssid) in delegate_show()
7184 ret += show_delegatable_files(ss->dfl_cftypes, buf + ret, in delegate_show()