Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifdef CONFIG_SCHED_AUTOGROUP 3 : : 4 : : struct autogroup { 5 : : /* 6 : : * Reference doesn't mean how many threads attach to this 7 : : * autogroup now. It just stands for the number of tasks 8 : : * which could use this autogroup. 9 : : */ 10 : : struct kref kref; 11 : : struct task_group *tg; 12 : : struct rw_semaphore lock; 13 : : unsigned long id; 14 : : int nice; 15 : : }; 16 : : 17 : : extern void autogroup_init(struct task_struct *init_task); 18 : : extern void autogroup_free(struct task_group *tg); 19 : : 20 : : static inline bool task_group_is_autogroup(struct task_group *tg) 21 : : { 22 : 0 : return !!tg->autogroup; 23 : : } 24 : : 25 : : extern bool task_wants_autogroup(struct task_struct *p, struct task_group *tg); 26 : : 27 : : static inline struct task_group * 28 : 3 : autogroup_task_group(struct task_struct *p, struct task_group *tg) 29 : : { 30 : : int enabled = READ_ONCE(sysctl_sched_autogroup_enabled); 31 : : 32 : 3 : if (enabled && task_wants_autogroup(p, tg)) 33 : 3 : return p->signal->autogroup->tg; 34 : : 35 : 3 : return tg; 36 : : } 37 : : 38 : : extern int autogroup_path(struct task_group *tg, char *buf, int buflen); 39 : : 40 : : #else /* !CONFIG_SCHED_AUTOGROUP */ 41 : : 42 : : static inline void autogroup_init(struct task_struct *init_task) { } 43 : : static inline void autogroup_free(struct task_group *tg) { } 44 : : static inline bool task_group_is_autogroup(struct task_group *tg) 45 : : { 46 : : return 0; 47 : : } 48 : : 49 : : static inline struct task_group * 50 : : autogroup_task_group(struct task_struct *p, struct task_group *tg) 51 : : { 52 : : return tg; 53 : : } 54 : : 55 : : static inline int autogroup_path(struct task_group *tg, char *buf, int buflen) 56 : : { 57 : : return 0; 58 : : } 59 : : 60 : : #endif /* CONFIG_SCHED_AUTOGROUP */