Lines Matching refs:css
224 static void kill_css(struct cgroup_subsys_state *css);
225 static int cgroup_addrm_files(struct cgroup_subsys_state *css,
407 struct cgroup_subsys_state *css; in cgroup_get_e_css() local
412 css = cgroup_css(cgrp, ss); in cgroup_get_e_css()
414 if (css && css_tryget_online(css)) in cgroup_get_e_css()
419 css = init_css_set.subsys[ss->id]; in cgroup_get_e_css()
420 css_get(css); in cgroup_get_e_css()
423 return css; in cgroup_get_e_css()
500 #define for_each_css(css, ssid, cgrp) \ argument
502 if (!((css) = rcu_dereference_check( \
515 #define for_each_e_css(css, ssid, cgrp) \ argument
517 if (!((css) = cgroup_e_css(cgrp, cgroup_subsys[(ssid)]))) \
739 static unsigned long css_set_hash(struct cgroup_subsys_state *css[]) in css_set_hash() argument
746 key += (unsigned long)css[i]; in css_set_hash()
1068 struct cgroup_subsys_state *css = cset->subsys[ssid]; in find_css_set() local
1071 &css->cgroup->e_csets[ssid]); in find_css_set()
1072 css_get(css); in find_css_set()
1410 struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss); in cgroup_rm_file() local
1411 struct cgroup_file *cfile = (void *)css + cft->file_offset; in cgroup_rm_file()
1426 static void css_clear_dir(struct cgroup_subsys_state *css, in css_clear_dir() argument
1429 struct cgroup *cgrp = cgrp_override ?: css->cgroup; in css_clear_dir()
1432 list_for_each_entry(cfts, &css->ss->cfts, node) in css_clear_dir()
1433 cgroup_addrm_files(css, cgrp, cfts, false); in css_clear_dir()
1443 static int css_populate_dir(struct cgroup_subsys_state *css, in css_populate_dir() argument
1446 struct cgroup *cgrp = cgrp_override ?: css->cgroup; in css_populate_dir()
1450 if (!css->ss) { in css_populate_dir()
1459 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1460 ret = cgroup_addrm_files(css, cgrp, cfts, true); in css_populate_dir()
1468 list_for_each_entry(cfts, &css->ss->cfts, node) { in css_populate_dir()
1471 cgroup_addrm_files(css, cgrp, cfts, false); in css_populate_dir()
1539 struct cgroup_subsys_state *css = cgroup_css(scgrp, ss); in rebind_subsystems() local
1542 WARN_ON(!css || cgroup_css(dcgrp, ss)); in rebind_subsystems()
1544 css_clear_dir(css, NULL); in rebind_subsystems()
1547 rcu_assign_pointer(dcgrp->subsys[ssid], css); in rebind_subsystems()
1549 css->cgroup = dcgrp; in rebind_subsystems()
1572 ss->bind(css); in rebind_subsystems()
2377 struct cgroup_subsys_state *css, *failed_css = NULL; in cgroup_taskset_migrate() local
2387 for_each_e_css(css, i, dst_cgrp) { in cgroup_taskset_migrate()
2388 if (css->ss->can_attach) { in cgroup_taskset_migrate()
2390 ret = css->ss->can_attach(tset); in cgroup_taskset_migrate()
2392 failed_css = css; in cgroup_taskset_migrate()
2423 for_each_e_css(css, i, dst_cgrp) { in cgroup_taskset_migrate()
2424 if (css->ss->attach) { in cgroup_taskset_migrate()
2426 css->ss->attach(tset); in cgroup_taskset_migrate()
2434 for_each_e_css(css, i, dst_cgrp) { in cgroup_taskset_migrate()
2435 if (css == failed_css) in cgroup_taskset_migrate()
2437 if (css->ss->cancel_attach) { in cgroup_taskset_migrate()
2439 css->ss->cancel_attach(tset); in cgroup_taskset_migrate()
2917 struct cgroup_subsys_state *css; in cgroup_update_dfl_csses() local
2927 css_for_each_descendant_pre(css, cgroup_css(cgrp, NULL)) { in cgroup_update_dfl_csses()
2931 if (css->cgroup == cgrp) in cgroup_update_dfl_csses()
2934 list_for_each_entry(link, &css->cgroup->cset_links, cset_link) in cgroup_update_dfl_csses()
3143 struct cgroup_subsys_state *css = cgroup_css(child, ss); in cgroup_subtree_control_write() local
3146 kill_css(css); in cgroup_subtree_control_write()
3148 css_clear_dir(css, NULL); in cgroup_subtree_control_write()
3150 ss->css_reset(css); in cgroup_subtree_control_write()
3163 struct cgroup_subsys_state *css; in cgroup_subtree_control_write() local
3168 css_for_each_descendant_pre(css, this_css) in cgroup_subtree_control_write()
3169 if (css != this_css) in cgroup_subtree_control_write()
3170 ss->css_e_css_changed(css); in cgroup_subtree_control_write()
3188 struct cgroup_subsys_state *css = cgroup_css(child, ss); in cgroup_subtree_control_write() local
3190 if (!css) in cgroup_subtree_control_write()
3194 kill_css(css); in cgroup_subtree_control_write()
3196 css_clear_dir(css, NULL); in cgroup_subtree_control_write()
3214 struct cgroup_subsys_state *css; in cgroup_file_write() local
3227 css = cgroup_css(cgrp, cft->ss); in cgroup_file_write()
3234 ret = cft->write_u64(css, cft, v); in cgroup_file_write()
3239 ret = cft->write_s64(css, cft, v); in cgroup_file_write()
3265 struct cgroup_subsys_state *css = seq_css(m); in cgroup_seqfile_show() local
3271 seq_printf(m, "%llu\n", cft->read_u64(css, cft)); in cgroup_seqfile_show()
3273 seq_printf(m, "%lld\n", cft->read_s64(css, cft)); in cgroup_seqfile_show()
3348 static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp, in cgroup_add_file() argument
3372 struct cgroup_file *cfile = (void *)css + cft->file_offset; in cgroup_add_file()
3392 static int cgroup_addrm_files(struct cgroup_subsys_state *css, in cgroup_addrm_files() argument
3414 ret = cgroup_add_file(css, cgrp, cft); in cgroup_addrm_files()
3434 struct cgroup_subsys_state *css; in cgroup_apply_cftypes() local
3440 css_for_each_descendant_pre(css, cgroup_css(root, ss)) { in cgroup_apply_cftypes()
3441 struct cgroup *cgrp = css->cgroup; in cgroup_apply_cftypes()
3446 ret = cgroup_addrm_files(css, cgrp, cfts, is_add); in cgroup_apply_cftypes()
3858 bool css_has_online_children(struct cgroup_subsys_state *css) in css_has_online_children() argument
3864 css_for_each_child(child, css) { in css_has_online_children()
3973 void css_task_iter_start(struct cgroup_subsys_state *css, in css_task_iter_start() argument
3983 it->ss = css->ss; in css_task_iter_start()
3986 it->cset_pos = &css->cgroup->e_csets[css->ss->id]; in css_task_iter_start()
3988 it->cset_pos = &css->cgroup->cset_links; in css_task_iter_start()
4549 static u64 cgroup_read_notify_on_release(struct cgroup_subsys_state *css, in cgroup_read_notify_on_release() argument
4552 return notify_on_release(css->cgroup); in cgroup_read_notify_on_release()
4555 static int cgroup_write_notify_on_release(struct cgroup_subsys_state *css, in cgroup_write_notify_on_release() argument
4559 set_bit(CGRP_NOTIFY_ON_RELEASE, &css->cgroup->flags); in cgroup_write_notify_on_release()
4561 clear_bit(CGRP_NOTIFY_ON_RELEASE, &css->cgroup->flags); in cgroup_write_notify_on_release()
4565 static u64 cgroup_clone_children_read(struct cgroup_subsys_state *css, in cgroup_clone_children_read() argument
4568 return test_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags); in cgroup_clone_children_read()
4571 static int cgroup_clone_children_write(struct cgroup_subsys_state *css, in cgroup_clone_children_write() argument
4575 set_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags); in cgroup_clone_children_write()
4577 clear_bit(CGRP_CPUSET_CLONE_CHILDREN, &css->cgroup->flags); in cgroup_clone_children_write()
4686 struct cgroup_subsys_state *css = in css_free_work_fn() local
4688 struct cgroup_subsys *ss = css->ss; in css_free_work_fn()
4689 struct cgroup *cgrp = css->cgroup; in css_free_work_fn()
4691 percpu_ref_exit(&css->refcnt); in css_free_work_fn()
4695 struct cgroup_subsys_state *parent = css->parent; in css_free_work_fn()
4696 int id = css->id; in css_free_work_fn()
4698 ss->css_free(css); in css_free_work_fn()
4733 struct cgroup_subsys_state *css = in css_free_rcu_fn() local
4736 INIT_WORK(&css->destroy_work, css_free_work_fn); in css_free_rcu_fn()
4737 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_free_rcu_fn()
4742 struct cgroup_subsys_state *css = in css_release_work_fn() local
4744 struct cgroup_subsys *ss = css->ss; in css_release_work_fn()
4745 struct cgroup *cgrp = css->cgroup; in css_release_work_fn()
4749 css->flags |= CSS_RELEASED; in css_release_work_fn()
4750 list_del_rcu(&css->sibling); in css_release_work_fn()
4754 cgroup_idr_replace(&ss->css_idr, NULL, css->id); in css_release_work_fn()
4756 ss->css_released(css); in css_release_work_fn()
4774 call_rcu(&css->rcu_head, css_free_rcu_fn); in css_release_work_fn()
4779 struct cgroup_subsys_state *css = in css_release() local
4782 INIT_WORK(&css->destroy_work, css_release_work_fn); in css_release()
4783 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_release()
4786 static void init_and_link_css(struct cgroup_subsys_state *css, in init_and_link_css() argument
4793 memset(css, 0, sizeof(*css)); in init_and_link_css()
4794 css->cgroup = cgrp; in init_and_link_css()
4795 css->ss = ss; in init_and_link_css()
4796 INIT_LIST_HEAD(&css->sibling); in init_and_link_css()
4797 INIT_LIST_HEAD(&css->children); in init_and_link_css()
4798 css->serial_nr = css_serial_nr_next++; in init_and_link_css()
4799 atomic_set(&css->online_cnt, 0); in init_and_link_css()
4802 css->parent = cgroup_css(cgroup_parent(cgrp), ss); in init_and_link_css()
4803 css_get(css->parent); in init_and_link_css()
4810 static int online_css(struct cgroup_subsys_state *css) in online_css() argument
4812 struct cgroup_subsys *ss = css->ss; in online_css()
4818 ret = ss->css_online(css); in online_css()
4820 css->flags |= CSS_ONLINE; in online_css()
4821 rcu_assign_pointer(css->cgroup->subsys[ss->id], css); in online_css()
4823 atomic_inc(&css->online_cnt); in online_css()
4824 if (css->parent) in online_css()
4825 atomic_inc(&css->parent->online_cnt); in online_css()
4831 static void offline_css(struct cgroup_subsys_state *css) in offline_css() argument
4833 struct cgroup_subsys *ss = css->ss; in offline_css()
4837 if (!(css->flags & CSS_ONLINE)) in offline_css()
4841 ss->css_offline(css); in offline_css()
4843 css->flags &= ~CSS_ONLINE; in offline_css()
4844 RCU_INIT_POINTER(css->cgroup->subsys[ss->id], NULL); in offline_css()
4846 wake_up_all(&css->cgroup->offline_waitq); in offline_css()
4864 struct cgroup_subsys_state *css; in create_css() local
4869 css = ss->css_alloc(parent_css); in create_css()
4870 if (IS_ERR(css)) in create_css()
4871 return PTR_ERR(css); in create_css()
4873 init_and_link_css(css, ss, cgrp); in create_css()
4875 err = percpu_ref_init(&css->refcnt, css_release, 0, GFP_KERNEL); in create_css()
4882 css->id = err; in create_css()
4885 err = css_populate_dir(css, NULL); in create_css()
4891 list_add_tail_rcu(&css->sibling, &parent_css->children); in create_css()
4892 cgroup_idr_replace(&ss->css_idr, css, css->id); in create_css()
4894 err = online_css(css); in create_css()
4910 list_del_rcu(&css->sibling); in create_css()
4911 css_clear_dir(css, NULL); in create_css()
4913 cgroup_idr_remove(&ss->css_idr, css->id); in create_css()
4915 percpu_ref_exit(&css->refcnt); in create_css()
4917 call_rcu(&css->rcu_head, css_free_rcu_fn); in create_css()
5053 struct cgroup_subsys_state *css = in css_killed_work_fn() local
5059 offline_css(css); in css_killed_work_fn()
5060 css_put(css); in css_killed_work_fn()
5062 css = css->parent; in css_killed_work_fn()
5063 } while (css && atomic_dec_and_test(&css->online_cnt)); in css_killed_work_fn()
5071 struct cgroup_subsys_state *css = in css_killed_ref_fn() local
5074 if (atomic_dec_and_test(&css->online_cnt)) { in css_killed_ref_fn()
5075 INIT_WORK(&css->destroy_work, css_killed_work_fn); in css_killed_ref_fn()
5076 queue_work(cgroup_destroy_wq, &css->destroy_work); in css_killed_ref_fn()
5089 static void kill_css(struct cgroup_subsys_state *css) in kill_css() argument
5097 css_clear_dir(css, NULL); in kill_css()
5103 css_get(css); in kill_css()
5115 percpu_ref_kill_and_confirm(&css->refcnt, css_killed_ref_fn); in kill_css()
5145 struct cgroup_subsys_state *css; in cgroup_destroy_locked() local
5180 for_each_css(css, ssid, cgrp) in cgroup_destroy_locked()
5181 kill_css(css); in cgroup_destroy_locked()
5222 struct cgroup_subsys_state *css; in cgroup_init_subsys() local
5233 css = ss->css_alloc(cgroup_css(&cgrp_dfl_root.cgrp, ss)); in cgroup_init_subsys()
5235 BUG_ON(IS_ERR(css)); in cgroup_init_subsys()
5236 init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); in cgroup_init_subsys()
5242 css->flags |= CSS_NO_REF; in cgroup_init_subsys()
5246 css->id = 1; in cgroup_init_subsys()
5248 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); in cgroup_init_subsys()
5249 BUG_ON(css->id < 0); in cgroup_init_subsys()
5256 init_css_set.subsys[ss->id] = css; in cgroup_init_subsys()
5268 BUG_ON(online_css(css)); in cgroup_init_subsys()
5339 struct cgroup_subsys_state *css = in cgroup_init() local
5342 css->id = cgroup_idr_alloc(&ss->css_idr, css, 1, 2, in cgroup_init()
5344 BUG_ON(css->id < 0); in cgroup_init()
5818 struct cgroup_subsys_state *css = NULL; in css_tryget_online_from_dir() local
5835 css = cgroup_css(cgrp, ss); in css_tryget_online_from_dir()
5837 if (!css || !css_tryget_online(css)) in css_tryget_online_from_dir()
5838 css = ERR_PTR(-ENOENT); in css_tryget_online_from_dir()
5841 return css; in css_tryget_online_from_dir()
5862 struct cgroup_subsys_state *css = kzalloc(sizeof(*css), GFP_KERNEL); in debug_css_alloc() local
5864 if (!css) in debug_css_alloc()
5867 return css; in debug_css_alloc()
5870 static void debug_css_free(struct cgroup_subsys_state *css) in debug_css_free() argument
5872 kfree(css); in debug_css_free()
5875 static u64 debug_taskcount_read(struct cgroup_subsys_state *css, in debug_taskcount_read() argument
5878 return cgroup_task_count(css->cgroup); in debug_taskcount_read()
5881 static u64 current_css_set_read(struct cgroup_subsys_state *css, in current_css_set_read() argument
5887 static u64 current_css_set_refcount_read(struct cgroup_subsys_state *css, in current_css_set_refcount_read() argument
5927 struct cgroup_subsys_state *css = seq_css(seq); in cgroup_css_links_read() local
5931 list_for_each_entry(link, &css->cgroup->cset_links, cset_link) { in cgroup_css_links_read()
5957 static u64 releasable_read(struct cgroup_subsys_state *css, struct cftype *cft) in releasable_read() argument
5959 return (!cgroup_is_populated(css->cgroup) && in releasable_read()
5960 !css_has_online_children(&css->cgroup->self)); in releasable_read()