diff options
Diffstat (limited to 'include/linux/sched.h')
| -rw-r--r-- | include/linux/sched.h | 66 | 
1 files changed, 49 insertions, 17 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 0dd42a02df2..b96ff1e43ad 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -109,6 +109,8 @@ extern void update_cpu_load_nohz(void);  extern unsigned long get_parent_ip(unsigned long addr); +extern void dump_cpu_task(int cpu); +  struct seq_file;  struct cfs_rq;  struct task_group; @@ -434,13 +436,28 @@ struct cpu_itimer {  };  /** + * struct cputime - snaphsot of system and user cputime + * @utime: time spent in user mode + * @stime: time spent in system mode + * + * Gathers a generic snapshot of user and system time. + */ +struct cputime { +	cputime_t utime; +	cputime_t stime; +}; + +/**   * struct task_cputime - collected CPU time counts   * @utime:		time spent in user mode, in &cputime_t units   * @stime:		time spent in kernel mode, in &cputime_t units   * @sum_exec_runtime:	total time spent on the CPU, in nanoseconds   * - * This structure groups together three kinds of CPU time that are - * tracked for threads and thread groups.  Most things considering + * This is an extension of struct cputime that includes the total runtime + * spent by the task from the scheduler point of view. + * + * As a result, this structure groups together three kinds of CPU time + * that are tracked for threads and thread groups.  Most things considering   * CPU time want to group these counts together and treat all three   * of them in parallel.   */ @@ -581,7 +598,7 @@ struct signal_struct {  	cputime_t gtime;  	cputime_t cgtime;  #ifndef CONFIG_VIRT_CPU_ACCOUNTING -	cputime_t prev_utime, prev_stime; +	struct cputime prev_cputime;  #endif  	unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;  	unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; @@ -631,9 +648,10 @@ struct signal_struct {  	struct rw_semaphore group_rwsem;  #endif -	int oom_score_adj;	/* OOM kill score adjustment */ -	int oom_score_adj_min;	/* OOM kill score adjustment minimum value. -				 * Only settable by CAP_SYS_RESOURCE. */ +	oom_flags_t oom_flags; +	short oom_score_adj;		/* OOM kill score adjustment */ +	short oom_score_adj_min;	/* OOM kill score adjustment min value. +					 * Only settable by CAP_SYS_RESOURCE. */  	struct mutex cred_guard_mutex;	/* guard against foreign influences on  					 * credential calculations @@ -1061,6 +1079,7 @@ struct sched_class {  #ifdef CONFIG_SMP  	int  (*select_task_rq)(struct task_struct *p, int sd_flag, int flags); +	void (*migrate_task_rq)(struct task_struct *p, int next_cpu);  	void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);  	void (*post_schedule) (struct rq *this_rq); @@ -1095,6 +1114,18 @@ struct load_weight {  	unsigned long weight, inv_weight;  }; +struct sched_avg { +	/* +	 * These sums represent an infinite geometric series and so are bound +	 * above by 1024/(1-y).  Thus we only need a u32 to store them for for all +	 * choices of y < 1-2^(-32)*1024. +	 */ +	u32 runnable_avg_sum, runnable_avg_period; +	u64 last_runnable_update; +	s64 decay_count; +	unsigned long load_avg_contrib; +}; +  #ifdef CONFIG_SCHEDSTATS  struct sched_statistics {  	u64			wait_start; @@ -1155,6 +1186,15 @@ struct sched_entity {  	/* rq "owned" by this entity/group: */  	struct cfs_rq		*my_q;  #endif +/* + * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be + * removed when useful for applications beyond shares distribution (e.g. + * load-balance). + */ +#if defined(CONFIG_SMP) && defined(CONFIG_FAIR_GROUP_SCHED) +	/* Per-entity load-tracking */ +	struct sched_avg	avg; +#endif  };  struct sched_rt_entity { @@ -1318,7 +1358,7 @@ struct task_struct {  	cputime_t utime, stime, utimescaled, stimescaled;  	cputime_t gtime;  #ifndef CONFIG_VIRT_CPU_ACCOUNTING -	cputime_t prev_utime, prev_stime; +	struct cputime prev_cputime;  #endif  	unsigned long nvcsw, nivcsw; /* context switch counts */  	struct timespec start_time; 		/* monotonic time */ @@ -1729,8 +1769,8 @@ static inline void put_task_struct(struct task_struct *t)  		__put_task_struct(t);  } -extern void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st); -extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st); +extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); +extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st);  /*   * Per process flags @@ -1844,14 +1884,6 @@ static inline void rcu_copy_process(struct task_struct *p)  #endif -static inline void rcu_switch(struct task_struct *prev, -			      struct task_struct *next) -{ -#ifdef CONFIG_RCU_USER_QS -	rcu_user_hooks_switch(prev, next); -#endif -} -  static inline void tsk_restore_flags(struct task_struct *task,  				unsigned long orig_flags, unsigned long flags)  {  |