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.h92
1 files changed, 12 insertions, 80 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 78efe7c485ac..46c6f8d5dc06 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -97,7 +97,7 @@ struct sched_param {
97struct exec_domain; 97struct exec_domain;
98struct futex_pi_state; 98struct futex_pi_state;
99struct robust_list_head; 99struct robust_list_head;
100struct bio; 100struct bio_list;
101struct fs_struct; 101struct fs_struct;
102struct bts_context; 102struct bts_context;
103struct perf_event_context; 103struct perf_event_context;
@@ -396,60 +396,6 @@ extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long);
396static inline void arch_pick_mmap_layout(struct mm_struct *mm) {} 396static inline void arch_pick_mmap_layout(struct mm_struct *mm) {}
397#endif 397#endif
398 398
399#if USE_SPLIT_PTLOCKS
400/*
401 * The mm counters are not protected by its page_table_lock,
402 * so must be incremented atomically.
403 */
404#define set_mm_counter(mm, member, value) atomic_long_set(&(mm)->_##member, value)
405#define get_mm_counter(mm, member) ((unsigned long)atomic_long_read(&(mm)->_##member))
406#define add_mm_counter(mm, member, value) atomic_long_add(value, &(mm)->_##member)
407#define inc_mm_counter(mm, member) atomic_long_inc(&(mm)->_##member)
408#define dec_mm_counter(mm, member) atomic_long_dec(&(mm)->_##member)
409
410#else /* !USE_SPLIT_PTLOCKS */
411/*
412 * The mm counters are protected by its page_table_lock,
413 * so can be incremented directly.
414 */
415#define set_mm_counter(mm, member, value) (mm)->_##member = (value)
416#define get_mm_counter(mm, member) ((mm)->_##member)
417#define add_mm_counter(mm, member, value) (mm)->_##member += (value)
418#define inc_mm_counter(mm, member) (mm)->_##member++
419#define dec_mm_counter(mm, member) (mm)->_##member--
420
421#endif /* !USE_SPLIT_PTLOCKS */
422
423#define get_mm_rss(mm) \
424 (get_mm_counter(mm, file_rss) + get_mm_counter(mm, anon_rss))
425#define update_hiwater_rss(mm) do { \
426 unsigned long _rss = get_mm_rss(mm); \
427 if ((mm)->hiwater_rss < _rss) \
428 (mm)->hiwater_rss = _rss; \
429} while (0)
430#define update_hiwater_vm(mm) do { \
431 if ((mm)->hiwater_vm < (mm)->total_vm) \
432 (mm)->hiwater_vm = (mm)->total_vm; \
433} while (0)
434
435static inline unsigned long get_mm_hiwater_rss(struct mm_struct *mm)
436{
437 return max(mm->hiwater_rss, get_mm_rss(mm));
438}
439
440static inline void setmax_mm_hiwater_rss(unsigned long *maxrss,
441 struct mm_struct *mm)
442{
443 unsigned long hiwater_rss = get_mm_hiwater_rss(mm);
444
445 if (*maxrss < hiwater_rss)
446 *maxrss = hiwater_rss;
447}
448
449static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm)
450{
451 return max(mm->hiwater_vm, mm->total_vm);
452}
453 399
454extern void set_dumpable(struct mm_struct *mm, int value); 400extern void set_dumpable(struct mm_struct *mm, int value);
455extern int get_dumpable(struct mm_struct *mm); 401extern int get_dumpable(struct mm_struct *mm);
@@ -740,14 +686,6 @@ struct user_struct {
740 uid_t uid; 686 uid_t uid;
741 struct user_namespace *user_ns; 687 struct user_namespace *user_ns;
742 688
743#ifdef CONFIG_USER_SCHED
744 struct task_group *tg;
745#ifdef CONFIG_SYSFS
746 struct kobject kobj;
747 struct delayed_work work;
748#endif
749#endif
750
751#ifdef CONFIG_PERF_EVENTS 689#ifdef CONFIG_PERF_EVENTS
752 atomic_long_t locked_vm; 690 atomic_long_t locked_vm;
753#endif 691#endif
@@ -878,7 +816,10 @@ static inline int sd_balance_for_mc_power(void)
878 if (sched_smt_power_savings) 816 if (sched_smt_power_savings)
879 return SD_POWERSAVINGS_BALANCE; 817 return SD_POWERSAVINGS_BALANCE;
880 818
881 return SD_PREFER_SIBLING; 819 if (!sched_mc_power_savings)
820 return SD_PREFER_SIBLING;
821
822 return 0;
882} 823}
883 824
884static inline int sd_balance_for_package_power(void) 825static inline int sd_balance_for_package_power(void)
@@ -1084,7 +1025,8 @@ struct sched_domain;
1084struct sched_class { 1025struct sched_class {
1085 const struct sched_class *next; 1026 const struct sched_class *next;
1086 1027
1087 void (*enqueue_task) (struct rq *rq, struct task_struct *p, int wakeup); 1028 void (*enqueue_task) (struct rq *rq, struct task_struct *p, int wakeup,
1029 bool head);
1088 void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep); 1030 void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep);
1089 void (*yield_task) (struct rq *rq); 1031 void (*yield_task) (struct rq *rq);
1090 1032
@@ -1096,14 +1038,6 @@ struct sched_class {
1096#ifdef CONFIG_SMP 1038#ifdef CONFIG_SMP
1097 int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags); 1039 int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags);
1098 1040
1099 unsigned long (*load_balance) (struct rq *this_rq, int this_cpu,
1100 struct rq *busiest, unsigned long max_load_move,
1101 struct sched_domain *sd, enum cpu_idle_type idle,
1102 int *all_pinned, int *this_best_prio);
1103
1104 int (*move_one_task) (struct rq *this_rq, int this_cpu,
1105 struct rq *busiest, struct sched_domain *sd,
1106 enum cpu_idle_type idle);
1107 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); 1041 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);
1108 void (*post_schedule) (struct rq *this_rq); 1042 void (*post_schedule) (struct rq *this_rq);
1109 void (*task_waking) (struct rq *this_rq, struct task_struct *task); 1043 void (*task_waking) (struct rq *this_rq, struct task_struct *task);
@@ -1286,7 +1220,9 @@ struct task_struct {
1286 struct plist_node pushable_tasks; 1220 struct plist_node pushable_tasks;
1287 1221
1288 struct mm_struct *mm, *active_mm; 1222 struct mm_struct *mm, *active_mm;
1289 1223#if defined(SPLIT_RSS_COUNTING)
1224 struct task_rss_stat rss_stat;
1225#endif
1290/* task state */ 1226/* task state */
1291 int exit_state; 1227 int exit_state;
1292 int exit_code, exit_signal; 1228 int exit_code, exit_signal;
@@ -1466,7 +1402,7 @@ struct task_struct {
1466 void *journal_info; 1402 void *journal_info;
1467 1403
1468/* stacked block device info */ 1404/* stacked block device info */
1469 struct bio *bio_list, **bio_tail; 1405 struct bio_list *bio_list;
1470 1406
1471/* VM state */ 1407/* VM state */
1472 struct reclaim_state *reclaim_state; 1408 struct reclaim_state *reclaim_state;
@@ -2517,13 +2453,9 @@ extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
2517 2453
2518extern void normalize_rt_tasks(void); 2454extern void normalize_rt_tasks(void);
2519 2455
2520#ifdef CONFIG_GROUP_SCHED 2456#ifdef CONFIG_CGROUP_SCHED
2521 2457
2522extern struct task_group init_task_group; 2458extern struct task_group init_task_group;
2523#ifdef CONFIG_USER_SCHED
2524extern struct task_group root_task_group;
2525extern void set_tg_uid(struct user_struct *user);
2526#endif
2527 2459
2528extern struct task_group *sched_create_group(struct task_group *parent); 2460extern struct task_group *sched_create_group(struct task_group *parent);
2529extern void sched_destroy_group(struct task_group *tg); 2461extern void sched_destroy_group(struct task_group *tg);