.. | .. |
---|
24 | 24 | #include <linux/user_namespace.h> |
---|
25 | 25 | #include <linux/refcount.h> |
---|
26 | 26 | #include <linux/kernel_stat.h> |
---|
| 27 | +#include <linux/android_kabi.h> |
---|
27 | 28 | |
---|
28 | 29 | #include <linux/cgroup-defs.h> |
---|
| 30 | + |
---|
| 31 | +struct kernel_clone_args; |
---|
29 | 32 | |
---|
30 | 33 | #ifdef CONFIG_CGROUPS |
---|
31 | 34 | |
---|
.. | .. |
---|
58 | 61 | struct list_head *tcset_head; |
---|
59 | 62 | |
---|
60 | 63 | struct list_head *task_pos; |
---|
61 | | - struct list_head *tasks_head; |
---|
62 | | - struct list_head *mg_tasks_head; |
---|
63 | | - struct list_head *dying_tasks_head; |
---|
64 | 64 | |
---|
65 | 65 | struct list_head *cur_tasks_head; |
---|
66 | 66 | struct css_set *cur_cset; |
---|
67 | 67 | struct css_set *cur_dcset; |
---|
68 | 68 | struct task_struct *cur_task; |
---|
69 | 69 | struct list_head iters_node; /* css_set->task_iters */ |
---|
| 70 | + |
---|
| 71 | + ANDROID_KABI_RESERVE(1); |
---|
70 | 72 | }; |
---|
71 | 73 | |
---|
| 74 | +extern struct file_system_type cgroup_fs_type; |
---|
72 | 75 | extern struct cgroup_root cgrp_dfl_root; |
---|
73 | | -extern struct css_set init_css_set; |
---|
| 76 | +extern struct ext_css_set init_ext_css_set; |
---|
| 77 | +#define init_css_set init_ext_css_set.cset |
---|
74 | 78 | |
---|
75 | 79 | #define SUBSYS(_x) extern struct cgroup_subsys _x ## _cgrp_subsys; |
---|
76 | 80 | #include <linux/cgroup_subsys.h> |
---|
.. | .. |
---|
98 | 102 | |
---|
99 | 103 | bool css_has_online_children(struct cgroup_subsys_state *css); |
---|
100 | 104 | struct cgroup_subsys_state *css_from_id(int id, struct cgroup_subsys *ss); |
---|
| 105 | +struct cgroup_subsys_state *cgroup_e_css(struct cgroup *cgroup, |
---|
| 106 | + struct cgroup_subsys *ss); |
---|
101 | 107 | struct cgroup_subsys_state *cgroup_get_e_css(struct cgroup *cgroup, |
---|
102 | 108 | struct cgroup_subsys *ss); |
---|
103 | 109 | struct cgroup_subsys_state *css_tryget_online_from_dir(struct dentry *dentry, |
---|
.. | .. |
---|
120 | 126 | struct pid *pid, struct task_struct *tsk); |
---|
121 | 127 | |
---|
122 | 128 | void cgroup_fork(struct task_struct *p); |
---|
123 | | -extern int cgroup_can_fork(struct task_struct *p); |
---|
124 | | -extern void cgroup_cancel_fork(struct task_struct *p); |
---|
125 | | -extern void cgroup_post_fork(struct task_struct *p); |
---|
| 129 | +extern int cgroup_can_fork(struct task_struct *p, |
---|
| 130 | + struct kernel_clone_args *kargs); |
---|
| 131 | +extern void cgroup_cancel_fork(struct task_struct *p, |
---|
| 132 | + struct kernel_clone_args *kargs); |
---|
| 133 | +extern void cgroup_post_fork(struct task_struct *p, |
---|
| 134 | + struct kernel_clone_args *kargs); |
---|
126 | 135 | void cgroup_exit(struct task_struct *p); |
---|
127 | 136 | void cgroup_release(struct task_struct *p); |
---|
128 | 137 | void cgroup_free(struct task_struct *p); |
---|
.. | .. |
---|
303 | 312 | * Inline functions. |
---|
304 | 313 | */ |
---|
305 | 314 | |
---|
| 315 | +static inline u64 cgroup_id(struct cgroup *cgrp) |
---|
| 316 | +{ |
---|
| 317 | + return cgrp->kn->id; |
---|
| 318 | +} |
---|
| 319 | + |
---|
306 | 320 | /** |
---|
307 | 321 | * css_get - obtain a reference on the specified css |
---|
308 | 322 | * @css: target css |
---|
.. | .. |
---|
441 | 455 | extern spinlock_t css_set_lock; |
---|
442 | 456 | #define task_css_set_check(task, __c) \ |
---|
443 | 457 | rcu_dereference_check((task)->cgroups, \ |
---|
| 458 | + rcu_read_lock_sched_held() || \ |
---|
444 | 459 | lockdep_is_held(&cgroup_mutex) || \ |
---|
445 | 460 | lockdep_is_held(&css_set_lock) || \ |
---|
446 | 461 | ((task)->flags & PF_EXITING) || (__c)) |
---|
.. | .. |
---|
564 | 579 | { |
---|
565 | 580 | if (cgrp->root != ancestor->root || cgrp->level < ancestor->level) |
---|
566 | 581 | return false; |
---|
567 | | - return cgrp->ancestor_ids[ancestor->level] == ancestor->id; |
---|
| 582 | + return cgrp->ancestor_ids[ancestor->level] == cgroup_id(ancestor); |
---|
568 | 583 | } |
---|
569 | 584 | |
---|
570 | 585 | /** |
---|
.. | .. |
---|
615 | 630 | /* returns ino associated with a cgroup */ |
---|
616 | 631 | static inline ino_t cgroup_ino(struct cgroup *cgrp) |
---|
617 | 632 | { |
---|
618 | | - return cgrp->kn->id.ino; |
---|
| 633 | + return kernfs_ino(cgrp->kn); |
---|
619 | 634 | } |
---|
620 | 635 | |
---|
621 | 636 | /* cft/css accessors for cftype->write() operation */ |
---|
.. | .. |
---|
688 | 703 | current->no_cgroup_migration = 0; |
---|
689 | 704 | } |
---|
690 | 705 | |
---|
691 | | -static inline union kernfs_node_id *cgroup_get_kernfs_id(struct cgroup *cgrp) |
---|
692 | | -{ |
---|
693 | | - return &cgrp->kn->id; |
---|
694 | | -} |
---|
695 | | - |
---|
696 | | -void cgroup_path_from_kernfs_id(const union kernfs_node_id *id, |
---|
697 | | - char *buf, size_t buflen); |
---|
| 706 | +void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen); |
---|
698 | 707 | #else /* !CONFIG_CGROUPS */ |
---|
699 | 708 | |
---|
700 | 709 | struct cgroup_subsys_state; |
---|
701 | 710 | struct cgroup; |
---|
702 | 711 | |
---|
| 712 | +static inline u64 cgroup_id(struct cgroup *cgrp) { return 1; } |
---|
| 713 | +static inline void css_get(struct cgroup_subsys_state *css) {} |
---|
703 | 714 | static inline void css_put(struct cgroup_subsys_state *css) {} |
---|
704 | 715 | static inline int cgroup_attach_task_all(struct task_struct *from, |
---|
705 | 716 | struct task_struct *t) { return 0; } |
---|
.. | .. |
---|
707 | 718 | struct dentry *dentry) { return -EINVAL; } |
---|
708 | 719 | |
---|
709 | 720 | static inline void cgroup_fork(struct task_struct *p) {} |
---|
710 | | -static inline int cgroup_can_fork(struct task_struct *p) { return 0; } |
---|
711 | | -static inline void cgroup_cancel_fork(struct task_struct *p) {} |
---|
712 | | -static inline void cgroup_post_fork(struct task_struct *p) {} |
---|
| 721 | +static inline int cgroup_can_fork(struct task_struct *p, |
---|
| 722 | + struct kernel_clone_args *kargs) { return 0; } |
---|
| 723 | +static inline void cgroup_cancel_fork(struct task_struct *p, |
---|
| 724 | + struct kernel_clone_args *kargs) {} |
---|
| 725 | +static inline void cgroup_post_fork(struct task_struct *p, |
---|
| 726 | + struct kernel_clone_args *kargs) {} |
---|
713 | 727 | static inline void cgroup_exit(struct task_struct *p) {} |
---|
714 | 728 | static inline void cgroup_release(struct task_struct *p) {} |
---|
715 | 729 | static inline void cgroup_free(struct task_struct *p) {} |
---|
.. | .. |
---|
718 | 732 | static inline int cgroup_init(void) { return 0; } |
---|
719 | 733 | static inline void cgroup_init_kthreadd(void) {} |
---|
720 | 734 | static inline void cgroup_kthread_ready(void) {} |
---|
721 | | -static inline union kernfs_node_id *cgroup_get_kernfs_id(struct cgroup *cgrp) |
---|
722 | | -{ |
---|
723 | | - return NULL; |
---|
724 | | -} |
---|
725 | 735 | |
---|
726 | 736 | static inline struct cgroup *cgroup_parent(struct cgroup *cgrp) |
---|
727 | 737 | { |
---|
.. | .. |
---|
744 | 754 | return true; |
---|
745 | 755 | } |
---|
746 | 756 | |
---|
747 | | -static inline void cgroup_path_from_kernfs_id(const union kernfs_node_id *id, |
---|
748 | | - char *buf, size_t buflen) {} |
---|
| 757 | +static inline void cgroup_path_from_kernfs_id(u64 id, char *buf, size_t buflen) |
---|
| 758 | +{} |
---|
749 | 759 | #endif /* !CONFIG_CGROUPS */ |
---|
750 | 760 | |
---|
751 | 761 | #ifdef CONFIG_CGROUPS |
---|
.. | .. |
---|
781 | 791 | |
---|
782 | 792 | cpuacct_charge(task, delta_exec); |
---|
783 | 793 | |
---|
784 | | - rcu_read_lock(); |
---|
785 | 794 | cgrp = task_dfl_cgroup(task); |
---|
786 | 795 | if (cgroup_parent(cgrp)) |
---|
787 | 796 | __cgroup_account_cputime(cgrp, delta_exec); |
---|
788 | | - rcu_read_unlock(); |
---|
789 | 797 | } |
---|
790 | 798 | |
---|
791 | 799 | static inline void cgroup_account_cputime_field(struct task_struct *task, |
---|
.. | .. |
---|
909 | 917 | void cgroup_freeze(struct cgroup *cgrp, bool freeze); |
---|
910 | 918 | void cgroup_freezer_migrate_task(struct task_struct *task, struct cgroup *src, |
---|
911 | 919 | struct cgroup *dst); |
---|
912 | | -void cgroup_freezer_frozen_exit(struct task_struct *task); |
---|
| 920 | + |
---|
913 | 921 | static inline bool cgroup_task_freeze(struct task_struct *task) |
---|
914 | 922 | { |
---|
915 | 923 | bool ret; |
---|
.. | .. |
---|
944 | 952 | |
---|
945 | 953 | #endif /* !CONFIG_CGROUPS */ |
---|
946 | 954 | |
---|
| 955 | +#ifdef CONFIG_CGROUP_BPF |
---|
| 956 | +static inline void cgroup_bpf_get(struct cgroup *cgrp) |
---|
| 957 | +{ |
---|
| 958 | + percpu_ref_get(&cgrp->bpf.refcnt); |
---|
| 959 | +} |
---|
| 960 | + |
---|
| 961 | +static inline void cgroup_bpf_put(struct cgroup *cgrp) |
---|
| 962 | +{ |
---|
| 963 | + percpu_ref_put(&cgrp->bpf.refcnt); |
---|
| 964 | +} |
---|
| 965 | + |
---|
| 966 | +#else /* CONFIG_CGROUP_BPF */ |
---|
| 967 | + |
---|
| 968 | +static inline void cgroup_bpf_get(struct cgroup *cgrp) {} |
---|
| 969 | +static inline void cgroup_bpf_put(struct cgroup *cgrp) {} |
---|
| 970 | + |
---|
| 971 | +#endif /* CONFIG_CGROUP_BPF */ |
---|
| 972 | + |
---|
947 | 973 | #endif /* _LINUX_CGROUP_H */ |
---|