Lines Matching refs:ss

191 static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss,
250 struct cgroup_subsys *ss) in cgroup_css() argument
252 if (ss) in cgroup_css()
253 return rcu_dereference_check(cgrp->subsys[ss->id], in cgroup_css()
270 struct cgroup_subsys *ss) in cgroup_e_css() argument
274 if (!ss) in cgroup_e_css()
277 if (!(cgrp->root->subsys_mask & (1 << ss->id))) in cgroup_e_css()
285 !(cgroup_parent(cgrp)->child_subsys_mask & (1 << ss->id))) in cgroup_e_css()
288 return cgroup_css(cgrp, ss); in cgroup_e_css()
303 struct cgroup_subsys *ss) in cgroup_get_e_css() argument
310 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
317 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
343 if (cft->ss) in of_css()
344 return rcu_dereference_raw(cgrp->subsys[cft->ss->id]); in of_css()
408 #define for_each_subsys(ss, ssid) \ argument
410 (((ss) = cgroup_subsys[ssid]) || true); (ssid)++)
513 struct cgroup_subsys *ss; in css_set_hash() local
516 for_each_subsys(ss, i) in css_set_hash()
526 struct cgroup_subsys *ss; in put_css_set_locked() local
535 for_each_subsys(ss, ssid) in put_css_set_locked()
664 struct cgroup_subsys *ss; in find_existing_css_set() local
674 for_each_subsys(ss, i) { in find_existing_css_set()
680 template[i] = cgroup_e_css(cgrp, ss); in find_existing_css_set()
785 struct cgroup_subsys *ss; in find_css_set() local
842 for_each_subsys(ss, ssid) in find_css_set()
1008 if (cft->ss && !(cft->flags & CFTYPE_NO_PREFIX) && in cgroup_file_name()
1011 cft->ss->name, cft->name); in cgroup_file_name()
1076 struct cgroup_subsys *ss; in cgroup_calc_child_subsys_mask() local
1087 for_each_subsys(ss, ssid) in cgroup_calc_child_subsys_mask()
1089 new_ss_mask |= ss->depends_on; in cgroup_calc_child_subsys_mask()
1205 struct cgroup_subsys *ss; in cgroup_clear_dir() local
1208 for_each_subsys(ss, i) { in cgroup_clear_dir()
1213 list_for_each_entry(cfts, &ss->cfts, node) in cgroup_clear_dir()
1220 struct cgroup_subsys *ss; in rebind_subsystems() local
1226 for_each_subsys(ss, ssid) { in rebind_subsystems()
1231 if (css_next_child(NULL, cgroup_css(&ss->root->cgrp, ss))) in rebind_subsystems()
1235 if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root) in rebind_subsystems()
1266 for_each_subsys(ss, ssid) in rebind_subsystems()
1268 cgroup_clear_dir(&ss->root->cgrp, 1 << ssid); in rebind_subsystems()
1270 for_each_subsys(ss, ssid) { in rebind_subsystems()
1278 src_root = ss->root; in rebind_subsystems()
1279 css = cgroup_css(&src_root->cgrp, ss); in rebind_subsystems()
1281 WARN_ON(!css || cgroup_css(&dst_root->cgrp, ss)); in rebind_subsystems()
1285 ss->root = dst_root; in rebind_subsystems()
1290 list_move_tail(&cset->e_cset_node[ss->id], in rebind_subsystems()
1291 &dst_root->cgrp.e_csets[ss->id]); in rebind_subsystems()
1305 if (ss->bind) in rebind_subsystems()
1306 ss->bind(css); in rebind_subsystems()
1317 struct cgroup_subsys *ss; in cgroup_show_options() local
1320 for_each_subsys(ss, ssid) in cgroup_show_options()
1322 seq_show_option(seq, ss->name, NULL); in cgroup_show_options()
1356 struct cgroup_subsys *ss; in parse_cgroupfs_options() local
1435 for_each_subsys(ss, i) { in parse_cgroupfs_options()
1436 if (strcmp(token, ss->name)) in parse_cgroupfs_options()
1438 if (ss->disabled) in parse_cgroupfs_options()
1468 for_each_subsys(ss, i) in parse_cgroupfs_options()
1469 if (!ss->disabled) in parse_cgroupfs_options()
1607 struct cgroup_subsys *ss; in init_cgroup_housekeeping() local
1618 for_each_subsys(ss, ssid) in init_cgroup_housekeeping()
1742 struct cgroup_subsys *ss; in cgroup_mount() local
1780 for_each_subsys(ss, i) { in cgroup_mount()
1782 ss->root == &cgrp_dfl_root) in cgroup_mount()
1785 if (!percpu_ref_tryget_live(&ss->root->cgrp.self.refcnt)) { in cgroup_mount()
1791 cgroup_put(&ss->root->cgrp); in cgroup_mount()
2287 if (css->ss->can_attach) { in cgroup_migrate()
2288 ret = css->ss->can_attach(css, &tset); in cgroup_migrate()
2317 if (css->ss->attach) in cgroup_migrate()
2318 css->ss->attach(css, &tset); in cgroup_migrate()
2327 if (css->ss->cancel_attach) in cgroup_migrate()
2328 css->ss->cancel_attach(css, &tset); in cgroup_migrate()
2546 struct cgroup_subsys *ss; in cgroup_print_ss_mask() local
2550 for_each_subsys(ss, ssid) { in cgroup_print_ss_mask()
2554 seq_printf(seq, "%s", ss->name); in cgroup_print_ss_mask()
2694 struct cgroup_subsys *ss; in cgroup_subtree_control_write() local
2706 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2707 if (ss->disabled || strcmp(tok + 1, ss->name) || in cgroup_subtree_control_write()
2708 ((1 << ss->id) & cgrp_dfl_root_inhibit_ss_mask)) in cgroup_subtree_control_write()
2730 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2795 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2802 if (!cgroup_css(child, ss)) in cgroup_subtree_control_write()
2826 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2832 ret = create_css(child, ss, in cgroup_subtree_control_write()
2858 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2863 struct cgroup_subsys_state *css = cgroup_css(child, ss); in cgroup_subtree_control_write()
2869 if (ss->css_reset) in cgroup_subtree_control_write()
2870 ss->css_reset(css); in cgroup_subtree_control_write()
2881 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2882 struct cgroup_subsys_state *this_css = cgroup_css(cgrp, ss); in cgroup_subtree_control_write()
2885 if (!ss->css_e_css_changed || !this_css) in cgroup_subtree_control_write()
2890 ss->css_e_css_changed(css); in cgroup_subtree_control_write()
2903 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
2908 struct cgroup_subsys_state *css = cgroup_css(child, ss); in cgroup_subtree_control_write()
2946 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
3141 struct cgroup_subsys *ss = cfts[0].ss; in cgroup_apply_cftypes() local
3142 struct cgroup *root = &ss->root->cgrp; in cgroup_apply_cftypes()
3149 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
3174 cft->ss = NULL; in cgroup_exit_cftypes()
3181 static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_init_cftypes() argument
3188 WARN_ON(cft->ss || cft->kf_ops); in cgroup_init_cftypes()
3209 cft->ss = ss; in cgroup_init_cftypes()
3219 if (!cfts || !cfts[0].ss) in cgroup_rm_cftypes_locked()
3263 static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_cftypes() argument
3267 if (ss->disabled) in cgroup_add_cftypes()
3273 ret = cgroup_init_cftypes(ss, cfts); in cgroup_add_cftypes()
3279 list_add_tail(&cfts->node, &ss->cfts); in cgroup_add_cftypes()
3296 int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_dfl_cftypes() argument
3302 return cgroup_add_cftypes(ss, cfts); in cgroup_add_dfl_cftypes()
3313 int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_legacy_cftypes() argument
3323 ss->dfl_cftypes != ss->legacy_cftypes) { in cgroup_add_legacy_cftypes()
3328 return cgroup_add_cftypes(ss, cfts); in cgroup_add_legacy_cftypes()
3596 if (it->ss) { in css_advance_task_iter()
3598 e_cset_node[it->ss->id]); in css_advance_task_iter()
3639 it->ss = css->ss; in css_task_iter_start()
3641 if (it->ss) in css_task_iter_start()
3642 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
4326 struct cgroup_subsys *ss; in cgroup_populate_dir() local
4330 for_each_subsys(ss, i) { in cgroup_populate_dir()
4336 list_for_each_entry(cfts, &ss->cfts, node) { in cgroup_populate_dir()
4374 struct cgroup_subsys *ss = css->ss; in css_free_work_fn() local
4379 if (ss) { in css_free_work_fn()
4386 ss->css_free(css); in css_free_work_fn()
4387 cgroup_idr_remove(&ss->css_idr, id); in css_free_work_fn()
4429 struct cgroup_subsys *ss = css->ss; in css_release_work_fn() local
4437 if (ss) { in css_release_work_fn()
4439 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
4440 if (ss->css_released) in css_release_work_fn()
4441 ss->css_released(css); in css_release_work_fn()
4472 struct cgroup_subsys *ss, struct cgroup *cgrp) in init_and_link_css() argument
4480 css->ss = ss; in init_and_link_css()
4487 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
4491 BUG_ON(cgroup_css(cgrp, ss)); in init_and_link_css()
4497 struct cgroup_subsys *ss = css->ss; in online_css() local
4502 if (ss->css_online) in online_css()
4503 ret = ss->css_online(css); in online_css()
4506 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
4518 struct cgroup_subsys *ss = css->ss; in offline_css() local
4525 if (ss->css_offline) in offline_css()
4526 ss->css_offline(css); in offline_css()
4529 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
4544 static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss, in create_css() argument
4548 struct cgroup_subsys_state *parent_css = cgroup_css(parent, ss); in create_css()
4554 css = ss->css_alloc(parent_css); in create_css()
4558 init_and_link_css(css, ss, cgrp); in create_css()
4564 err = cgroup_idr_alloc(&ss->css_idr, NULL, 2, 0, GFP_NOWAIT); in create_css()
4570 err = cgroup_populate_dir(cgrp, 1 << ss->id); in create_css()
4577 cgroup_idr_replace(&ss->css_idr, css, css->id); in create_css()
4583 if (ss->broken_hierarchy && !ss->warned_broken_hierarchy && in create_css()
4586 current->comm, current->pid, ss->name); in create_css()
4587 if (!strcmp(ss->name, "memory")) in create_css()
4589 ss->warned_broken_hierarchy = true; in create_css()
4596 cgroup_clear_dir(css->cgroup, 1 << css->ss->id); in create_css()
4598 cgroup_idr_remove(&ss->css_idr, css->id); in create_css()
4611 struct cgroup_subsys *ss; in cgroup_mkdir() local
4699 for_each_subsys(ss, ssid) { in cgroup_mkdir()
4701 ret = create_css(cgrp, ss, in cgroup_mkdir()
4788 cgroup_clear_dir(css->cgroup, 1 << css->ss->id); in kill_css()
4907 static void __init cgroup_init_subsys(struct cgroup_subsys *ss, bool early) in cgroup_init_subsys() argument
4911 printk(KERN_INFO "Initializing cgroup subsys %s\n", ss->name); in cgroup_init_subsys()
4915 idr_init(&ss->css_idr); in cgroup_init_subsys()
4916 INIT_LIST_HEAD(&ss->cfts); in cgroup_init_subsys()
4919 ss->root = &cgrp_dfl_root; in cgroup_init_subsys()
4920 css = ss->css_alloc(cgroup_css(&cgrp_dfl_root.cgrp, ss)); in cgroup_init_subsys()
4923 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
4935 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
4943 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
4945 need_forkexit_callback |= ss->fork || ss->exit; in cgroup_init_subsys()
4966 struct cgroup_subsys *ss; in cgroup_init_early() local
4974 for_each_subsys(ss, i) { in cgroup_init_early()
4975 WARN(!ss->css_alloc || !ss->css_free || ss->name || ss->id, in cgroup_init_early()
4977 i, cgroup_subsys_name[i], ss->css_alloc, ss->css_free, in cgroup_init_early()
4978 ss->id, ss->name); in cgroup_init_early()
4982 ss->id = i; in cgroup_init_early()
4983 ss->name = cgroup_subsys_name[i]; in cgroup_init_early()
4985 if (ss->early_init) in cgroup_init_early()
4986 cgroup_init_subsys(ss, true); in cgroup_init_early()
4999 struct cgroup_subsys *ss; in cgroup_init() local
5016 for_each_subsys(ss, ssid) { in cgroup_init()
5017 if (ss->early_init) { in cgroup_init()
5019 init_css_set.subsys[ss->id]; in cgroup_init()
5021 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
5025 cgroup_init_subsys(ss, false); in cgroup_init()
5036 if (ss->disabled) in cgroup_init()
5039 cgrp_dfl_root.subsys_mask |= 1 << ss->id; in cgroup_init()
5041 if (cgroup_legacy_files_on_dfl && !ss->dfl_cftypes) in cgroup_init()
5042 ss->dfl_cftypes = ss->legacy_cftypes; in cgroup_init()
5044 if (!ss->dfl_cftypes) in cgroup_init()
5045 cgrp_dfl_root_inhibit_ss_mask |= 1 << ss->id; in cgroup_init()
5047 if (ss->dfl_cftypes == ss->legacy_cftypes) { in cgroup_init()
5048 WARN_ON(cgroup_add_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
5050 WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
5051 WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes)); in cgroup_init()
5054 if (ss->bind) in cgroup_init()
5055 ss->bind(init_css_set.subsys[ssid]); in cgroup_init()
5118 struct cgroup_subsys *ss; in proc_cgroup_show() local
5126 for_each_subsys(ss, ssid) in proc_cgroup_show()
5128 seq_printf(m, "%s%s", count++ ? "," : "", ss->name); in proc_cgroup_show()
5155 struct cgroup_subsys *ss; in proc_cgroupstats_show() local
5166 for_each_subsys(ss, i) in proc_cgroupstats_show()
5168 ss->name, ss->root->hierarchy_id, in proc_cgroupstats_show()
5169 atomic_read(&ss->root->nr_cgrps), !ss->disabled); in proc_cgroupstats_show()
5213 struct cgroup_subsys *ss; in cgroup_post_fork() local
5256 for_each_subsys(ss, i) in cgroup_post_fork()
5257 if (ss->fork) in cgroup_post_fork()
5258 ss->fork(child); in cgroup_post_fork()
5283 struct cgroup_subsys *ss; in cgroup_exit() local
5305 for_each_subsys(ss, i) { in cgroup_exit()
5306 if (ss->exit) { in cgroup_exit()
5310 ss->exit(css, old_css, tsk); in cgroup_exit()
5388 struct cgroup_subsys *ss; in cgroup_disable() local
5396 for_each_subsys(ss, i) { in cgroup_disable()
5397 if (!strcmp(token, ss->name)) { in cgroup_disable()
5398 ss->disabled = 1; in cgroup_disable()
5400 " subsystem\n", ss->name); in cgroup_disable()
5427 struct cgroup_subsys *ss) in css_tryget_online_from_dir() argument
5447 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
5464 struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss) in css_from_id() argument
5467 return id > 0 ? idr_find(&ss->css_idr, id) : NULL; in css_from_id()