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.h241
1 files changed, 202 insertions, 39 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 38b4791e6a5..a06fc89cf6e 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -73,6 +73,7 @@ struct sched_param {
73#include <linux/seccomp.h> 73#include <linux/seccomp.h>
74#include <linux/rcupdate.h> 74#include <linux/rcupdate.h>
75#include <linux/futex.h> 75#include <linux/futex.h>
76#include <linux/rtmutex.h>
76 77
77#include <linux/time.h> 78#include <linux/time.h>
78#include <linux/param.h> 79#include <linux/param.h>
@@ -83,6 +84,7 @@ struct sched_param {
83#include <asm/processor.h> 84#include <asm/processor.h>
84 85
85struct exec_domain; 86struct exec_domain;
87struct futex_pi_state;
86 88
87/* 89/*
88 * List of flags we want to share for kernel threads, 90 * List of flags we want to share for kernel threads,
@@ -123,6 +125,7 @@ extern unsigned long nr_running(void);
123extern unsigned long nr_uninterruptible(void); 125extern unsigned long nr_uninterruptible(void);
124extern unsigned long nr_active(void); 126extern unsigned long nr_active(void);
125extern unsigned long nr_iowait(void); 127extern unsigned long nr_iowait(void);
128extern unsigned long weighted_cpuload(const int cpu);
126 129
127 130
128/* 131/*
@@ -145,6 +148,7 @@ extern unsigned long nr_iowait(void);
145#define EXIT_DEAD 32 148#define EXIT_DEAD 32
146/* in tsk->state again */ 149/* in tsk->state again */
147#define TASK_NONINTERACTIVE 64 150#define TASK_NONINTERACTIVE 64
151#define TASK_DEAD 128
148 152
149#define __set_task_state(tsk, state_value) \ 153#define __set_task_state(tsk, state_value) \
150 do { (tsk)->state = (state_value); } while (0) 154 do { (tsk)->state = (state_value); } while (0)
@@ -181,11 +185,11 @@ extern unsigned long nr_iowait(void);
181extern rwlock_t tasklist_lock; 185extern rwlock_t tasklist_lock;
182extern spinlock_t mmlist_lock; 186extern spinlock_t mmlist_lock;
183 187
184typedef struct task_struct task_t; 188struct task_struct;
185 189
186extern void sched_init(void); 190extern void sched_init(void);
187extern void sched_init_smp(void); 191extern void sched_init_smp(void);
188extern void init_idle(task_t *idle, int cpu); 192extern void init_idle(struct task_struct *idle, int cpu);
189 193
190extern cpumask_t nohz_cpu_mask; 194extern cpumask_t nohz_cpu_mask;
191 195
@@ -358,6 +362,14 @@ struct sighand_struct {
358 spinlock_t siglock; 362 spinlock_t siglock;
359}; 363};
360 364
365struct pacct_struct {
366 int ac_flag;
367 long ac_exitcode;
368 unsigned long ac_mem;
369 cputime_t ac_utime, ac_stime;
370 unsigned long ac_minflt, ac_majflt;
371};
372
361/* 373/*
362 * NOTE! "signal_struct" does not have it's own 374 * NOTE! "signal_struct" does not have it's own
363 * locking, because a shared signal_struct always 375 * locking, because a shared signal_struct always
@@ -372,7 +384,7 @@ struct signal_struct {
372 wait_queue_head_t wait_chldexit; /* for wait4() */ 384 wait_queue_head_t wait_chldexit; /* for wait4() */
373 385
374 /* current thread group signal load-balancing target: */ 386 /* current thread group signal load-balancing target: */
375 task_t *curr_target; 387 struct task_struct *curr_target;
376 388
377 /* shared signal handling: */ 389 /* shared signal handling: */
378 struct sigpending shared_pending; 390 struct sigpending shared_pending;
@@ -449,6 +461,13 @@ struct signal_struct {
449 struct key *session_keyring; /* keyring inherited over fork */ 461 struct key *session_keyring; /* keyring inherited over fork */
450 struct key *process_keyring; /* keyring private to this process */ 462 struct key *process_keyring; /* keyring private to this process */
451#endif 463#endif
464#ifdef CONFIG_BSD_PROCESS_ACCT
465 struct pacct_struct pacct; /* per-process accounting information */
466#endif
467#ifdef CONFIG_TASKSTATS
468 spinlock_t stats_lock;
469 struct taskstats *stats;
470#endif
452}; 471};
453 472
454/* Context switch must be unlocked if interrupts are to be enabled */ 473/* Context switch must be unlocked if interrupts are to be enabled */
@@ -483,8 +502,11 @@ struct signal_struct {
483 502
484#define MAX_PRIO (MAX_RT_PRIO + 40) 503#define MAX_PRIO (MAX_RT_PRIO + 40)
485 504
486#define rt_task(p) (unlikely((p)->prio < MAX_RT_PRIO)) 505#define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO)
506#define rt_task(p) rt_prio((p)->prio)
487#define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) 507#define batch_task(p) (unlikely((p)->policy == SCHED_BATCH))
508#define is_rt_policy(p) ((p) != SCHED_NORMAL && (p) != SCHED_BATCH)
509#define has_rt_policy(p) unlikely(is_rt_policy((p)->policy))
488 510
489/* 511/*
490 * Some day this will be a full-fledged user tracking system.. 512 * Some day this will be a full-fledged user tracking system..
@@ -517,11 +539,10 @@ extern struct user_struct *find_user(uid_t);
517extern struct user_struct root_user; 539extern struct user_struct root_user;
518#define INIT_USER (&root_user) 540#define INIT_USER (&root_user)
519 541
520typedef struct prio_array prio_array_t;
521struct backing_dev_info; 542struct backing_dev_info;
522struct reclaim_state; 543struct reclaim_state;
523 544
524#ifdef CONFIG_SCHEDSTATS 545#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
525struct sched_info { 546struct sched_info {
526 /* cumulative counters */ 547 /* cumulative counters */
527 unsigned long cpu_time, /* time spent on the cpu */ 548 unsigned long cpu_time, /* time spent on the cpu */
@@ -532,9 +553,53 @@ struct sched_info {
532 unsigned long last_arrival, /* when we last ran on a cpu */ 553 unsigned long last_arrival, /* when we last ran on a cpu */
533 last_queued; /* when we were last queued to run */ 554 last_queued; /* when we were last queued to run */
534}; 555};
556#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
535 557
558#ifdef CONFIG_SCHEDSTATS
536extern struct file_operations proc_schedstat_operations; 559extern struct file_operations proc_schedstat_operations;
560#endif /* CONFIG_SCHEDSTATS */
561
562#ifdef CONFIG_TASK_DELAY_ACCT
563struct task_delay_info {
564 spinlock_t lock;
565 unsigned int flags; /* Private per-task flags */
566
567 /* For each stat XXX, add following, aligned appropriately
568 *
569 * struct timespec XXX_start, XXX_end;
570 * u64 XXX_delay;
571 * u32 XXX_count;
572 *
573 * Atomicity of updates to XXX_delay, XXX_count protected by
574 * single lock above (split into XXX_lock if contention is an issue).
575 */
576
577 /*
578 * XXX_count is incremented on every XXX operation, the delay
579 * associated with the operation is added to XXX_delay.
580 * XXX_delay contains the accumulated delay time in nanoseconds.
581 */
582 struct timespec blkio_start, blkio_end; /* Shared by blkio, swapin */
583 u64 blkio_delay; /* wait for sync block io completion */
584 u64 swapin_delay; /* wait for swapin block io completion */
585 u32 blkio_count; /* total count of the number of sync block */
586 /* io operations performed */
587 u32 swapin_count; /* total count of the number of swapin block */
588 /* io operations performed */
589};
590#endif /* CONFIG_TASK_DELAY_ACCT */
591
592static inline int sched_info_on(void)
593{
594#ifdef CONFIG_SCHEDSTATS
595 return 1;
596#elif defined(CONFIG_TASK_DELAY_ACCT)
597 extern int delayacct_on;
598 return delayacct_on;
599#else
600 return 0;
537#endif 601#endif
602}
538 603
539enum idle_type 604enum idle_type
540{ 605{
@@ -547,9 +612,9 @@ enum idle_type
547/* 612/*
548 * sched-domains (multiprocessor balancing) declarations: 613 * sched-domains (multiprocessor balancing) declarations:
549 */ 614 */
550#ifdef CONFIG_SMP
551#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */ 615#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */
552 616
617#ifdef CONFIG_SMP
553#define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ 618#define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */
554#define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */ 619#define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */
555#define SD_BALANCE_EXEC 4 /* Balance on exec */ 620#define SD_BALANCE_EXEC 4 /* Balance on exec */
@@ -558,6 +623,11 @@ enum idle_type
558#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */ 623#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */
559#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */ 624#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */
560#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */ 625#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */
626#define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */
627
628#define BALANCE_FOR_POWER ((sched_mc_power_savings || sched_smt_power_savings) \
629 ? SD_POWERSAVINGS_BALANCE : 0)
630
561 631
562struct sched_group { 632struct sched_group {
563 struct sched_group *next; /* Must be a circular list */ 633 struct sched_group *next; /* Must be a circular list */
@@ -627,7 +697,7 @@ struct sched_domain {
627#endif 697#endif
628}; 698};
629 699
630extern void partition_sched_domains(cpumask_t *partition1, 700extern int partition_sched_domains(cpumask_t *partition1,
631 cpumask_t *partition2); 701 cpumask_t *partition2);
632 702
633/* 703/*
@@ -677,7 +747,7 @@ extern int groups_search(struct group_info *group_info, gid_t grp);
677 ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK]) 747 ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK])
678 748
679#ifdef ARCH_HAS_PREFETCH_SWITCH_STACK 749#ifdef ARCH_HAS_PREFETCH_SWITCH_STACK
680extern void prefetch_stack(struct task_struct*); 750extern void prefetch_stack(struct task_struct *t);
681#else 751#else
682static inline void prefetch_stack(struct task_struct *t) { } 752static inline void prefetch_stack(struct task_struct *t) { }
683#endif 753#endif
@@ -693,6 +763,8 @@ enum sleep_type {
693 SLEEP_INTERRUPTED, 763 SLEEP_INTERRUPTED,
694}; 764};
695 765
766struct prio_array;
767
696struct task_struct { 768struct task_struct {
697 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ 769 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
698 struct thread_info *thread_info; 770 struct thread_info *thread_info;
@@ -702,16 +774,20 @@ struct task_struct {
702 774
703 int lock_depth; /* BKL lock depth */ 775 int lock_depth; /* BKL lock depth */
704 776
705#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW) 777#ifdef CONFIG_SMP
778#ifdef __ARCH_WANT_UNLOCKED_CTXSW
706 int oncpu; 779 int oncpu;
707#endif 780#endif
708 int prio, static_prio; 781#endif
782 int load_weight; /* for niceness load balancing purposes */
783 int prio, static_prio, normal_prio;
709 struct list_head run_list; 784 struct list_head run_list;
710 prio_array_t *array; 785 struct prio_array *array;
711 786
712 unsigned short ioprio; 787 unsigned short ioprio;
788#ifdef CONFIG_BLK_DEV_IO_TRACE
713 unsigned int btrace_seq; 789 unsigned int btrace_seq;
714 790#endif
715 unsigned long sleep_avg; 791 unsigned long sleep_avg;
716 unsigned long long timestamp, last_ran; 792 unsigned long long timestamp, last_ran;
717 unsigned long long sched_time; /* sched_clock time spent running */ 793 unsigned long long sched_time; /* sched_clock time spent running */
@@ -721,7 +797,7 @@ struct task_struct {
721 cpumask_t cpus_allowed; 797 cpumask_t cpus_allowed;
722 unsigned int time_slice, first_time_slice; 798 unsigned int time_slice, first_time_slice;
723 799
724#ifdef CONFIG_SCHEDSTATS 800#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
725 struct sched_info sched_info; 801 struct sched_info sched_info;
726#endif 802#endif
727 803
@@ -745,6 +821,11 @@ struct task_struct {
745 unsigned did_exec:1; 821 unsigned did_exec:1;
746 pid_t pid; 822 pid_t pid;
747 pid_t tgid; 823 pid_t tgid;
824
825#ifdef CONFIG_CC_STACKPROTECTOR
826 /* Canary value for the -fstack-protector gcc feature */
827 unsigned long stack_canary;
828#endif
748 /* 829 /*
749 * pointers to (original) parent process, youngest child, younger sibling, 830 * pointers to (original) parent process, youngest child, younger sibling,
750 * older sibling, respectively. (p->father can be replaced with 831 * older sibling, respectively. (p->father can be replaced with
@@ -791,6 +872,15 @@ struct task_struct {
791 struct key *thread_keyring; /* keyring private to this thread */ 872 struct key *thread_keyring; /* keyring private to this thread */
792 unsigned char jit_keyring; /* default keyring to attach requested keys to */ 873 unsigned char jit_keyring; /* default keyring to attach requested keys to */
793#endif 874#endif
875 /*
876 * fpu_counter contains the number of consecutive context switches
877 * that the FPU is used. If this is over a threshold, the lazy fpu
878 * saving becomes unlazy to save the trap. This is an unsigned char
879 * so that after 256 times the counter wraps and the behavior turns
880 * lazy again; this to deal with bursty apps that only use FPU for
881 * a short time
882 */
883 unsigned char fpu_counter;
794 int oomkilladj; /* OOM kill score adjustment (bit shift). */ 884 int oomkilladj; /* OOM kill score adjustment (bit shift). */
795 char comm[TASK_COMM_LEN]; /* executable name excluding path 885 char comm[TASK_COMM_LEN]; /* executable name excluding path
796 - access with [gs]et_task_comm (which lock 886 - access with [gs]et_task_comm (which lock
@@ -798,8 +888,10 @@ struct task_struct {
798 - initialized normally by flush_old_exec */ 888 - initialized normally by flush_old_exec */
799/* file system info */ 889/* file system info */
800 int link_count, total_link_count; 890 int link_count, total_link_count;
891#ifdef CONFIG_SYSVIPC
801/* ipc stuff */ 892/* ipc stuff */
802 struct sysv_sem sysvsem; 893 struct sysv_sem sysvsem;
894#endif
803/* CPU-specific state of this task */ 895/* CPU-specific state of this task */
804 struct thread_struct thread; 896 struct thread_struct thread;
805/* filesystem information */ 897/* filesystem information */
@@ -831,13 +923,43 @@ struct task_struct {
831 u32 self_exec_id; 923 u32 self_exec_id;
832/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */ 924/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */
833 spinlock_t alloc_lock; 925 spinlock_t alloc_lock;
834/* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ 926
835 spinlock_t proc_lock; 927 /* Protection of the PI data structures: */
928 spinlock_t pi_lock;
929
930#ifdef CONFIG_RT_MUTEXES
931 /* PI waiters blocked on a rt_mutex held by this task */
932 struct plist_head pi_waiters;
933 /* Deadlock detection and priority inheritance handling */
934 struct rt_mutex_waiter *pi_blocked_on;
935#endif
836 936
837#ifdef CONFIG_DEBUG_MUTEXES 937#ifdef CONFIG_DEBUG_MUTEXES
838 /* mutex deadlock detection */ 938 /* mutex deadlock detection */
839 struct mutex_waiter *blocked_on; 939 struct mutex_waiter *blocked_on;
840#endif 940#endif
941#ifdef CONFIG_TRACE_IRQFLAGS
942 unsigned int irq_events;
943 int hardirqs_enabled;
944 unsigned long hardirq_enable_ip;
945 unsigned int hardirq_enable_event;
946 unsigned long hardirq_disable_ip;
947 unsigned int hardirq_disable_event;
948 int softirqs_enabled;
949 unsigned long softirq_disable_ip;
950 unsigned int softirq_disable_event;
951 unsigned long softirq_enable_ip;
952 unsigned int softirq_enable_event;
953 int hardirq_context;
954 int softirq_context;
955#endif
956#ifdef CONFIG_LOCKDEP
957# define MAX_LOCK_DEPTH 30UL
958 u64 curr_chain_key;
959 int lockdep_depth;
960 struct held_lock held_locks[MAX_LOCK_DEPTH];
961 unsigned int lockdep_recursion;
962#endif
841 963
842/* journalling filesystem info */ 964/* journalling filesystem info */
843 void *journal_info; 965 void *journal_info;
@@ -845,7 +967,6 @@ struct task_struct {
845/* VM state */ 967/* VM state */
846 struct reclaim_state *reclaim_state; 968 struct reclaim_state *reclaim_state;
847 969
848 struct dentry *proc_dentry;
849 struct backing_dev_info *backing_dev_info; 970 struct backing_dev_info *backing_dev_info;
850 971
851 struct io_context *io_context; 972 struct io_context *io_context;
@@ -880,6 +1001,8 @@ struct task_struct {
880#ifdef CONFIG_COMPAT 1001#ifdef CONFIG_COMPAT
881 struct compat_robust_list_head __user *compat_robust_list; 1002 struct compat_robust_list_head __user *compat_robust_list;
882#endif 1003#endif
1004 struct list_head pi_state_list;
1005 struct futex_pi_state *pi_state_cache;
883 1006
884 atomic_t fs_excl; /* holding fs exclusive resources */ 1007 atomic_t fs_excl; /* holding fs exclusive resources */
885 struct rcu_head rcu; 1008 struct rcu_head rcu;
@@ -888,6 +1011,9 @@ struct task_struct {
888 * cache last used pipe for splice 1011 * cache last used pipe for splice
889 */ 1012 */
890 struct pipe_inode_info *splice_pipe; 1013 struct pipe_inode_info *splice_pipe;
1014#ifdef CONFIG_TASK_DELAY_ACCT
1015 struct task_delay_info *delays;
1016#endif
891}; 1017};
892 1018
893static inline pid_t process_group(struct task_struct *tsk) 1019static inline pid_t process_group(struct task_struct *tsk)
@@ -908,6 +1034,16 @@ static inline int pid_alive(struct task_struct *p)
908 return p->pids[PIDTYPE_PID].pid != NULL; 1034 return p->pids[PIDTYPE_PID].pid != NULL;
909} 1035}
910 1036
1037/**
1038 * is_init - check if a task structure is the first user space
1039 * task the kernel created.
1040 * @p: Task structure to be checked.
1041 */
1042static inline int is_init(struct task_struct *tsk)
1043{
1044 return tsk->pid == 1;
1045}
1046
911extern void free_task(struct task_struct *tsk); 1047extern void free_task(struct task_struct *tsk);
912#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) 1048#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
913 1049
@@ -926,7 +1062,6 @@ static inline void put_task_struct(struct task_struct *t)
926 /* Not implemented yet, only for 486*/ 1062 /* Not implemented yet, only for 486*/
927#define PF_STARTING 0x00000002 /* being created */ 1063#define PF_STARTING 0x00000002 /* being created */
928#define PF_EXITING 0x00000004 /* getting shut down */ 1064#define PF_EXITING 0x00000004 /* getting shut down */
929#define PF_DEAD 0x00000008 /* Dead */
930#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ 1065#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */
931#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ 1066#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */
932#define PF_DUMPCORE 0x00000200 /* dumped core */ 1067#define PF_DUMPCORE 0x00000200 /* dumped core */
@@ -947,6 +1082,7 @@ static inline void put_task_struct(struct task_struct *t)
947#define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ 1082#define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */
948#define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ 1083#define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */
949#define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ 1084#define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */
1085#define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */
950 1086
951/* 1087/*
952 * Only the _current_ task can read/write to tsk->flags, but other 1088 * Only the _current_ task can read/write to tsk->flags, but other
@@ -974,9 +1110,9 @@ static inline void put_task_struct(struct task_struct *t)
974#define used_math() tsk_used_math(current) 1110#define used_math() tsk_used_math(current)
975 1111
976#ifdef CONFIG_SMP 1112#ifdef CONFIG_SMP
977extern int set_cpus_allowed(task_t *p, cpumask_t new_mask); 1113extern int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask);
978#else 1114#else
979static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask) 1115static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
980{ 1116{
981 if (!cpu_isset(0, new_mask)) 1117 if (!cpu_isset(0, new_mask))
982 return -EINVAL; 1118 return -EINVAL;
@@ -985,7 +1121,8 @@ static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
985#endif 1121#endif
986 1122
987extern unsigned long long sched_clock(void); 1123extern unsigned long long sched_clock(void);
988extern unsigned long long current_sched_time(const task_t *current_task); 1124extern unsigned long long
1125current_sched_time(const struct task_struct *current_task);
989 1126
990/* sched_exec is called by processes performing an exec */ 1127/* sched_exec is called by processes performing an exec */
991#ifdef CONFIG_SMP 1128#ifdef CONFIG_SMP
@@ -1001,16 +1138,29 @@ static inline void idle_task_exit(void) {}
1001#endif 1138#endif
1002 1139
1003extern void sched_idle_next(void); 1140extern void sched_idle_next(void);
1004extern void set_user_nice(task_t *p, long nice); 1141
1005extern int task_prio(const task_t *p); 1142#ifdef CONFIG_RT_MUTEXES
1006extern int task_nice(const task_t *p); 1143extern int rt_mutex_getprio(struct task_struct *p);
1007extern int can_nice(const task_t *p, const int nice); 1144extern void rt_mutex_setprio(struct task_struct *p, int prio);
1008extern int task_curr(const task_t *p); 1145extern void rt_mutex_adjust_pi(struct task_struct *p);
1146#else
1147static inline int rt_mutex_getprio(struct task_struct *p)
1148{
1149 return p->normal_prio;
1150}
1151# define rt_mutex_adjust_pi(p) do { } while (0)
1152#endif
1153
1154extern void set_user_nice(struct task_struct *p, long nice);
1155extern int task_prio(const struct task_struct *p);
1156extern int task_nice(const struct task_struct *p);
1157extern int can_nice(const struct task_struct *p, const int nice);
1158extern int task_curr(const struct task_struct *p);
1009extern int idle_cpu(int cpu); 1159extern int idle_cpu(int cpu);
1010extern int sched_setscheduler(struct task_struct *, int, struct sched_param *); 1160extern int sched_setscheduler(struct task_struct *, int, struct sched_param *);
1011extern task_t *idle_task(int cpu); 1161extern struct task_struct *idle_task(int cpu);
1012extern task_t *curr_task(int cpu); 1162extern struct task_struct *curr_task(int cpu);
1013extern void set_curr_task(int cpu, task_t *p); 1163extern void set_curr_task(int cpu, struct task_struct *p);
1014 1164
1015void yield(void); 1165void yield(void);
1016 1166
@@ -1056,7 +1206,7 @@ extern void switch_uid(struct user_struct *);
1056 1206
1057#include <asm/current.h> 1207#include <asm/current.h>
1058 1208
1059extern void do_timer(struct pt_regs *); 1209extern void do_timer(unsigned long ticks);
1060 1210
1061extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state)); 1211extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state));
1062extern int FASTCALL(wake_up_process(struct task_struct * tsk)); 1212extern int FASTCALL(wake_up_process(struct task_struct * tsk));
@@ -1067,8 +1217,8 @@ extern void FASTCALL(wake_up_new_task(struct task_struct * tsk,
1067#else 1217#else
1068 static inline void kick_process(struct task_struct *tsk) { } 1218 static inline void kick_process(struct task_struct *tsk) { }
1069#endif 1219#endif
1070extern void FASTCALL(sched_fork(task_t * p, int clone_flags)); 1220extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags));
1071extern void FASTCALL(sched_exit(task_t * p)); 1221extern void FASTCALL(sched_exit(struct task_struct * p));
1072 1222
1073extern int in_group_p(gid_t); 1223extern int in_group_p(gid_t);
1074extern int in_egroup_p(gid_t); 1224extern int in_egroup_p(gid_t);
@@ -1101,7 +1251,7 @@ extern int force_sig_info(int, struct siginfo *, struct task_struct *);
1101extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp); 1251extern int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp);
1102extern int kill_pg_info(int, struct siginfo *, pid_t); 1252extern int kill_pg_info(int, struct siginfo *, pid_t);
1103extern int kill_proc_info(int, struct siginfo *, pid_t); 1253extern int kill_proc_info(int, struct siginfo *, pid_t);
1104extern int kill_proc_info_as_uid(int, struct siginfo *, pid_t, uid_t, uid_t); 1254extern int kill_proc_info_as_uid(int, struct siginfo *, pid_t, uid_t, uid_t, u32);
1105extern void do_notify_parent(struct task_struct *, int); 1255extern void do_notify_parent(struct task_struct *, int);
1106extern void force_sig(int, struct task_struct *); 1256extern void force_sig(int, struct task_struct *);
1107extern void force_sig_specific(int, struct task_struct *); 1257extern void force_sig_specific(int, struct task_struct *);
@@ -1173,17 +1323,17 @@ extern NORET_TYPE void do_group_exit(int);
1173extern void daemonize(const char *, ...); 1323extern void daemonize(const char *, ...);
1174extern int allow_signal(int); 1324extern int allow_signal(int);
1175extern int disallow_signal(int); 1325extern int disallow_signal(int);
1176extern task_t *child_reaper; 1326extern struct task_struct *child_reaper;
1177 1327
1178extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *); 1328extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *);
1179extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *); 1329extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
1180task_t *fork_idle(int); 1330struct task_struct *fork_idle(int);
1181 1331
1182extern void set_task_comm(struct task_struct *tsk, char *from); 1332extern void set_task_comm(struct task_struct *tsk, char *from);
1183extern void get_task_comm(char *to, struct task_struct *tsk); 1333extern void get_task_comm(char *to, struct task_struct *tsk);
1184 1334
1185#ifdef CONFIG_SMP 1335#ifdef CONFIG_SMP
1186extern void wait_task_inactive(task_t * p); 1336extern void wait_task_inactive(struct task_struct * p);
1187#else 1337#else
1188#define wait_task_inactive(p) do { } while (0) 1338#define wait_task_inactive(p) do { } while (0)
1189#endif 1339#endif
@@ -1209,13 +1359,13 @@ extern void wait_task_inactive(task_t * p);
1209/* de_thread depends on thread_group_leader not being a pid based check */ 1359/* de_thread depends on thread_group_leader not being a pid based check */
1210#define thread_group_leader(p) (p == p->group_leader) 1360#define thread_group_leader(p) (p == p->group_leader)
1211 1361
1212static inline task_t *next_thread(const task_t *p) 1362static inline struct task_struct *next_thread(const struct task_struct *p)
1213{ 1363{
1214 return list_entry(rcu_dereference(p->thread_group.next), 1364 return list_entry(rcu_dereference(p->thread_group.next),
1215 task_t, thread_group); 1365 struct task_struct, thread_group);
1216} 1366}
1217 1367
1218static inline int thread_group_empty(task_t *p) 1368static inline int thread_group_empty(struct task_struct *p)
1219{ 1369{
1220 return list_empty(&p->thread_group); 1370 return list_empty(&p->thread_group);
1221} 1371}
@@ -1400,6 +1550,11 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm)
1400extern long sched_setaffinity(pid_t pid, cpumask_t new_mask); 1550extern long sched_setaffinity(pid_t pid, cpumask_t new_mask);
1401extern long sched_getaffinity(pid_t pid, cpumask_t *mask); 1551extern long sched_getaffinity(pid_t pid, cpumask_t *mask);
1402 1552
1553#include <linux/sysdev.h>
1554extern int sched_mc_power_savings, sched_smt_power_savings;
1555extern struct sysdev_attribute attr_sched_mc_power_savings, attr_sched_smt_power_savings;
1556extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls);
1557
1403extern void normalize_rt_tasks(void); 1558extern void normalize_rt_tasks(void);
1404 1559
1405#ifdef CONFIG_PM 1560#ifdef CONFIG_PM
@@ -1429,6 +1584,14 @@ static inline void freeze(struct task_struct *p)
1429} 1584}
1430 1585
1431/* 1586/*
1587 * Sometimes we may need to cancel the previous 'freeze' request
1588 */
1589static inline void do_not_freeze(struct task_struct *p)
1590{
1591 p->flags &= ~PF_FREEZE;
1592}
1593
1594/*
1432 * Wake up a frozen process 1595 * Wake up a frozen process
1433 */ 1596 */
1434static inline int thaw_process(struct task_struct *p) 1597static inline int thaw_process(struct task_struct *p)