Lines Matching refs:css
249 static void kill_css(struct cgroup_subsys_state *css);
250 static int cgroup_addrm_files(struct cgroup_subsys_state *css,
544 struct cgroup_subsys_state *css; in cgroup_e_css() local
550 css = cgroup_css(cgrp, ss); in cgroup_e_css()
552 if (css) in cgroup_e_css()
553 return css; in cgroup_e_css()
574 struct cgroup_subsys_state *css; in cgroup_get_e_css() local
582 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
584 if (css && css_tryget_online(css)) in cgroup_get_e_css()
589 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
590 css_get(css); in cgroup_get_e_css()
593 return css; in cgroup_get_e_css()
677 #define for_each_css(css, ssid, cgrp) \ argument
679 if (!((css) = rcu_dereference_check( \
925 static unsigned long css_set_hash(struct cgroup_subsys_state **css) in css_set_hash() argument
932 key += (unsigned long)css[i]; in css_set_hash()
1253 struct cgroup_subsys_state *css = cset->subsys[ssid]; in find_css_set() local
1256 &css->cgroup->e_csets[ssid]); in find_css_set()
1257 css_get(css); in find_css_set()
1691 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file() local
1692 struct cgroup_file *cfile = (void *)css + cft->file_offset; in cgroup_rm_file()
1708 static void css_clear_dir(struct cgroup_subsys_state *css) in css_clear_dir() argument
1710 struct cgroup *cgrp = css->cgroup; in css_clear_dir()
1713 if (!(css->flags & CSS_VISIBLE)) in css_clear_dir()
1716 css->flags &= ~CSS_VISIBLE; in css_clear_dir()
1718 if (!css->ss) { in css_clear_dir()
1720 cgroup_addrm_files(css, cgrp, in css_clear_dir()
1723 cgroup_addrm_files(css, cgrp, in css_clear_dir()
1726 cgroup_addrm_files(css, cgrp, in css_clear_dir()
1730 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1731 cgroup_addrm_files(css, cgrp, cfts, false); in css_clear_dir()
1741 static int css_populate_dir(struct cgroup_subsys_state *css) in css_populate_dir() argument
1743 struct cgroup *cgrp = css->cgroup; in css_populate_dir()
1747 if (css->flags & CSS_VISIBLE) in css_populate_dir()
1750 if (!css->ss) { in css_populate_dir()
1752 ret = cgroup_addrm_files(css, cgrp, in css_populate_dir()
1758 ret = cgroup_addrm_files(css, cgrp, in css_populate_dir()
1761 cgroup_addrm_files(css, cgrp, in css_populate_dir()
1767 ret = cgroup_addrm_files(css, cgrp, in css_populate_dir()
1773 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1774 ret = cgroup_addrm_files(css, cgrp, cfts, true); in css_populate_dir()
1782 css->flags |= CSS_VISIBLE; in css_populate_dir()
1786 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1789 cgroup_addrm_files(css, cgrp, cfts, false); in css_populate_dir()
1841 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems() local
1845 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1856 rcu_assign_pointer(dcgrp->subsys[ssid], css); in rebind_subsystems()
1860 css->cgroup = dcgrp; in rebind_subsystems()
1880 list_del_rcu(&css->rstat_css_node); in rebind_subsystems()
1882 list_add_rcu(&css->rstat_css_node, in rebind_subsystems()
1901 ss->bind(css); in rebind_subsystems()
3161 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_lock_and_drain_offline() local
3164 if (!css || !percpu_ref_is_dying(&css->refcnt)) in cgroup_lock_and_drain_offline()
3242 static bool css_visible(struct cgroup_subsys_state *css) in css_visible() argument
3244 struct cgroup_subsys *ss = css->ss; in css_visible()
3245 struct cgroup *cgrp = css->cgroup; in css_visible()
3276 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_enable() local
3281 if (!css) { in cgroup_apply_control_enable()
3282 css = css_create(dsct, ss); in cgroup_apply_control_enable()
3283 if (IS_ERR(css)) in cgroup_apply_control_enable()
3284 return PTR_ERR(css); in cgroup_apply_control_enable()
3287 WARN_ON_ONCE(percpu_ref_is_dying(&css->refcnt)); in cgroup_apply_control_enable()
3289 if (css_visible(css)) { in cgroup_apply_control_enable()
3290 ret = css_populate_dir(css); in cgroup_apply_control_enable()
3322 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_disable() local
3324 if (!css) in cgroup_apply_control_disable()
3327 WARN_ON_ONCE(percpu_ref_is_dying(&css->refcnt)); in cgroup_apply_control_disable()
3329 if (css->parent && in cgroup_apply_control_disable()
3331 kill_css(css); in cgroup_apply_control_disable()
3332 } else if (!css_visible(css)) { in cgroup_apply_control_disable()
3333 css_clear_dir(css); in cgroup_apply_control_disable()
3335 ss->css_reset(css); in cgroup_apply_control_disable()
3722 struct cgroup_subsys_state *css; in cgroup_stat_show() local
3742 css = rcu_dereference_raw(cgroup->subsys[ssid]); in cgroup_stat_show()
3745 css ? (css->nr_descendants + 1) : 0); in cgroup_stat_show()
3771 struct cgroup_subsys_state *css; in cgroup_tryget_css() local
3774 css = cgroup_css(cgrp, ss); in cgroup_tryget_css()
3775 if (css && !css_tryget_online(css)) in cgroup_tryget_css()
3776 css = NULL; in cgroup_tryget_css()
3779 return css; in cgroup_tryget_css()
3786 struct cgroup_subsys_state *css; in cgroup_extra_stat_show() local
3792 css = cgroup_tryget_css(cgrp, ss); in cgroup_extra_stat_show()
3793 if (!css) in cgroup_extra_stat_show()
3796 ret = ss->css_extra_stat_show(seq, css); in cgroup_extra_stat_show()
3797 css_put(css); in cgroup_extra_stat_show()
3805 struct cgroup_subsys_state *css; in cgroup_local_stat_show() local
3811 css = cgroup_tryget_css(cgrp, ss); in cgroup_local_stat_show()
3812 if (!css) in cgroup_local_stat_show()
3815 ret = ss->css_local_stat_show(seq, css); in cgroup_local_stat_show()
3816 css_put(css); in cgroup_local_stat_show()
4079 struct cgroup_subsys_state *css; in cgroup_kill() local
4084 cgroup_for_each_live_descendant_pre(dsct, css, cgrp) in cgroup_kill()
4163 struct cgroup_subsys_state *css; in cgroup_file_write() local
4190 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
4197 ret = cft->write_u64(css, cft, v); in cgroup_file_write()
4202 ret = cft->write_s64(css, cft, v); in cgroup_file_write()
4239 struct cgroup_subsys_state *css = seq_css(m); in cgroup_seqfile_show() local
4245 seq_printf(m, "%llu\n", cft->read_u64(css, cft)); in cgroup_seqfile_show()
4247 seq_printf(m, "%lld\n", cft->read_s64(css, cft)); in cgroup_seqfile_show()
4280 static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, in cgroup_add_file() argument
4299 struct cgroup_file *cfile = (void *)css + cft->file_offset; in cgroup_add_file()
4321 static int cgroup_addrm_files(struct cgroup_subsys_state *css, in cgroup_addrm_files() argument
4344 ret = cgroup_add_file(css, cgrp, cft); in cgroup_addrm_files()
4363 struct cgroup_subsys_state *css; in cgroup_apply_cftypes() local
4369 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
4370 struct cgroup *cgrp = css->cgroup; in cgroup_apply_cftypes()
4372 if (!(css->flags & CSS_VISIBLE)) in cgroup_apply_cftypes()
4375 ret = cgroup_addrm_files(css, cgrp, cfts, is_add); in cgroup_apply_cftypes()
4812 bool css_has_online_children(struct cgroup_subsys_state *css) in css_has_online_children() argument
4818 css_for_each_child(child, css) { in css_has_online_children()
5010 void css_task_iter_start(struct cgroup_subsys_state *css, unsigned int flags, in css_task_iter_start() argument
5019 it->ss = css->ss; in css_task_iter_start()
5023 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
5025 it->cset_pos = &css->cgroup->cset_links; in css_task_iter_start()
5441 struct cgroup_subsys_state *css = container_of(to_rcu_work(work), in css_free_rwork_fn() local
5443 struct cgroup_subsys *ss = css->ss; in css_free_rwork_fn()
5444 struct cgroup *cgrp = css->cgroup; in css_free_rwork_fn()
5446 percpu_ref_exit(&css->refcnt); in css_free_rwork_fn()
5450 struct cgroup_subsys_state *parent = css->parent; in css_free_rwork_fn()
5451 int id = css->id; in css_free_rwork_fn()
5453 ss->css_free(css); in css_free_rwork_fn()
5492 struct cgroup_subsys_state *css = in css_release_work_fn() local
5494 struct cgroup_subsys *ss = css->ss; in css_release_work_fn()
5495 struct cgroup *cgrp = css->cgroup; in css_release_work_fn()
5499 css->flags |= CSS_RELEASED; in css_release_work_fn()
5500 list_del_rcu(&css->sibling); in css_release_work_fn()
5506 if (!list_empty(&css->rstat_css_node)) { in css_release_work_fn()
5508 list_del_rcu(&css->rstat_css_node); in css_release_work_fn()
5511 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
5513 ss->css_released(css); in css_release_work_fn()
5523 WARN_ON_ONCE(css->nr_descendants); in css_release_work_fn()
5557 INIT_RCU_WORK(&css->destroy_rwork, css_free_rwork_fn); in css_release_work_fn()
5558 queue_rcu_work(cgroup_destroy_wq, &css->destroy_rwork); in css_release_work_fn()
5563 struct cgroup_subsys_state *css = in css_release() local
5566 INIT_WORK(&css->destroy_work, css_release_work_fn); in css_release()
5567 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_release()
5570 static void init_and_link_css(struct cgroup_subsys_state *css, in init_and_link_css() argument
5577 memset(css, 0, sizeof(*css)); in init_and_link_css()
5578 css->cgroup = cgrp; in init_and_link_css()
5579 css->ss = ss; in init_and_link_css()
5580 css->id = -1; in init_and_link_css()
5581 INIT_LIST_HEAD(&css->sibling); in init_and_link_css()
5582 INIT_LIST_HEAD(&css->children); in init_and_link_css()
5583 INIT_LIST_HEAD(&css->rstat_css_node); in init_and_link_css()
5584 css->serial_nr = css_serial_nr_next++; in init_and_link_css()
5585 atomic_set(&css->online_cnt, 0); in init_and_link_css()
5588 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
5589 css_get(css->parent); in init_and_link_css()
5593 list_add_rcu(&css->rstat_css_node, &cgrp->rstat_css_list); in init_and_link_css()
5599 static int online_css(struct cgroup_subsys_state *css) in online_css() argument
5601 struct cgroup_subsys *ss = css->ss; in online_css()
5607 ret = ss->css_online(css); in online_css()
5609 css->flags |= CSS_ONLINE; in online_css()
5610 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
5612 atomic_inc(&css->online_cnt); in online_css()
5613 if (css->parent) { in online_css()
5614 atomic_inc(&css->parent->online_cnt); in online_css()
5615 while ((css = css->parent)) in online_css()
5616 css->nr_descendants++; in online_css()
5623 static void offline_css(struct cgroup_subsys_state *css) in offline_css() argument
5625 struct cgroup_subsys *ss = css->ss; in offline_css()
5629 if (!(css->flags & CSS_ONLINE)) in offline_css()
5633 ss->css_offline(css); in offline_css()
5635 css->flags &= ~CSS_ONLINE; in offline_css()
5636 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
5638 wake_up_all(&css->cgroup->offline_waitq); in offline_css()
5640 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5645 while ((css = css->parent)) { in offline_css()
5646 css->nr_descendants--; in offline_css()
5647 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5665 struct cgroup_subsys_state *css; in css_create() local
5670 css = ss->css_alloc(parent_css); in css_create()
5671 if (!css) in css_create()
5672 css = ERR_PTR(-ENOMEM); in css_create()
5673 if (IS_ERR(css)) in css_create()
5674 return css; in css_create()
5676 init_and_link_css(css, ss, cgrp); in css_create()
5678 err = percpu_ref_init(&css->refcnt, css_release, 0, GFP_KERNEL); in css_create()
5685 css->id = err; in css_create()
5688 list_add_tail_rcu(&css->sibling, &parent_css->children); in css_create()
5689 cgroup_idr_replace(&ss->css_idr, css, css->id); in css_create()
5691 err = online_css(css); in css_create()
5695 return css; in css_create()
5698 list_del_rcu(&css->sibling); in css_create()
5700 list_del_rcu(&css->rstat_css_node); in css_create()
5701 INIT_RCU_WORK(&css->destroy_rwork, css_free_rwork_fn); in css_create()
5702 queue_rcu_work(cgroup_destroy_wq, &css->destroy_rwork); in css_create()
5912 struct cgroup_subsys_state *css = in css_killed_work_fn() local
5918 offline_css(css); in css_killed_work_fn()
5919 css_put(css); in css_killed_work_fn()
5921 css = css->parent; in css_killed_work_fn()
5922 } while (css && atomic_dec_and_test(&css->online_cnt)); in css_killed_work_fn()
5930 struct cgroup_subsys_state *css = in css_killed_ref_fn() local
5933 if (atomic_dec_and_test(&css->online_cnt)) { in css_killed_ref_fn()
5934 INIT_WORK(&css->destroy_work, css_killed_work_fn); in css_killed_ref_fn()
5935 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_killed_ref_fn()
5948 static void kill_css(struct cgroup_subsys_state *css) in kill_css() argument
5952 if (css->flags & CSS_DYING) in kill_css()
5958 if (css->ss->css_killed) in kill_css()
5959 css->ss->css_killed(css); in kill_css()
5961 css->flags |= CSS_DYING; in kill_css()
5967 css_clear_dir(css); in kill_css()
5973 css_get(css); in kill_css()
5985 percpu_ref_kill_and_confirm(&css->refcnt, css_killed_ref_fn); in kill_css()
6016 struct cgroup_subsys_state *css; in cgroup_destroy_locked() local
6051 for_each_css(css, ssid, cgrp) in cgroup_destroy_locked()
6052 kill_css(css); in cgroup_destroy_locked()
6111 struct cgroup_subsys_state *css; in cgroup_init_subsys() local
6122 css = ss->css_alloc(NULL); in cgroup_init_subsys()
6124 BUG_ON(IS_ERR(css)); in cgroup_init_subsys()
6125 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
6131 css->flags |= CSS_NO_REF; in cgroup_init_subsys()
6135 css->id = 1; in cgroup_init_subsys()
6137 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
6138 BUG_ON(css->id < 0); in cgroup_init_subsys()
6145 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
6157 BUG_ON(online_css(css)); in cgroup_init_subsys()
6234 struct cgroup_subsys_state *css = in cgroup_init() local
6237 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
6239 BUG_ON(css->id < 0); in cgroup_init()
6475 struct cgroup_subsys_state *css; in cgroup_v1v2_get_from_file() local
6477 css = css_tryget_online_from_dir(f->f_path.dentry, NULL); in cgroup_v1v2_get_from_file()
6478 if (IS_ERR(css)) in cgroup_v1v2_get_from_file()
6479 return ERR_CAST(css); in cgroup_v1v2_get_from_file()
6481 return css->cgroup; in cgroup_v1v2_get_from_file()
6930 struct cgroup_subsys_state *css = NULL; in css_tryget_online_from_dir() local
6947 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
6949 if (!css || !css_tryget_online(css)) in css_tryget_online_from_dir()
6950 css = ERR_PTR(-ENOENT); in css_tryget_online_from_dir()
6953 return css; in css_tryget_online_from_dir()