Lines Matching full:ss

287 					      struct cgroup_subsys *ss);
519 * @ss: the subsystem of interest (%NULL returns @cgrp->self)
521 * Return @cgrp's css (cgroup_subsys_state) associated with @ss. This
528 struct cgroup_subsys *ss) in cgroup_css() argument
530 if (CGROUP_HAS_SUBSYS_CONFIG && ss) in cgroup_css()
531 return rcu_dereference_check(cgrp->subsys[ss->id], in cgroup_css()
538 * cgroup_e_css_by_mask - obtain a cgroup's effective css for the specified ss
540 * @ss: the subsystem of interest (%NULL returns @cgrp->self)
543 * as the matching css of the nearest ancestor including self which has @ss
544 * enabled. If @ss is associated with the hierarchy @cgrp is on, this
548 struct cgroup_subsys *ss) in cgroup_e_css_by_mask() argument
552 if (!ss) in cgroup_e_css_by_mask()
559 while (!(cgroup_ss_mask(cgrp) & (1 << ss->id))) { in cgroup_e_css_by_mask()
565 return cgroup_css(cgrp, ss); in cgroup_e_css_by_mask()
571 * @ss: the subsystem of interest
573 * Find and get the effective css of @cgrp for @ss. The effective css is
575 * has @ss enabled. If @ss is not mounted on the hierarchy @cgrp is on,
582 struct cgroup_subsys *ss) in cgroup_e_css() argument
590 css = cgroup_css(cgrp, ss); in cgroup_e_css()
597 return init_css_set.subsys[ss->id]; in cgroup_e_css()
603 * @ss: the subsystem of interest
605 * Find and get the effective css of @cgrp for @ss. The effective css is
607 * has @ss enabled. If @ss is not mounted on the hierarchy @cgrp is on,
612 struct cgroup_subsys *ss) in cgroup_get_e_css() argument
622 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
629 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
702 if (CGROUP_HAS_SUBSYS_CONFIG && cft->ss) in of_css()
703 return rcu_dereference_raw(cgrp->subsys[cft->ss->id]); in of_css()
726 * @ss: the iteration cursor
727 * @ssid: the index of @ss, CGROUP_SUBSYS_COUNT after reaching the end
733 #define do_each_subsys_mask(ss, ssid, ss_mask) do { \ argument
740 (ss) = cgroup_subsys[ssid]; \
968 struct cgroup_subsys *ss; in css_set_hash() local
971 for_each_subsys(ss, i) in css_set_hash()
981 struct cgroup_subsys *ss; in put_css_set_locked() local
992 for_each_subsys(ss, ssid) { in put_css_set_locked()
1109 struct cgroup_subsys *ss; in find_existing_css_set() local
1119 for_each_subsys(ss, i) { in find_existing_css_set()
1122 * @ss is in this hierarchy, so we want the in find_existing_css_set()
1125 template[i] = cgroup_e_css_by_mask(cgrp, ss); in find_existing_css_set()
1128 * @ss is not in this hierarchy, so we don't want in find_existing_css_set()
1230 struct cgroup_subsys *ss; in find_css_set() local
1292 for_each_subsys(ss, ssid) { in find_css_set()
1589 struct cgroup_subsys *ss = cft->ss; in cgroup_file_name() local
1591 if (cft->ss && !(cft->flags & CFTYPE_NO_PREFIX) && in cgroup_file_name()
1596 dbg, cgroup_on_dfl(cgrp) ? ss->name : ss->legacy_name, in cgroup_file_name()
1642 struct cgroup_subsys *ss; in cgroup_calc_subtree_ss_mask() local
1652 do_each_subsys_mask(ss, ssid, cur_ss_mask) { in cgroup_calc_subtree_ss_mask()
1653 new_ss_mask |= ss->depends_on; in cgroup_calc_subtree_ss_mask()
1751 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file()
1790 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1833 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1846 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1857 struct cgroup_subsys *ss; in rebind_subsystems() local
1863 do_each_subsys_mask(ss, ssid, ss_mask) { in rebind_subsystems()
1865 * If @ss has non-root csses attached to it, can't move. in rebind_subsystems()
1866 * If @ss is an implicit controller, it is exempt from this in rebind_subsystems()
1869 if (css_next_child(NULL, cgroup_css(&ss->root->cgrp, ss)) && in rebind_subsystems()
1870 !ss->implicit_on_dfl) in rebind_subsystems()
1874 if (ss->root != &cgrp_dfl_root && dst_root != &cgrp_dfl_root) in rebind_subsystems()
1881 if (ss->root == &cgrp_dfl_root) in rebind_subsystems()
1898 do_each_subsys_mask(ss, ssid, ss_mask) { in rebind_subsystems()
1899 struct cgroup_root *src_root = ss->root; in rebind_subsystems()
1901 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems()
1905 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1917 ss->root = dst_root; in rebind_subsystems()
1921 WARN_ON(!list_empty(&dcgrp->e_csets[ss->id])); in rebind_subsystems()
1922 list_for_each_entry_safe(cset, cset_pos, &scgrp->e_csets[ss->id], in rebind_subsystems()
1923 e_cset_node[ss->id]) { in rebind_subsystems()
1924 list_move_tail(&cset->e_cset_node[ss->id], in rebind_subsystems()
1925 &dcgrp->e_csets[ss->id]); in rebind_subsystems()
1934 if (it->cset_head == &scgrp->e_csets[ss->id]) in rebind_subsystems()
1935 it->cset_head = &dcgrp->e_csets[ss->id]; in rebind_subsystems()
1951 ss->name, ret); in rebind_subsystems()
1953 if (ss->bind) in rebind_subsystems()
1954 ss->bind(css); in rebind_subsystems()
2108 struct cgroup_subsys *ss; in init_cgroup_housekeeping() local
2123 for_each_subsys(ss, ssid) in init_cgroup_housekeeping()
2697 struct cgroup_subsys *ss; in cgroup_migrate_execute() local
2704 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2705 if (ss->can_attach) { in cgroup_migrate_execute()
2707 ret = ss->can_attach(tset); in cgroup_migrate_execute()
2751 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2752 if (ss->attach) { in cgroup_migrate_execute()
2754 ss->attach(tset); in cgroup_migrate_execute()
2764 do_each_subsys_mask(ss, ssid, mgctx->ss_mask) { in cgroup_migrate_execute()
2767 if (ss->cancel_attach) { in cgroup_migrate_execute()
2769 ss->cancel_attach(tset); in cgroup_migrate_execute()
2934 struct cgroup_subsys *ss; in cgroup_migrate_prepare_dst() local
2965 for_each_subsys(ss, ssid) in cgroup_migrate_prepare_dst()
3139 struct cgroup_subsys *ss; in cgroup_print_ss_mask() local
3143 do_each_subsys_mask(ss, ssid, ss_mask) { in cgroup_print_ss_mask()
3146 seq_puts(seq, ss->name); in cgroup_print_ss_mask()
3262 struct cgroup_subsys *ss; in cgroup_lock_and_drain_offline() local
3269 for_each_subsys(ss, ssid) { in cgroup_lock_and_drain_offline()
3270 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_lock_and_drain_offline()
3353 struct cgroup_subsys *ss = css->ss; in css_visible() local
3356 if (cgroup_control(cgrp) & (1 << ss->id)) in css_visible()
3358 if (!(cgroup_ss_mask(cgrp) & (1 << ss->id))) in css_visible()
3360 return cgroup_on_dfl(cgrp) && ss->implicit_on_dfl; in css_visible()
3380 struct cgroup_subsys *ss; in cgroup_apply_control_enable() local
3384 for_each_subsys(ss, ssid) { in cgroup_apply_control_enable()
3385 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_enable()
3387 if (!(cgroup_ss_mask(dsct) & (1 << ss->id))) in cgroup_apply_control_enable()
3391 css = css_create(dsct, ss); in cgroup_apply_control_enable()
3426 struct cgroup_subsys *ss; in cgroup_apply_control_disable() local
3430 for_each_subsys(ss, ssid) { in cgroup_apply_control_disable()
3431 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_disable()
3439 !(cgroup_ss_mask(dsct) & (1 << ss->id))) { in cgroup_apply_control_disable()
3443 if (ss->css_reset) in cgroup_apply_control_disable()
3444 ss->css_reset(css); in cgroup_apply_control_disable()
3549 struct cgroup_subsys *ss; in cgroup_subtree_control_write() local
3561 do_each_subsys_mask(ss, ssid, ~cgrp_dfl_inhibit_ss_mask) { in cgroup_subtree_control_write()
3563 strcmp(tok + 1, ss->name)) in cgroup_subtree_control_write()
3585 for_each_subsys(ss, ssid) { in cgroup_subtree_control_write()
3893 * @ss: the subsystem of interest
3895 * Find and get @cgrp's css associated with @ss. If the css doesn't exist
3899 struct cgroup_subsys *ss) in cgroup_tryget_css() argument
3904 css = cgroup_css(cgrp, ss); in cgroup_tryget_css()
3915 struct cgroup_subsys *ss = cgroup_subsys[ssid]; in cgroup_extra_stat_show() local
3919 if (!ss->css_extra_stat_show) in cgroup_extra_stat_show()
3922 css = cgroup_tryget_css(cgrp, ss); in cgroup_extra_stat_show()
3926 ret = ss->css_extra_stat_show(seq, css); in cgroup_extra_stat_show()
3934 struct cgroup_subsys *ss = cgroup_subsys[ssid]; in cgroup_local_stat_show() local
3938 if (!ss->css_local_stat_show) in cgroup_local_stat_show()
3941 css = cgroup_tryget_css(cgrp, ss); in cgroup_local_stat_show()
3945 ret = ss->css_local_stat_show(seq, css); in cgroup_local_stat_show()
4321 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
4492 struct cgroup_subsys *ss = cfts[0].ss; in cgroup_apply_cftypes() local
4493 struct cgroup *root = &ss->root->cgrp; in cgroup_apply_cftypes()
4500 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
4525 cft->ss = NULL; in cgroup_exit_cftypes()
4533 static int cgroup_init_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_init_cftypes() argument
4541 WARN_ON(cft->ss || cft->kf_ops); in cgroup_init_cftypes()
4567 cft->ss = ss; in cgroup_init_cftypes()
4612 * @ss: target cgroup subsystem
4615 * Register @cfts to @ss. Files described by @cfts are created for all
4616 * existing cgroups to which @ss is attached and all future cgroups will
4617 * have them too. This function can be called anytime whether @ss is
4624 int cgroup_add_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_cftypes() argument
4628 if (!cgroup_ssid_enabled(ss->id)) in cgroup_add_cftypes()
4634 ret = cgroup_init_cftypes(ss, cfts); in cgroup_add_cftypes()
4640 list_add_tail(&cfts->node, &ss->cfts); in cgroup_add_cftypes()
4651 * @ss: target cgroup subsystem
4657 int cgroup_add_dfl_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_dfl_cftypes() argument
4663 return cgroup_add_cftypes(ss, cfts); in cgroup_add_dfl_cftypes()
4668 * @ss: target cgroup subsystem
4674 int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts) in cgroup_add_legacy_cftypes() argument
4680 return cgroup_add_cftypes(ss, cfts); in cgroup_add_legacy_cftypes()
4988 if (it->ss) { in css_task_iter_next_css_set()
4989 cset = container_of(l, struct css_set, e_cset_node[it->ss->id]); in css_task_iter_next_css_set()
5150 it->ss = css->ss; in css_task_iter_start()
5153 if (CGROUP_HAS_SUBSYS_CONFIG && it->ss) in css_task_iter_start()
5154 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
5579 struct cgroup_subsys *ss = css->ss; in css_free_rwork_fn() local
5590 ss->css_free(css); in css_free_rwork_fn()
5591 cgroup_idr_remove(&ss->css_idr, id); in css_free_rwork_fn()
5630 struct cgroup_subsys *ss = css->ss; in css_release_work_fn() local
5643 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
5644 if (ss->css_released) in css_release_work_fn()
5645 ss->css_released(css); in css_release_work_fn()
5647 cgrp->nr_dying_subsys[ss->id]--; in css_release_work_fn()
5651 * cgrp->nr_dying_subsys[ss->id] may not be 0 if a subsystem in css_release_work_fn()
5658 parent_cgrp->nr_dying_subsys[ss->id]--; in css_release_work_fn()
5703 struct cgroup_subsys *ss, struct cgroup *cgrp) in init_and_link_css() argument
5711 css->ss = ss; in init_and_link_css()
5719 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
5723 BUG_ON(cgroup_css(cgrp, ss)); in init_and_link_css()
5729 struct cgroup_subsys *ss = css->ss; in online_css() local
5734 if (ss->css_online) in online_css()
5735 ret = ss->css_online(css); in online_css()
5738 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
5753 struct cgroup_subsys *ss = css->ss; in offline_css() local
5760 if (ss->css_offline) in offline_css()
5761 ss->css_offline(css); in offline_css()
5764 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
5768 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5775 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5782 * @ss: the subsys of new css
5784 * Create a new css associated with @cgrp - @ss pair. On success, the new
5789 struct cgroup_subsys *ss) in css_create() argument
5792 struct cgroup_subsys_state *parent_css = cgroup_css(parent, ss); in css_create()
5798 css = ss->css_alloc(parent_css); in css_create()
5804 init_and_link_css(css, ss, cgrp); in css_create()
5810 err = cgroup_idr_alloc(&ss->css_idr, NULL, 2, 0, GFP_KERNEL); in css_create()
5821 cgroup_idr_replace(&ss->css_idr, css, css->id); in css_create()
6096 if (css->ss->css_killed) in kill_css()
6097 css->ss->css_killed(css); in kill_css()
6248 static void __init cgroup_init_subsys(struct cgroup_subsys *ss, bool early) in cgroup_init_subsys() argument
6252 pr_debug("Initializing cgroup subsys %s\n", ss->name); in cgroup_init_subsys()
6256 idr_init(&ss->css_idr); in cgroup_init_subsys()
6257 INIT_LIST_HEAD(&ss->cfts); in cgroup_init_subsys()
6260 ss->root = &cgrp_dfl_root; in cgroup_init_subsys()
6261 css = ss->css_alloc(NULL); in cgroup_init_subsys()
6264 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
6276 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
6279 BUG_ON(ss_rstat_init(ss)); in cgroup_init_subsys()
6287 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
6289 have_fork_callback |= (bool)ss->fork << ss->id; in cgroup_init_subsys()
6290 have_exit_callback |= (bool)ss->exit << ss->id; in cgroup_init_subsys()
6291 have_release_callback |= (bool)ss->release << ss->id; in cgroup_init_subsys()
6292 have_canfork_callback |= (bool)ss->can_fork << ss->id; in cgroup_init_subsys()
6313 struct cgroup_subsys *ss; in cgroup_init_early() local
6322 for_each_subsys(ss, i) { in cgroup_init_early()
6323 WARN(!ss->css_alloc || !ss->css_free || ss->name || ss->id, in cgroup_init_early()
6325 i, cgroup_subsys_name[i], ss->css_alloc, ss->css_free, in cgroup_init_early()
6326 ss->id, ss->name); in cgroup_init_early()
6329 WARN(ss->early_init && ss->css_rstat_flush, in cgroup_init_early()
6332 ss->id = i; in cgroup_init_early()
6333 ss->name = cgroup_subsys_name[i]; in cgroup_init_early()
6334 if (!ss->legacy_name) in cgroup_init_early()
6335 ss->legacy_name = cgroup_subsys_name[i]; in cgroup_init_early()
6337 if (ss->early_init) in cgroup_init_early()
6338 cgroup_init_subsys(ss, true); in cgroup_init_early()
6351 struct cgroup_subsys *ss; in cgroup_init() local
6378 for_each_subsys(ss, ssid) { in cgroup_init()
6379 if (ss->early_init) { in cgroup_init()
6381 init_css_set.subsys[ss->id]; in cgroup_init()
6383 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
6387 cgroup_init_subsys(ss, false); in cgroup_init()
6403 ss->legacy_name); in cgroup_init()
6405 cgrp_dfl_root.subsys_mask |= 1 << ss->id; in cgroup_init()
6408 WARN_ON(ss->implicit_on_dfl && !ss->threaded); in cgroup_init()
6410 if (ss->implicit_on_dfl) in cgroup_init()
6411 cgrp_dfl_implicit_ss_mask |= 1 << ss->id; in cgroup_init()
6412 else if (!ss->dfl_cftypes) in cgroup_init()
6413 cgrp_dfl_inhibit_ss_mask |= 1 << ss->id; in cgroup_init()
6415 if (ss->threaded) in cgroup_init()
6416 cgrp_dfl_threaded_ss_mask |= 1 << ss->id; in cgroup_init()
6418 if (ss->dfl_cftypes == ss->legacy_cftypes) { in cgroup_init()
6419 WARN_ON(cgroup_add_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
6421 WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes)); in cgroup_init()
6422 WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes)); in cgroup_init()
6425 if (ss->bind) in cgroup_init()
6426 ss->bind(init_css_set.subsys[ssid]); in cgroup_init()
6562 struct cgroup_subsys *ss; in proc_cgroup_show() local
6576 for_each_subsys(ss, ssid) in proc_cgroup_show()
6579 ss->legacy_name); in proc_cgroup_show()
6827 struct cgroup_subsys *ss; in cgroup_can_fork() local
6834 do_each_subsys_mask(ss, i, have_canfork_callback) { in cgroup_can_fork()
6835 ret = ss->can_fork(child, kargs->cset); in cgroup_can_fork()
6843 for_each_subsys(ss, j) { in cgroup_can_fork()
6846 if (ss->cancel_fork) in cgroup_can_fork()
6847 ss->cancel_fork(child, kargs->cset); in cgroup_can_fork()
6867 struct cgroup_subsys *ss; in cgroup_cancel_fork() local
6870 for_each_subsys(ss, i) in cgroup_cancel_fork()
6871 if (ss->cancel_fork) in cgroup_cancel_fork()
6872 ss->cancel_fork(child, kargs->cset); in cgroup_cancel_fork()
6892 struct cgroup_subsys *ss; in cgroup_post_fork() local
6950 * Call ss->fork(). This must happen after @child is linked on in cgroup_post_fork()
6954 do_each_subsys_mask(ss, i, have_fork_callback) { in cgroup_post_fork()
6955 ss->fork(child); in cgroup_post_fork()
6983 struct cgroup_subsys *ss; in cgroup_exit() local
7008 do_each_subsys_mask(ss, i, have_exit_callback) { in cgroup_exit()
7009 ss->exit(tsk); in cgroup_exit()
7015 struct cgroup_subsys *ss; in cgroup_release() local
7018 do_each_subsys_mask(ss, ssid, have_release_callback) { in cgroup_release()
7019 ss->release(task); in cgroup_release()
7038 struct cgroup_subsys *ss; in cgroup_disable() local
7046 for_each_subsys(ss, i) { in cgroup_disable()
7047 if (strcmp(token, ss->name) && in cgroup_disable()
7048 strcmp(token, ss->legacy_name)) in cgroup_disable()
7053 ss->name); in cgroup_disable()
7088 * @ss: subsystem of interest
7090 * If @dentry is a directory for a cgroup which has @ss enabled on it, try
7095 struct cgroup_subsys *ss) in css_tryget_online_from_dir() argument
7116 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
7128 * @ss: cgroup subsys to be looked into
7133 struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss) in css_from_id() argument
7136 return idr_find(&ss->css_idr, id); in css_from_id()
7342 struct cgroup_subsys *ss; in delegate_show() local
7352 for_each_subsys(ss, ssid) in delegate_show()
7353 ret += show_delegatable_files(ss->dfl_cftypes, buf + ret, in delegate_show()