mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
![Ingo Molnar](/assets/img/avatar_default.png)
We are going to split <linux/sched/autogroup.h> out of <linux/sched.h>, which will have to be picked up from other headers and a couple of .c files. Create a trivial placeholder <linux/sched/autogroup.h> file that just maps to <linux/sched.h> to make this patch obviously correct and bisectable. Include the new header in the files that are going to need it. Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
65 lines
1.5 KiB
C
65 lines
1.5 KiB
C
#ifdef CONFIG_SCHED_AUTOGROUP
|
|
|
|
#include <linux/kref.h>
|
|
#include <linux/rwsem.h>
|
|
#include <linux/sched/autogroup.h>
|
|
|
|
struct autogroup {
|
|
/*
|
|
* reference doesn't mean how many thread attach to this
|
|
* autogroup now. It just stands for the number of task
|
|
* could use this autogroup.
|
|
*/
|
|
struct kref kref;
|
|
struct task_group *tg;
|
|
struct rw_semaphore lock;
|
|
unsigned long id;
|
|
int nice;
|
|
};
|
|
|
|
extern void autogroup_init(struct task_struct *init_task);
|
|
extern void autogroup_free(struct task_group *tg);
|
|
|
|
static inline bool task_group_is_autogroup(struct task_group *tg)
|
|
{
|
|
return !!tg->autogroup;
|
|
}
|
|
|
|
extern bool task_wants_autogroup(struct task_struct *p, struct task_group *tg);
|
|
|
|
static inline struct task_group *
|
|
autogroup_task_group(struct task_struct *p, struct task_group *tg)
|
|
{
|
|
int enabled = READ_ONCE(sysctl_sched_autogroup_enabled);
|
|
|
|
if (enabled && task_wants_autogroup(p, tg))
|
|
return p->signal->autogroup->tg;
|
|
|
|
return tg;
|
|
}
|
|
|
|
extern int autogroup_path(struct task_group *tg, char *buf, int buflen);
|
|
|
|
#else /* !CONFIG_SCHED_AUTOGROUP */
|
|
|
|
static inline void autogroup_init(struct task_struct *init_task) { }
|
|
static inline void autogroup_free(struct task_group *tg) { }
|
|
static inline bool task_group_is_autogroup(struct task_group *tg)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline struct task_group *
|
|
autogroup_task_group(struct task_struct *p, struct task_group *tg)
|
|
{
|
|
return tg;
|
|
}
|
|
|
|
#ifdef CONFIG_SCHED_DEBUG
|
|
static inline int autogroup_path(struct task_group *tg, char *buf, int buflen)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
#endif /* CONFIG_SCHED_AUTOGROUP */
|