aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sched.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r--include/linux/sched.h66
1 files changed, 51 insertions, 15 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index d0036e52a24a..d747f948b34e 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -21,7 +21,8 @@
21#define CLONE_DETACHED 0x00400000 /* Unused, ignored */ 21#define CLONE_DETACHED 0x00400000 /* Unused, ignored */
22#define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */ 22#define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */
23#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */ 23#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
24#define CLONE_STOPPED 0x02000000 /* Start in stopped state */ 24/* 0x02000000 was previously the unused CLONE_STOPPED (Start in stopped state)
25 and is now available for re-use. */
25#define CLONE_NEWUTS 0x04000000 /* New utsname group? */ 26#define CLONE_NEWUTS 0x04000000 /* New utsname group? */
26#define CLONE_NEWIPC 0x08000000 /* New ipcs */ 27#define CLONE_NEWIPC 0x08000000 /* New ipcs */
27#define CLONE_NEWUSER 0x10000000 /* New user namespace */ 28#define CLONE_NEWUSER 0x10000000 /* New user namespace */
@@ -70,7 +71,6 @@ struct sched_param {
70#include <linux/smp.h> 71#include <linux/smp.h>
71#include <linux/sem.h> 72#include <linux/sem.h>
72#include <linux/signal.h> 73#include <linux/signal.h>
73#include <linux/path.h>
74#include <linux/compiler.h> 74#include <linux/compiler.h>
75#include <linux/completion.h> 75#include <linux/completion.h>
76#include <linux/pid.h> 76#include <linux/pid.h>
@@ -88,7 +88,6 @@ struct sched_param {
88#include <linux/timer.h> 88#include <linux/timer.h>
89#include <linux/hrtimer.h> 89#include <linux/hrtimer.h>
90#include <linux/task_io_accounting.h> 90#include <linux/task_io_accounting.h>
91#include <linux/kobject.h>
92#include <linux/latencytop.h> 91#include <linux/latencytop.h>
93#include <linux/cred.h> 92#include <linux/cred.h>
94 93
@@ -143,7 +142,7 @@ extern unsigned long nr_iowait_cpu(int cpu);
143extern unsigned long this_cpu_load(void); 142extern unsigned long this_cpu_load(void);
144 143
145 144
146extern void calc_global_load(void); 145extern void calc_global_load(unsigned long ticks);
147 146
148extern unsigned long get_parent_ip(unsigned long addr); 147extern unsigned long get_parent_ip(unsigned long addr);
149 148
@@ -316,6 +315,7 @@ extern int proc_dowatchdog_thresh(struct ctl_table *table, int write,
316 size_t *lenp, loff_t *ppos); 315 size_t *lenp, loff_t *ppos);
317extern unsigned int softlockup_panic; 316extern unsigned int softlockup_panic;
318extern int softlockup_thresh; 317extern int softlockup_thresh;
318void lockup_detector_init(void);
319#else 319#else
320static inline void touch_softlockup_watchdog(void) 320static inline void touch_softlockup_watchdog(void)
321{ 321{
@@ -326,6 +326,9 @@ static inline void touch_softlockup_watchdog_sync(void)
326static inline void touch_all_softlockup_watchdogs(void) 326static inline void touch_all_softlockup_watchdogs(void)
327{ 327{
328} 328}
329static inline void lockup_detector_init(void)
330{
331}
329#endif 332#endif
330 333
331#ifdef CONFIG_DETECT_HUNG_TASK 334#ifdef CONFIG_DETECT_HUNG_TASK
@@ -431,6 +434,7 @@ extern int get_dumpable(struct mm_struct *mm);
431#endif 434#endif
432 /* leave room for more dump flags */ 435 /* leave room for more dump flags */
433#define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */ 436#define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */
437#define MMF_VM_HUGEPAGE 17 /* set when VM_HUGEPAGE is set on vma */
434 438
435#define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK) 439#define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK)
436 440
@@ -509,6 +513,8 @@ struct thread_group_cputimer {
509 spinlock_t lock; 513 spinlock_t lock;
510}; 514};
511 515
516struct autogroup;
517
512/* 518/*
513 * NOTE! "signal_struct" does not have it's own 519 * NOTE! "signal_struct" does not have it's own
514 * locking, because a shared signal_struct always 520 * locking, because a shared signal_struct always
@@ -576,6 +582,9 @@ struct signal_struct {
576 582
577 struct tty_struct *tty; /* NULL if no tty */ 583 struct tty_struct *tty; /* NULL if no tty */
578 584
585#ifdef CONFIG_SCHED_AUTOGROUP
586 struct autogroup *autogroup;
587#endif
579 /* 588 /*
580 * Cumulative resource counters for dead threads in the group, 589 * Cumulative resource counters for dead threads in the group,
581 * and for reaped dead child processes forked by this group. 590 * and for reaped dead child processes forked by this group.
@@ -626,6 +635,8 @@ struct signal_struct {
626 635
627 int oom_adj; /* OOM kill score adjustment (bit shift) */ 636 int oom_adj; /* OOM kill score adjustment (bit shift) */
628 int oom_score_adj; /* OOM kill score adjustment */ 637 int oom_score_adj; /* OOM kill score adjustment */
638 int oom_score_adj_min; /* OOM kill score adjustment minimum value.
639 * Only settable by CAP_SYS_RESOURCE. */
629 640
630 struct mutex cred_guard_mutex; /* guard against foreign influences on 641 struct mutex cred_guard_mutex; /* guard against foreign influences on
631 * credential calculations 642 * credential calculations
@@ -676,7 +687,7 @@ struct user_struct {
676 atomic_t fanotify_listeners; 687 atomic_t fanotify_listeners;
677#endif 688#endif
678#ifdef CONFIG_EPOLL 689#ifdef CONFIG_EPOLL
679 atomic_t epoll_watches; /* The number of file descriptors currently watched */ 690 atomic_long_t epoll_watches; /* The number of file descriptors currently watched */
680#endif 691#endif
681#ifdef CONFIG_POSIX_MQUEUE 692#ifdef CONFIG_POSIX_MQUEUE
682 /* protected by mq_lock */ 693 /* protected by mq_lock */
@@ -862,6 +873,7 @@ struct sched_group {
862 * single CPU. 873 * single CPU.
863 */ 874 */
864 unsigned int cpu_power, cpu_power_orig; 875 unsigned int cpu_power, cpu_power_orig;
876 unsigned int group_weight;
865 877
866 /* 878 /*
867 * The CPUs this group covers. 879 * The CPUs this group covers.
@@ -1228,13 +1240,18 @@ struct task_struct {
1228#ifdef CONFIG_TREE_PREEMPT_RCU 1240#ifdef CONFIG_TREE_PREEMPT_RCU
1229 struct rcu_node *rcu_blocked_node; 1241 struct rcu_node *rcu_blocked_node;
1230#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ 1242#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
1243#ifdef CONFIG_RCU_BOOST
1244 struct rt_mutex *rcu_boost_mutex;
1245#endif /* #ifdef CONFIG_RCU_BOOST */
1231 1246
1232#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) 1247#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
1233 struct sched_info sched_info; 1248 struct sched_info sched_info;
1234#endif 1249#endif
1235 1250
1236 struct list_head tasks; 1251 struct list_head tasks;
1252#ifdef CONFIG_SMP
1237 struct plist_node pushable_tasks; 1253 struct plist_node pushable_tasks;
1254#endif
1238 1255
1239 struct mm_struct *mm, *active_mm; 1256 struct mm_struct *mm, *active_mm;
1240#if defined(SPLIT_RSS_COUNTING) 1257#if defined(SPLIT_RSS_COUNTING)
@@ -1758,7 +1775,8 @@ extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *
1758#ifdef CONFIG_PREEMPT_RCU 1775#ifdef CONFIG_PREEMPT_RCU
1759 1776
1760#define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */ 1777#define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */
1761#define RCU_READ_UNLOCK_NEED_QS (1 << 1) /* RCU core needs CPU response. */ 1778#define RCU_READ_UNLOCK_BOOSTED (1 << 1) /* boosted while in RCU read-side. */
1779#define RCU_READ_UNLOCK_NEED_QS (1 << 2) /* RCU core needs CPU response. */
1762 1780
1763static inline void rcu_copy_process(struct task_struct *p) 1781static inline void rcu_copy_process(struct task_struct *p)
1764{ 1782{
@@ -1766,7 +1784,10 @@ static inline void rcu_copy_process(struct task_struct *p)
1766 p->rcu_read_unlock_special = 0; 1784 p->rcu_read_unlock_special = 0;
1767#ifdef CONFIG_TREE_PREEMPT_RCU 1785#ifdef CONFIG_TREE_PREEMPT_RCU
1768 p->rcu_blocked_node = NULL; 1786 p->rcu_blocked_node = NULL;
1769#endif 1787#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
1788#ifdef CONFIG_RCU_BOOST
1789 p->rcu_boost_mutex = NULL;
1790#endif /* #ifdef CONFIG_RCU_BOOST */
1770 INIT_LIST_HEAD(&p->rcu_node_entry); 1791 INIT_LIST_HEAD(&p->rcu_node_entry);
1771} 1792}
1772 1793
@@ -1871,14 +1892,11 @@ extern void sched_clock_idle_sleep_event(void);
1871extern void sched_clock_idle_wakeup_event(u64 delta_ns); 1892extern void sched_clock_idle_wakeup_event(u64 delta_ns);
1872 1893
1873#ifdef CONFIG_HOTPLUG_CPU 1894#ifdef CONFIG_HOTPLUG_CPU
1874extern void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p);
1875extern void idle_task_exit(void); 1895extern void idle_task_exit(void);
1876#else 1896#else
1877static inline void idle_task_exit(void) {} 1897static inline void idle_task_exit(void) {}
1878#endif 1898#endif
1879 1899
1880extern void sched_idle_next(void);
1881
1882#if defined(CONFIG_NO_HZ) && defined(CONFIG_SMP) 1900#if defined(CONFIG_NO_HZ) && defined(CONFIG_SMP)
1883extern void wake_up_idle_cpu(int cpu); 1901extern void wake_up_idle_cpu(int cpu);
1884#else 1902#else
@@ -1888,8 +1906,6 @@ static inline void wake_up_idle_cpu(int cpu) { }
1888extern unsigned int sysctl_sched_latency; 1906extern unsigned int sysctl_sched_latency;
1889extern unsigned int sysctl_sched_min_granularity; 1907extern unsigned int sysctl_sched_min_granularity;
1890extern unsigned int sysctl_sched_wakeup_granularity; 1908extern unsigned int sysctl_sched_wakeup_granularity;
1891extern unsigned int sysctl_sched_shares_ratelimit;
1892extern unsigned int sysctl_sched_shares_thresh;
1893extern unsigned int sysctl_sched_child_runs_first; 1909extern unsigned int sysctl_sched_child_runs_first;
1894 1910
1895enum sched_tunable_scaling { 1911enum sched_tunable_scaling {
@@ -1905,6 +1921,7 @@ extern unsigned int sysctl_sched_migration_cost;
1905extern unsigned int sysctl_sched_nr_migrate; 1921extern unsigned int sysctl_sched_nr_migrate;
1906extern unsigned int sysctl_sched_time_avg; 1922extern unsigned int sysctl_sched_time_avg;
1907extern unsigned int sysctl_timer_migration; 1923extern unsigned int sysctl_timer_migration;
1924extern unsigned int sysctl_sched_shares_window;
1908 1925
1909int sched_proc_update_handler(struct ctl_table *table, int write, 1926int sched_proc_update_handler(struct ctl_table *table, int write,
1910 void __user *buffer, size_t *length, 1927 void __user *buffer, size_t *length,
@@ -1930,6 +1947,24 @@ int sched_rt_handler(struct ctl_table *table, int write,
1930 1947
1931extern unsigned int sysctl_sched_compat_yield; 1948extern unsigned int sysctl_sched_compat_yield;
1932 1949
1950#ifdef CONFIG_SCHED_AUTOGROUP
1951extern unsigned int sysctl_sched_autogroup_enabled;
1952
1953extern void sched_autogroup_create_attach(struct task_struct *p);
1954extern void sched_autogroup_detach(struct task_struct *p);
1955extern void sched_autogroup_fork(struct signal_struct *sig);
1956extern void sched_autogroup_exit(struct signal_struct *sig);
1957#ifdef CONFIG_PROC_FS
1958extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_file *m);
1959extern int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice);
1960#endif
1961#else
1962static inline void sched_autogroup_create_attach(struct task_struct *p) { }
1963static inline void sched_autogroup_detach(struct task_struct *p) { }
1964static inline void sched_autogroup_fork(struct signal_struct *sig) { }
1965static inline void sched_autogroup_exit(struct signal_struct *sig) { }
1966#endif
1967
1933#ifdef CONFIG_RT_MUTEXES 1968#ifdef CONFIG_RT_MUTEXES
1934extern int rt_mutex_getprio(struct task_struct *p); 1969extern int rt_mutex_getprio(struct task_struct *p);
1935extern void rt_mutex_setprio(struct task_struct *p, int prio); 1970extern void rt_mutex_setprio(struct task_struct *p, int prio);
@@ -1948,9 +1983,10 @@ extern int task_nice(const struct task_struct *p);
1948extern int can_nice(const struct task_struct *p, const int nice); 1983extern int can_nice(const struct task_struct *p, const int nice);
1949extern int task_curr(const struct task_struct *p); 1984extern int task_curr(const struct task_struct *p);
1950extern int idle_cpu(int cpu); 1985extern int idle_cpu(int cpu);
1951extern int sched_setscheduler(struct task_struct *, int, struct sched_param *); 1986extern int sched_setscheduler(struct task_struct *, int,
1987 const struct sched_param *);
1952extern int sched_setscheduler_nocheck(struct task_struct *, int, 1988extern int sched_setscheduler_nocheck(struct task_struct *, int,
1953 struct sched_param *); 1989 const struct sched_param *);
1954extern struct task_struct *idle_task(int cpu); 1990extern struct task_struct *idle_task(int cpu);
1955extern struct task_struct *curr_task(int cpu); 1991extern struct task_struct *curr_task(int cpu);
1956extern void set_curr_task(int cpu, struct task_struct *p); 1992extern void set_curr_task(int cpu, struct task_struct *p);
@@ -2477,7 +2513,7 @@ extern void normalize_rt_tasks(void);
2477 2513
2478#ifdef CONFIG_CGROUP_SCHED 2514#ifdef CONFIG_CGROUP_SCHED
2479 2515
2480extern struct task_group init_task_group; 2516extern struct task_group root_task_group;
2481 2517
2482extern struct task_group *sched_create_group(struct task_group *parent); 2518extern struct task_group *sched_create_group(struct task_group *parent);
2483extern void sched_destroy_group(struct task_group *tg); 2519extern void sched_destroy_group(struct task_group *tg);