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()
664 #define for_each_css(css, ssid, cgrp) \ argument
666 if (!((css) = rcu_dereference_check( \
912 static unsigned long css_set_hash(struct cgroup_subsys_state **css) in css_set_hash() argument
919 key += (unsigned long)css[i]; in css_set_hash()
1240 struct cgroup_subsys_state *css = cset->subsys[ssid]; in find_css_set() local
1243 &css->cgroup->e_csets[ssid]); in find_css_set()
1244 css_get(css); in find_css_set()
1678 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file() local
1679 struct cgroup_file *cfile = (void *)css + cft->file_offset; in cgroup_rm_file()
1695 static void css_clear_dir(struct cgroup_subsys_state *css) in css_clear_dir() argument
1697 struct cgroup *cgrp = css->cgroup; in css_clear_dir()
1700 if (!(css->flags & CSS_VISIBLE)) in css_clear_dir()
1703 css->flags &= ~CSS_VISIBLE; in css_clear_dir()
1705 if (!css->ss) { in css_clear_dir()
1707 cgroup_addrm_files(css, cgrp, in css_clear_dir()
1710 cgroup_addrm_files(css, cgrp, in css_clear_dir()
1713 cgroup_addrm_files(css, cgrp, in css_clear_dir()
1717 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1718 cgroup_addrm_files(css, cgrp, cfts, false); in css_clear_dir()
1728 static int css_populate_dir(struct cgroup_subsys_state *css) in css_populate_dir() argument
1730 struct cgroup *cgrp = css->cgroup; in css_populate_dir()
1734 if (css->flags & CSS_VISIBLE) in css_populate_dir()
1737 if (!css->ss) { in css_populate_dir()
1739 ret = cgroup_addrm_files(css, cgrp, in css_populate_dir()
1745 ret = cgroup_addrm_files(css, cgrp, in css_populate_dir()
1748 cgroup_addrm_files(css, cgrp, in css_populate_dir()
1754 ret = cgroup_addrm_files(css, cgrp, in css_populate_dir()
1760 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1761 ret = cgroup_addrm_files(css, cgrp, cfts, true); in css_populate_dir()
1769 css->flags |= CSS_VISIBLE; in css_populate_dir()
1773 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1776 cgroup_addrm_files(css, cgrp, cfts, false); in css_populate_dir()
1828 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems() local
1832 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1843 rcu_assign_pointer(dcgrp->subsys[ssid], css); in rebind_subsystems()
1847 css->cgroup = dcgrp; in rebind_subsystems()
1867 list_del_rcu(&css->rstat_css_node); in rebind_subsystems()
1869 list_add_rcu(&css->rstat_css_node, in rebind_subsystems()
1888 ss->bind(css); in rebind_subsystems()
3118 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_lock_and_drain_offline() local
3121 if (!css || !percpu_ref_is_dying(&css->refcnt)) in cgroup_lock_and_drain_offline()
3199 static bool css_visible(struct cgroup_subsys_state *css) in css_visible() argument
3201 struct cgroup_subsys *ss = css->ss; in css_visible()
3202 struct cgroup *cgrp = css->cgroup; in css_visible()
3233 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_enable() local
3238 if (!css) { in cgroup_apply_control_enable()
3239 css = css_create(dsct, ss); in cgroup_apply_control_enable()
3240 if (IS_ERR(css)) in cgroup_apply_control_enable()
3241 return PTR_ERR(css); in cgroup_apply_control_enable()
3244 WARN_ON_ONCE(percpu_ref_is_dying(&css->refcnt)); in cgroup_apply_control_enable()
3246 if (css_visible(css)) { in cgroup_apply_control_enable()
3247 ret = css_populate_dir(css); in cgroup_apply_control_enable()
3279 struct cgroup_subsys_state *css = cgroup_css(dsct, ss); in cgroup_apply_control_disable() local
3281 if (!css) in cgroup_apply_control_disable()
3284 WARN_ON_ONCE(percpu_ref_is_dying(&css->refcnt)); in cgroup_apply_control_disable()
3286 if (css->parent && in cgroup_apply_control_disable()
3288 kill_css(css); in cgroup_apply_control_disable()
3289 } else if (!css_visible(css)) { in cgroup_apply_control_disable()
3290 css_clear_dir(css); in cgroup_apply_control_disable()
3292 ss->css_reset(css); in cgroup_apply_control_disable()
3679 struct cgroup_subsys_state *css; in cgroup_stat_show() local
3699 css = rcu_dereference_raw(cgroup->subsys[ssid]); in cgroup_stat_show()
3702 css ? (css->nr_descendants + 1) : 0); in cgroup_stat_show()
3728 struct cgroup_subsys_state *css; in cgroup_tryget_css() local
3731 css = cgroup_css(cgrp, ss); in cgroup_tryget_css()
3732 if (css && !css_tryget_online(css)) in cgroup_tryget_css()
3733 css = NULL; in cgroup_tryget_css()
3736 return css; in cgroup_tryget_css()
3743 struct cgroup_subsys_state *css; in cgroup_extra_stat_show() local
3749 css = cgroup_tryget_css(cgrp, ss); in cgroup_extra_stat_show()
3750 if (!css) in cgroup_extra_stat_show()
3753 ret = ss->css_extra_stat_show(seq, css); in cgroup_extra_stat_show()
3754 css_put(css); in cgroup_extra_stat_show()
3762 struct cgroup_subsys_state *css; in cgroup_local_stat_show() local
3768 css = cgroup_tryget_css(cgrp, ss); in cgroup_local_stat_show()
3769 if (!css) in cgroup_local_stat_show()
3772 ret = ss->css_local_stat_show(seq, css); in cgroup_local_stat_show()
3773 css_put(css); in cgroup_local_stat_show()
4040 struct cgroup_subsys_state *css; in cgroup_kill() local
4045 cgroup_for_each_live_descendant_pre(dsct, css, cgrp) in cgroup_kill()
4124 struct cgroup_subsys_state *css; in cgroup_file_write() local
4151 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
4158 ret = cft->write_u64(css, cft, v); in cgroup_file_write()
4163 ret = cft->write_s64(css, cft, v); in cgroup_file_write()
4200 struct cgroup_subsys_state *css = seq_css(m); in cgroup_seqfile_show() local
4206 seq_printf(m, "%llu\n", cft->read_u64(css, cft)); in cgroup_seqfile_show()
4208 seq_printf(m, "%lld\n", cft->read_s64(css, cft)); in cgroup_seqfile_show()
4241 static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, in cgroup_add_file() argument
4260 struct cgroup_file *cfile = (void *)css + cft->file_offset; in cgroup_add_file()
4282 static int cgroup_addrm_files(struct cgroup_subsys_state *css, in cgroup_addrm_files() argument
4305 ret = cgroup_add_file(css, cgrp, cft); in cgroup_addrm_files()
4324 struct cgroup_subsys_state *css; in cgroup_apply_cftypes() local
4330 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
4331 struct cgroup *cgrp = css->cgroup; in cgroup_apply_cftypes()
4333 if (!(css->flags & CSS_VISIBLE)) in cgroup_apply_cftypes()
4336 ret = cgroup_addrm_files(css, cgrp, cfts, is_add); in cgroup_apply_cftypes()
4773 bool css_has_online_children(struct cgroup_subsys_state *css) in css_has_online_children() argument
4779 css_for_each_child(child, css) { in css_has_online_children()
4971 void css_task_iter_start(struct cgroup_subsys_state *css, unsigned int flags, in css_task_iter_start() argument
4980 it->ss = css->ss; in css_task_iter_start()
4984 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
4986 it->cset_pos = &css->cgroup->cset_links; in css_task_iter_start()
5402 struct cgroup_subsys_state *css = container_of(to_rcu_work(work), in css_free_rwork_fn() local
5404 struct cgroup_subsys *ss = css->ss; in css_free_rwork_fn()
5405 struct cgroup *cgrp = css->cgroup; in css_free_rwork_fn()
5407 percpu_ref_exit(&css->refcnt); in css_free_rwork_fn()
5411 struct cgroup_subsys_state *parent = css->parent; in css_free_rwork_fn()
5412 int id = css->id; in css_free_rwork_fn()
5414 ss->css_free(css); in css_free_rwork_fn()
5453 struct cgroup_subsys_state *css = in css_release_work_fn() local
5455 struct cgroup_subsys *ss = css->ss; in css_release_work_fn()
5456 struct cgroup *cgrp = css->cgroup; in css_release_work_fn()
5460 css->flags |= CSS_RELEASED; in css_release_work_fn()
5461 list_del_rcu(&css->sibling); in css_release_work_fn()
5467 if (!list_empty(&css->rstat_css_node)) { in css_release_work_fn()
5469 list_del_rcu(&css->rstat_css_node); in css_release_work_fn()
5472 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
5474 ss->css_released(css); in css_release_work_fn()
5484 WARN_ON_ONCE(css->nr_descendants); in css_release_work_fn()
5518 INIT_RCU_WORK(&css->destroy_rwork, css_free_rwork_fn); in css_release_work_fn()
5519 queue_rcu_work(cgroup_destroy_wq, &css->destroy_rwork); in css_release_work_fn()
5524 struct cgroup_subsys_state *css = in css_release() local
5527 INIT_WORK(&css->destroy_work, css_release_work_fn); in css_release()
5528 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_release()
5531 static void init_and_link_css(struct cgroup_subsys_state *css, in init_and_link_css() argument
5538 memset(css, 0, sizeof(*css)); in init_and_link_css()
5539 css->cgroup = cgrp; in init_and_link_css()
5540 css->ss = ss; in init_and_link_css()
5541 css->id = -1; in init_and_link_css()
5542 INIT_LIST_HEAD(&css->sibling); in init_and_link_css()
5543 INIT_LIST_HEAD(&css->children); in init_and_link_css()
5544 INIT_LIST_HEAD(&css->rstat_css_node); in init_and_link_css()
5545 css->serial_nr = css_serial_nr_next++; in init_and_link_css()
5546 atomic_set(&css->online_cnt, 0); in init_and_link_css()
5549 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
5550 css_get(css->parent); in init_and_link_css()
5554 list_add_rcu(&css->rstat_css_node, &cgrp->rstat_css_list); in init_and_link_css()
5560 static int online_css(struct cgroup_subsys_state *css) in online_css() argument
5562 struct cgroup_subsys *ss = css->ss; in online_css()
5568 ret = ss->css_online(css); in online_css()
5570 css->flags |= CSS_ONLINE; in online_css()
5571 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
5573 atomic_inc(&css->online_cnt); in online_css()
5574 if (css->parent) { in online_css()
5575 atomic_inc(&css->parent->online_cnt); in online_css()
5576 while ((css = css->parent)) in online_css()
5577 css->nr_descendants++; in online_css()
5584 static void offline_css(struct cgroup_subsys_state *css) in offline_css() argument
5586 struct cgroup_subsys *ss = css->ss; in offline_css()
5590 if (!(css->flags & CSS_ONLINE)) in offline_css()
5594 ss->css_offline(css); in offline_css()
5596 css->flags &= ~CSS_ONLINE; in offline_css()
5597 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
5599 wake_up_all(&css->cgroup->offline_waitq); in offline_css()
5601 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5606 while ((css = css->parent)) { in offline_css()
5607 css->nr_descendants--; in offline_css()
5608 css->cgroup->nr_dying_subsys[ss->id]++; in offline_css()
5626 struct cgroup_subsys_state *css; in css_create() local
5631 css = ss->css_alloc(parent_css); in css_create()
5632 if (!css) in css_create()
5633 css = ERR_PTR(-ENOMEM); in css_create()
5634 if (IS_ERR(css)) in css_create()
5635 return css; in css_create()
5637 init_and_link_css(css, ss, cgrp); in css_create()
5639 err = percpu_ref_init(&css->refcnt, css_release, 0, GFP_KERNEL); in css_create()
5646 css->id = err; in css_create()
5649 list_add_tail_rcu(&css->sibling, &parent_css->children); in css_create()
5650 cgroup_idr_replace(&ss->css_idr, css, css->id); in css_create()
5652 err = online_css(css); in css_create()
5656 return css; in css_create()
5659 list_del_rcu(&css->sibling); in css_create()
5661 list_del_rcu(&css->rstat_css_node); in css_create()
5662 INIT_RCU_WORK(&css->destroy_rwork, css_free_rwork_fn); in css_create()
5663 queue_rcu_work(cgroup_destroy_wq, &css->destroy_rwork); in css_create()
5871 struct cgroup_subsys_state *css = in css_killed_work_fn() local
5877 offline_css(css); in css_killed_work_fn()
5878 css_put(css); in css_killed_work_fn()
5880 css = css->parent; in css_killed_work_fn()
5881 } while (css && atomic_dec_and_test(&css->online_cnt)); in css_killed_work_fn()
5889 struct cgroup_subsys_state *css = in css_killed_ref_fn() local
5892 if (atomic_dec_and_test(&css->online_cnt)) { in css_killed_ref_fn()
5893 INIT_WORK(&css->destroy_work, css_killed_work_fn); in css_killed_ref_fn()
5894 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_killed_ref_fn()
5907 static void kill_css(struct cgroup_subsys_state *css) in kill_css() argument
5911 if (css->flags & CSS_DYING) in kill_css()
5914 css->flags |= CSS_DYING; in kill_css()
5920 css_clear_dir(css); in kill_css()
5926 css_get(css); in kill_css()
5938 percpu_ref_kill_and_confirm(&css->refcnt, css_killed_ref_fn); in kill_css()
5969 struct cgroup_subsys_state *css; in cgroup_destroy_locked() local
6004 for_each_css(css, ssid, cgrp) in cgroup_destroy_locked()
6005 kill_css(css); in cgroup_destroy_locked()
6063 struct cgroup_subsys_state *css; in cgroup_init_subsys() local
6074 css = ss->css_alloc(NULL); in cgroup_init_subsys()
6076 BUG_ON(IS_ERR(css)); in cgroup_init_subsys()
6077 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
6083 css->flags |= CSS_NO_REF; in cgroup_init_subsys()
6087 css->id = 1; in cgroup_init_subsys()
6089 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
6090 BUG_ON(css->id < 0); in cgroup_init_subsys()
6097 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
6109 BUG_ON(online_css(css)); in cgroup_init_subsys()
6186 struct cgroup_subsys_state *css = in cgroup_init() local
6189 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
6191 BUG_ON(css->id < 0); in cgroup_init()
6427 struct cgroup_subsys_state *css; in cgroup_v1v2_get_from_file() local
6429 css = css_tryget_online_from_dir(f->f_path.dentry, NULL); in cgroup_v1v2_get_from_file()
6430 if (IS_ERR(css)) in cgroup_v1v2_get_from_file()
6431 return ERR_CAST(css); in cgroup_v1v2_get_from_file()
6433 return css->cgroup; in cgroup_v1v2_get_from_file()
6878 struct cgroup_subsys_state *css = NULL; in css_tryget_online_from_dir() local
6895 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
6897 if (!css || !css_tryget_online(css)) in css_tryget_online_from_dir()
6898 css = ERR_PTR(-ENOENT); in css_tryget_online_from_dir()
6901 return css; in css_tryget_online_from_dir()