| .. | .. |
|---|
| 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 */ |
|---|