Lines Matching refs:ss
221 static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss,
352 struct cgroup_subsys *ss) in cgroup_css() argument
354 if (ss) in cgroup_css()
355 return rcu_dereference_check(cgrp->subsys[ss->id], in cgroup_css()
372 struct cgroup_subsys *ss) in cgroup_e_css() argument
376 if (!ss) in cgroup_e_css()
379 if (!(cgrp->root->subsys_mask & (1 << ss->id))) in cgroup_e_css()
387 !(cgroup_parent(cgrp)->child_subsys_mask & (1 << ss->id))) in cgroup_e_css()
390 return cgroup_css(cgrp, ss); in cgroup_e_css()
405 struct cgroup_subsys *ss) in cgroup_get_e_css() argument
412 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
419 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
461 if (cft->ss) in of_css()
462 return rcu_dereference_raw(cgrp->subsys[cft->ss->id]); in of_css()
526 #define for_each_subsys(ss, ssid) \ argument
528 (((ss) = cgroup_subsys[ssid]) || true); (ssid)++)
539 #define for_each_subsys_which(ss, ssid, ss_maskp) \ argument
544 if (((ss) = cgroup_subsys[ssid]) && false) \
742 struct cgroup_subsys *ss; in css_set_hash() local
745 for_each_subsys(ss, i) in css_set_hash()
755 struct cgroup_subsys *ss; in put_css_set_locked() local
764 for_each_subsys(ss, ssid) { in put_css_set_locked()
888 struct cgroup_subsys *ss; in find_existing_css_set() local
898 for_each_subsys(ss, i) { in find_existing_css_set()
904 template[i] = cgroup_e_css(cgrp, ss); in find_existing_css_set()
1009 struct cgroup_subsys *ss; in find_css_set() local
1067 for_each_subsys(ss, ssid) { in find_css_set()
1237 struct cgroup_subsys *ss = cft->ss; in cgroup_file_name() local
1239 if (cft->ss && !(cft->flags & CFTYPE_NO_PREFIX) && in cgroup_file_name()
1242 cgroup_on_dfl(cgrp) ? ss->name : ss->legacy_name, in cgroup_file_name()
1290 struct cgroup_subsys *ss; in cgroup_calc_child_subsys_mask() local
1301 for_each_subsys_which(ss, ssid, &cur_ss_mask) in cgroup_calc_child_subsys_mask()
1302 new_ss_mask |= ss->depends_on; in cgroup_calc_child_subsys_mask()
1410 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file()
1432 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1450 if (!css->ss) { in css_populate_dir()
1459 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1468 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1480 struct cgroup_subsys *ss; in rebind_subsystems() local
1486 for_each_subsys_which(ss, ssid, &ss_mask) { in rebind_subsystems()
1488 if (css_next_child(NULL, cgroup_css(&ss->root->cgrp, ss))) in rebind_subsystems()
1492 if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root) in rebind_subsystems()
1501 for_each_subsys_which(ss, ssid, &tmp_ss_mask) { in rebind_subsystems()
1502 struct cgroup *scgrp = &ss->root->cgrp; in rebind_subsystems()
1505 ret = css_populate_dir(cgroup_css(scgrp, ss), dcgrp); in rebind_subsystems()
1524 for_each_subsys_which(ss, tssid, &tmp_ss_mask) { in rebind_subsystems()
1527 css_clear_dir(cgroup_css(scgrp, ss), dcgrp); in rebind_subsystems()
1536 for_each_subsys_which(ss, ssid, &ss_mask) { in rebind_subsystems()
1537 struct cgroup_root *src_root = ss->root; in rebind_subsystems()
1539 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems()
1542 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1548 ss->root = dst_root; in rebind_subsystems()
1553 list_move_tail(&cset->e_cset_node[ss->id], in rebind_subsystems()
1554 &dcgrp->e_csets[ss->id]); in rebind_subsystems()
1571 if (ss->bind) in rebind_subsystems()
1572 ss->bind(css); in rebind_subsystems()
1583 struct cgroup_subsys *ss; in cgroup_show_options() local
1587 for_each_subsys(ss, ssid) in cgroup_show_options()
1589 seq_show_option(seq, ss->legacy_name, NULL); in cgroup_show_options()
1623 struct cgroup_subsys *ss; in parse_cgroupfs_options() local
1702 for_each_subsys(ss, i) { in parse_cgroupfs_options()
1703 if (strcmp(token, ss->legacy_name)) in parse_cgroupfs_options()
1735 for_each_subsys(ss, i) in parse_cgroupfs_options()
1876 struct cgroup_subsys *ss; in init_cgroup_housekeeping() local
1887 for_each_subsys(ss, ssid) in init_cgroup_housekeeping()
2008 struct cgroup_subsys *ss; in cgroup_mount() local
2046 for_each_subsys(ss, i) { in cgroup_mount()
2048 ss->root == &cgrp_dfl_root) in cgroup_mount()
2051 if (!percpu_ref_tryget_live(&ss->root->cgrp.self.refcnt)) { in cgroup_mount()
2057 cgroup_put(&ss->root->cgrp); in cgroup_mount()
2388 if (css->ss->can_attach) { in cgroup_taskset_migrate()
2390 ret = css->ss->can_attach(tset); in cgroup_taskset_migrate()
2424 if (css->ss->attach) { in cgroup_taskset_migrate()
2426 css->ss->attach(tset); in cgroup_taskset_migrate()
2437 if (css->ss->cancel_attach) { in cgroup_taskset_migrate()
2439 css->ss->cancel_attach(tset); in cgroup_taskset_migrate()
2724 struct cgroup_subsys *ss; in __cgroup_procs_write() local
2775 for_each_subsys(ss, ssid) in __cgroup_procs_write()
2776 if (ss->post_attach) in __cgroup_procs_write()
2777 ss->post_attach(); in __cgroup_procs_write()
2862 struct cgroup_subsys *ss; in cgroup_print_ss_mask() local
2866 for_each_subsys_which(ss, ssid, &ss_mask) { in cgroup_print_ss_mask()
2869 seq_printf(seq, "%s", ss->name); in cgroup_print_ss_mask()
2974 struct cgroup_subsys *ss; in cgroup_subtree_control_write() local
2988 for_each_subsys_which(ss, ssid, &tmp_ss_mask) { in cgroup_subtree_control_write()
2990 strcmp(tok + 1, ss->name)) in cgroup_subtree_control_write()
3012 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3077 for_each_subsys_which(ss, ssid, &css_enable) { in cgroup_subtree_control_write()
3081 if (!cgroup_css(child, ss)) in cgroup_subtree_control_write()
3105 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3111 ret = create_css(child, ss, in cgroup_subtree_control_write()
3114 ret = css_populate_dir(cgroup_css(child, ss), in cgroup_subtree_control_write()
3138 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3143 struct cgroup_subsys_state *css = cgroup_css(child, ss); in cgroup_subtree_control_write()
3149 if (ss->css_reset) in cgroup_subtree_control_write()
3150 ss->css_reset(css); in cgroup_subtree_control_write()
3161 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3162 struct cgroup_subsys_state *this_css = cgroup_css(cgrp, ss); in cgroup_subtree_control_write()
3165 if (!ss->css_e_css_changed || !this_css) in cgroup_subtree_control_write()
3170 ss->css_e_css_changed(css); in cgroup_subtree_control_write()
3183 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3188 struct cgroup_subsys_state *css = cgroup_css(child, ss); in cgroup_subtree_control_write()
3227 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
3432 struct cgroup_subsys *ss = cfts[0].ss; in cgroup_apply_cftypes() local
3433 struct cgroup *root = &ss->root->cgrp; in cgroup_apply_cftypes()
3440 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
3465 cft->ss = NULL; in cgroup_exit_cftypes()
3472 static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_init_cftypes() argument
3479 WARN_ON(cft->ss || cft->kf_ops); in cgroup_init_cftypes()
3500 cft->ss = ss; in cgroup_init_cftypes()
3510 if (!cfts || !cfts[0].ss) in cgroup_rm_cftypes_locked()
3554 static int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_cftypes() argument
3558 if (!cgroup_ssid_enabled(ss->id)) in cgroup_add_cftypes()
3564 ret = cgroup_init_cftypes(ss, cfts); in cgroup_add_cftypes()
3570 list_add_tail(&cfts->node, &ss->cfts); in cgroup_add_cftypes()
3587 int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_dfl_cftypes() argument
3593 return cgroup_add_cftypes(ss, cfts); in cgroup_add_dfl_cftypes()
3604 int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_legacy_cftypes() argument
3610 return cgroup_add_cftypes(ss, cfts); in cgroup_add_legacy_cftypes()
3897 if (it->ss) { in css_task_iter_advance_css_set()
3899 e_cset_node[it->ss->id]); in css_task_iter_advance_css_set()
3983 it->ss = css->ss; in css_task_iter_start()
3985 if (it->ss) in css_task_iter_start()
3986 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
4688 struct cgroup_subsys *ss = css->ss; in css_free_work_fn() local
4693 if (ss) { in css_free_work_fn()
4698 ss->css_free(css); in css_free_work_fn()
4699 cgroup_idr_remove(&ss->css_idr, id); in css_free_work_fn()
4744 struct cgroup_subsys *ss = css->ss; in css_release_work_fn() local
4752 if (ss) { in css_release_work_fn()
4754 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
4755 if (ss->css_released) in css_release_work_fn()
4756 ss->css_released(css); in css_release_work_fn()
4787 struct cgroup_subsys *ss, struct cgroup *cgrp) in init_and_link_css() argument
4795 css->ss = ss; in init_and_link_css()
4802 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
4806 BUG_ON(cgroup_css(cgrp, ss)); in init_and_link_css()
4812 struct cgroup_subsys *ss = css->ss; in online_css() local
4817 if (ss->css_online) in online_css()
4818 ret = ss->css_online(css); in online_css()
4821 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
4833 struct cgroup_subsys *ss = css->ss; in offline_css() local
4840 if (ss->css_offline) in offline_css()
4841 ss->css_offline(css); in offline_css()
4844 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
4859 static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss, in create_css() argument
4863 struct cgroup_subsys_state *parent_css = cgroup_css(parent, ss); in create_css()
4869 css = ss->css_alloc(parent_css); in create_css()
4873 init_and_link_css(css, ss, cgrp); in create_css()
4879 err = cgroup_idr_alloc(&ss->css_idr, NULL, 2, 0, GFP_KERNEL); in create_css()
4892 cgroup_idr_replace(&ss->css_idr, css, css->id); in create_css()
4898 if (ss->broken_hierarchy && !ss->warned_broken_hierarchy && in create_css()
4901 current->comm, current->pid, ss->name); in create_css()
4902 if (!strcmp(ss->name, "memory")) in create_css()
4904 ss->warned_broken_hierarchy = true; in create_css()
4913 cgroup_idr_remove(&ss->css_idr, css->id); in create_css()
4926 struct cgroup_subsys *ss; in cgroup_mkdir() local
5008 for_each_subsys(ss, ssid) { in cgroup_mkdir()
5010 ret = create_css(cgrp, ss, in cgroup_mkdir()
5220 static void __init cgroup_init_subsys(struct cgroup_subsys *ss, bool early) in cgroup_init_subsys() argument
5224 printk(KERN_INFO "Initializing cgroup subsys %s\n", ss->name); in cgroup_init_subsys()
5228 idr_init(&ss->css_idr); in cgroup_init_subsys()
5229 INIT_LIST_HEAD(&ss->cfts); in cgroup_init_subsys()
5232 ss->root = &cgrp_dfl_root; in cgroup_init_subsys()
5233 css = ss->css_alloc(cgroup_css(&cgrp_dfl_root.cgrp, ss)); in cgroup_init_subsys()
5236 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
5248 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
5256 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
5258 have_fork_callback |= (bool)ss->fork << ss->id; in cgroup_init_subsys()
5259 have_exit_callback |= (bool)ss->exit << ss->id; in cgroup_init_subsys()
5260 have_free_callback |= (bool)ss->free << ss->id; in cgroup_init_subsys()
5261 have_canfork_callback |= (bool)ss->can_fork << ss->id; in cgroup_init_subsys()
5282 struct cgroup_subsys *ss; in cgroup_init_early() local
5290 for_each_subsys(ss, i) { in cgroup_init_early()
5291 WARN(!ss->css_alloc || !ss->css_free || ss->name || ss->id, in cgroup_init_early()
5293 i, cgroup_subsys_name[i], ss->css_alloc, ss->css_free, in cgroup_init_early()
5294 ss->id, ss->name); in cgroup_init_early()
5298 ss->id = i; in cgroup_init_early()
5299 ss->name = cgroup_subsys_name[i]; in cgroup_init_early()
5300 if (!ss->legacy_name) in cgroup_init_early()
5301 ss->legacy_name = cgroup_subsys_name[i]; in cgroup_init_early()
5303 if (ss->early_init) in cgroup_init_early()
5304 cgroup_init_subsys(ss, true); in cgroup_init_early()
5319 struct cgroup_subsys *ss; in cgroup_init() local
5337 for_each_subsys(ss, ssid) { in cgroup_init()
5338 if (ss->early_init) { in cgroup_init()
5340 init_css_set.subsys[ss->id]; in cgroup_init()
5342 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
5346 cgroup_init_subsys(ss, false); in cgroup_init()
5360 ss->name); in cgroup_init()
5364 cgrp_dfl_root.subsys_mask |= 1 << ss->id; in cgroup_init()
5366 if (!ss->dfl_cftypes) in cgroup_init()
5367 cgrp_dfl_root_inhibit_ss_mask |= 1 << ss->id; in cgroup_init()
5369 if (ss->dfl_cftypes == ss->legacy_cftypes) { in cgroup_init()
5370 WARN_ON(cgroup_add_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
5372 WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
5373 WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes)); in cgroup_init()
5376 if (ss->bind) in cgroup_init()
5377 ss->bind(init_css_set.subsys[ssid]); in cgroup_init()
5433 struct cgroup_subsys *ss; in proc_cgroup_show() local
5442 for_each_subsys(ss, ssid) in proc_cgroup_show()
5445 ss->legacy_name); in proc_cgroup_show()
5492 struct cgroup_subsys *ss; in proc_cgroupstats_show() local
5503 for_each_subsys(ss, i) in proc_cgroupstats_show()
5505 ss->legacy_name, ss->root->hierarchy_id, in proc_cgroupstats_show()
5506 atomic_read(&ss->root->nr_cgrps), in proc_cgroupstats_show()
5563 struct cgroup_subsys *ss; in cgroup_can_fork() local
5566 for_each_subsys_which(ss, i, &have_canfork_callback) { in cgroup_can_fork()
5567 ret = ss->can_fork(child, subsys_canfork_priv_p(ss_priv, i)); in cgroup_can_fork()
5575 for_each_subsys(ss, j) { in cgroup_can_fork()
5578 if (ss->cancel_fork) in cgroup_can_fork()
5579 ss->cancel_fork(child, subsys_canfork_priv(ss_priv, j)); in cgroup_can_fork()
5595 struct cgroup_subsys *ss; in cgroup_cancel_fork() local
5598 for_each_subsys(ss, i) in cgroup_cancel_fork()
5599 if (ss->cancel_fork) in cgroup_cancel_fork()
5600 ss->cancel_fork(child, subsys_canfork_priv(ss_priv, i)); in cgroup_cancel_fork()
5616 struct cgroup_subsys *ss; in cgroup_post_fork() local
5657 for_each_subsys_which(ss, i, &have_fork_callback) in cgroup_post_fork()
5658 ss->fork(child, subsys_canfork_priv(old_ss_priv, i)); in cgroup_post_fork()
5682 struct cgroup_subsys *ss; in cgroup_exit() local
5701 for_each_subsys_which(ss, i, &have_exit_callback) in cgroup_exit()
5702 ss->exit(tsk); in cgroup_exit()
5708 struct cgroup_subsys *ss; in cgroup_free() local
5711 for_each_subsys_which(ss, ssid, &have_free_callback) in cgroup_free()
5712 ss->free(task); in cgroup_free()
5786 struct cgroup_subsys *ss; in cgroup_disable() local
5794 for_each_subsys(ss, i) { in cgroup_disable()
5795 if (strcmp(token, ss->name) && in cgroup_disable()
5796 strcmp(token, ss->legacy_name)) in cgroup_disable()
5815 struct cgroup_subsys *ss) in css_tryget_online_from_dir() argument
5835 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
5852 struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss) in css_from_id() argument
5855 return id > 0 ? idr_find(&ss->css_idr, id) : NULL; in css_from_id()