1
2#include <linux/sched.h>
3#include <linux/sched/sysctl.h>
4#include <linux/sched/rt.h>
5#include <linux/mutex.h>
6#include <linux/spinlock.h>
7#include <linux/stop_machine.h>
8#include <linux/tick.h>
9#include <linux/slab.h>
10
11#include "cpupri.h"
12#include "cpuacct.h"
13
14struct rq;
15
16extern __read_mostly int scheduler_running;
17
18extern unsigned long calc_load_update;
19extern atomic_long_t calc_load_tasks;
20
21extern long calc_load_fold_active(struct rq *this_rq);
22extern void update_cpu_load_active(struct rq *this_rq);
23
24
25
26
27
28
29#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20)
30#define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20)
31#define TASK_NICE(p) PRIO_TO_NICE((p)->static_prio)
32
33
34
35
36
37
38#define USER_PRIO(p) ((p)-MAX_RT_PRIO)
39#define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio)
40#define MAX_USER_PRIO (USER_PRIO(MAX_PRIO))
41
42
43
44
45#define NS_TO_JIFFIES(TIME) ((unsigned long)(TIME) / (NSEC_PER_SEC / HZ))
46
47
48
49
50
51
52
53
54
55
56
57
58
59#if 0
60# define SCHED_LOAD_RESOLUTION 10
61# define scale_load(w) ((w) << SCHED_LOAD_RESOLUTION)
62# define scale_load_down(w) ((w) >> SCHED_LOAD_RESOLUTION)
63#else
64# define SCHED_LOAD_RESOLUTION 0
65# define scale_load(w) (w)
66# define scale_load_down(w) (w)
67#endif
68
69#define SCHED_LOAD_SHIFT (10 + SCHED_LOAD_RESOLUTION)
70#define SCHED_LOAD_SCALE (1L << SCHED_LOAD_SHIFT)
71
72#define NICE_0_LOAD SCHED_LOAD_SCALE
73#define NICE_0_SHIFT SCHED_LOAD_SHIFT
74
75
76
77
78
79
80
81
82#define RUNTIME_INF ((u64)~0ULL)
83
84static inline int rt_policy(int policy)
85{
86 if (policy == SCHED_FIFO || policy == SCHED_RR)
87 return 1;
88 return 0;
89}
90
91static inline int task_has_rt_policy(struct task_struct *p)
92{
93 return rt_policy(p->policy);
94}
95
96
97
98
99struct rt_prio_array {
100 DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1);
101 struct list_head queue[MAX_RT_PRIO];
102};
103
104struct rt_bandwidth {
105
106 raw_spinlock_t rt_runtime_lock;
107 ktime_t rt_period;
108 u64 rt_runtime;
109 struct hrtimer rt_period_timer;
110};
111
112extern struct mutex sched_domains_mutex;
113
114#ifdef CONFIG_CGROUP_SCHED
115
116#include <linux/cgroup.h>
117
118struct cfs_rq;
119struct rt_rq;
120
121extern struct list_head task_groups;
122
123struct cfs_bandwidth {
124#ifdef CONFIG_CFS_BANDWIDTH
125 raw_spinlock_t lock;
126 ktime_t period;
127 u64 quota, runtime;
128 s64 hierarchal_quota;
129 u64 runtime_expires;
130
131 int idle, timer_active;
132 struct hrtimer period_timer, slack_timer;
133 struct list_head throttled_cfs_rq;
134
135
136 int nr_periods, nr_throttled;
137 u64 throttled_time;
138#endif
139};
140
141
142struct task_group {
143 struct cgroup_subsys_state css;
144
145#ifdef CONFIG_FAIR_GROUP_SCHED
146
147 struct sched_entity **se;
148
149 struct cfs_rq **cfs_rq;
150 unsigned long shares;
151
152#ifdef CONFIG_SMP
153 atomic_long_t load_avg;
154 atomic_t runnable_avg;
155#endif
156#endif
157
158#ifdef CONFIG_RT_GROUP_SCHED
159 struct sched_rt_entity **rt_se;
160 struct rt_rq **rt_rq;
161
162 struct rt_bandwidth rt_bandwidth;
163#endif
164
165 struct rcu_head rcu;
166 struct list_head list;
167
168 struct task_group *parent;
169 struct list_head siblings;
170 struct list_head children;
171
172#ifdef CONFIG_SCHED_AUTOGROUP
173 struct autogroup *autogroup;
174#endif
175
176 struct cfs_bandwidth cfs_bandwidth;
177};
178
179#ifdef CONFIG_FAIR_GROUP_SCHED
180#define ROOT_TASK_GROUP_LOAD NICE_0_LOAD
181
182
183
184
185
186
187
188
189
190#define MIN_SHARES (1UL << 1)
191#define MAX_SHARES (1UL << 18)
192#endif
193
194typedef int (*tg_visitor)(struct task_group *, void *);
195
196extern int walk_tg_tree_from(struct task_group *from,
197 tg_visitor down, tg_visitor up, void *data);
198
199
200
201
202
203
204
205static inline int walk_tg_tree(tg_visitor down, tg_visitor up, void *data)
206{
207 return walk_tg_tree_from(&root_task_group, down, up, data);
208}
209
210extern int tg_nop(struct task_group *tg, void *data);
211
212extern void free_fair_sched_group(struct task_group *tg);
213extern int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent);
214extern void unregister_fair_sched_group(struct task_group *tg, int cpu);
215extern void init_tg_cfs_entry(struct task_group *tg, struct cfs_rq *cfs_rq,
216 struct sched_entity *se, int cpu,
217 struct sched_entity *parent);
218extern void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b);
219extern int sched_group_set_shares(struct task_group *tg, unsigned long shares);
220
221extern void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b);
222extern void __start_cfs_bandwidth(struct cfs_bandwidth *cfs_b);
223extern void unthrottle_cfs_rq(struct cfs_rq *cfs_rq);
224
225extern void free_rt_sched_group(struct task_group *tg);
226extern int alloc_rt_sched_group(struct task_group *tg, struct task_group *parent);
227extern void init_tg_rt_entry(struct task_group *tg, struct rt_rq *rt_rq,
228 struct sched_rt_entity *rt_se, int cpu,
229 struct sched_rt_entity *parent);
230
231extern struct task_group *sched_create_group(struct task_group *parent);
232extern void sched_online_group(struct task_group *tg,
233 struct task_group *parent);
234extern void sched_destroy_group(struct task_group *tg);
235extern void sched_offline_group(struct task_group *tg);
236
237extern void sched_move_task(struct task_struct *tsk);
238
239#ifdef CONFIG_FAIR_GROUP_SCHED
240extern int sched_group_set_shares(struct task_group *tg, unsigned long shares);
241#endif
242
243#else
244
245struct cfs_bandwidth { };
246
247#endif
248
249
250struct cfs_rq {
251 struct load_weight load;
252 unsigned int nr_running, h_nr_running;
253
254 u64 exec_clock;
255 u64 min_vruntime;
256#ifndef CONFIG_64BIT
257 u64 min_vruntime_copy;
258#endif
259
260 struct rb_root tasks_timeline;
261 struct rb_node *rb_leftmost;
262
263
264
265
266
267 struct sched_entity *curr, *next, *last, *skip;
268
269#ifdef CONFIG_SCHED_DEBUG
270 unsigned int nr_spread_over;
271#endif
272
273#ifdef CONFIG_SMP
274
275
276
277
278
279
280 unsigned long runnable_load_avg, blocked_load_avg;
281 atomic64_t decay_counter;
282 u64 last_decay;
283 atomic_long_t removed_load;
284
285#ifdef CONFIG_FAIR_GROUP_SCHED
286
287 u32 tg_runnable_contrib;
288 unsigned long tg_load_contrib;
289
290
291
292
293
294
295
296 unsigned long h_load;
297 u64 last_h_load_update;
298 struct sched_entity *h_load_next;
299#endif
300#endif
301
302#ifdef CONFIG_FAIR_GROUP_SCHED
303 struct rq *rq;
304
305
306
307
308
309
310
311
312
313 int on_list;
314 struct list_head leaf_cfs_rq_list;
315 struct task_group *tg;
316
317#ifdef CONFIG_CFS_BANDWIDTH
318 int runtime_enabled;
319 u64 runtime_expires;
320 s64 runtime_remaining;
321
322 u64 throttled_clock, throttled_clock_task;
323 u64 throttled_clock_task_time;
324 int throttled, throttle_count;
325 struct list_head throttled_list;
326#endif
327#endif
328};
329
330static inline int rt_bandwidth_enabled(void)
331{
332 return sysctl_sched_rt_runtime >= 0;
333}
334
335
336struct rt_rq {
337 struct rt_prio_array active;
338 unsigned int rt_nr_running;
339#if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
340 struct {
341 int curr;
342#ifdef CONFIG_SMP
343 int next;
344#endif
345 } highest_prio;
346#endif
347#ifdef CONFIG_SMP
348 unsigned long rt_nr_migratory;
349 unsigned long rt_nr_total;
350 int overloaded;
351 struct plist_head pushable_tasks;
352#endif
353 int rt_throttled;
354 u64 rt_time;
355 u64 rt_runtime;
356
357 raw_spinlock_t rt_runtime_lock;
358
359#ifdef CONFIG_RT_GROUP_SCHED
360 unsigned long rt_nr_boosted;
361
362 struct rq *rq;
363 struct task_group *tg;
364#endif
365};
366
367#ifdef CONFIG_SMP
368
369
370
371
372
373
374
375
376
377struct root_domain {
378 atomic_t refcount;
379 atomic_t rto_count;
380 struct rcu_head rcu;
381 cpumask_var_t span;
382 cpumask_var_t online;
383
384
385
386
387
388 cpumask_var_t rto_mask;
389 struct cpupri cpupri;
390};
391
392extern struct root_domain def_root_domain;
393
394#endif
395
396
397
398
399
400
401
402
403struct rq {
404
405 raw_spinlock_t lock;
406
407
408
409
410
411 unsigned int nr_running;
412#ifdef CONFIG_NUMA_BALANCING
413 unsigned int nr_numa_running;
414 unsigned int nr_preferred_running;
415#endif
416 #define CPU_LOAD_IDX_MAX 5
417 unsigned long cpu_load[CPU_LOAD_IDX_MAX];
418 unsigned long last_load_update_tick;
419#ifdef CONFIG_NO_HZ_COMMON
420 u64 nohz_stamp;
421 unsigned long nohz_flags;
422#endif
423#ifdef CONFIG_NO_HZ_FULL
424 unsigned long last_sched_tick;
425#endif
426 int skip_clock_update;
427
428
429 struct load_weight load;
430 unsigned long nr_load_updates;
431 u64 nr_switches;
432
433 struct cfs_rq cfs;
434 struct rt_rq rt;
435
436#ifdef CONFIG_FAIR_GROUP_SCHED
437
438 struct list_head leaf_cfs_rq_list;
439#endif
440
441#ifdef CONFIG_RT_GROUP_SCHED
442 struct list_head leaf_rt_rq_list;
443#endif
444
445
446
447
448
449
450
451 unsigned long nr_uninterruptible;
452
453 struct task_struct *curr, *idle, *stop;
454 unsigned long next_balance;
455 struct mm_struct *prev_mm;
456
457 u64 clock;
458 u64 clock_task;
459
460 atomic_t nr_iowait;
461
462#ifdef CONFIG_SMP
463 struct root_domain *rd;
464 struct sched_domain *sd;
465
466 unsigned long cpu_power;
467
468 unsigned char idle_balance;
469
470 int post_schedule;
471 int active_balance;
472 int push_cpu;
473 struct cpu_stop_work active_balance_work;
474
475 int cpu;
476 int online;
477
478 struct list_head cfs_tasks;
479
480 u64 rt_avg;
481 u64 age_stamp;
482 u64 idle_stamp;
483 u64 avg_idle;
484
485
486 u64 max_idle_balance_cost;
487#endif
488
489#ifdef CONFIG_IRQ_TIME_ACCOUNTING
490 u64 prev_irq_time;
491#endif
492#ifdef CONFIG_PARAVIRT
493 u64 prev_steal_time;
494#endif
495#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
496 u64 prev_steal_time_rq;
497#endif
498
499
500 unsigned long calc_load_update;
501 long calc_load_active;
502
503#ifdef CONFIG_SCHED_HRTICK
504#ifdef CONFIG_SMP
505 int hrtick_csd_pending;
506 struct call_single_data hrtick_csd;
507#endif
508 struct hrtimer hrtick_timer;
509#endif
510
511#ifdef CONFIG_SCHEDSTATS
512
513 struct sched_info rq_sched_info;
514 unsigned long long rq_cpu_time;
515
516
517
518 unsigned int yld_count;
519
520
521 unsigned int sched_count;
522 unsigned int sched_goidle;
523
524
525 unsigned int ttwu_count;
526 unsigned int ttwu_local;
527#endif
528
529#ifdef CONFIG_SMP
530 struct llist_head wake_list;
531#endif
532
533 struct sched_avg avg;
534};
535
536static inline int cpu_of(struct rq *rq)
537{
538#ifdef CONFIG_SMP
539 return rq->cpu;
540#else
541 return 0;
542#endif
543}
544
545DECLARE_PER_CPU(struct rq, runqueues);
546
547#define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
548#define this_rq() (&__get_cpu_var(runqueues))
549#define task_rq(p) cpu_rq(task_cpu(p))
550#define cpu_curr(cpu) (cpu_rq(cpu)->curr)
551#define raw_rq() (&__raw_get_cpu_var(runqueues))
552
553static inline u64 rq_clock(struct rq *rq)
554{
555 return rq->clock;
556}
557
558static inline u64 rq_clock_task(struct rq *rq)
559{
560 return rq->clock_task;
561}
562
563#ifdef CONFIG_NUMA_BALANCING
564extern void sched_setnuma(struct task_struct *p, int node);
565extern int migrate_task_to(struct task_struct *p, int cpu);
566extern int migrate_swap(struct task_struct *, struct task_struct *);
567#endif
568
569#ifdef CONFIG_SMP
570
571#define rcu_dereference_check_sched_domain(p) \
572 rcu_dereference_check((p), \
573 lockdep_is_held(&sched_domains_mutex))
574
575
576
577
578
579
580
581
582#define for_each_domain(cpu, __sd) \
583 for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd); \
584 __sd; __sd = __sd->parent)
585
586#define for_each_lower_domain(sd) for (; sd; sd = sd->child)
587
588
589
590
591
592
593
594
595
596
597static inline struct sched_domain *highest_flag_domain(int cpu, int flag)
598{
599 struct sched_domain *sd, *hsd = NULL;
600
601 for_each_domain(cpu, sd) {
602 if (!(sd->flags & flag))
603 break;
604 hsd = sd;
605 }
606
607 return hsd;
608}
609
610static inline struct sched_domain *lowest_flag_domain(int cpu, int flag)
611{
612 struct sched_domain *sd;
613
614 for_each_domain(cpu, sd) {
615 if (sd->flags & flag)
616 break;
617 }
618
619 return sd;
620}
621
622DECLARE_PER_CPU(struct sched_domain *, sd_llc);
623DECLARE_PER_CPU(int, sd_llc_size);
624DECLARE_PER_CPU(int, sd_llc_id);
625DECLARE_PER_CPU(struct sched_domain *, sd_numa);
626DECLARE_PER_CPU(struct sched_domain *, sd_busy);
627DECLARE_PER_CPU(struct sched_domain *, sd_asym);
628
629struct sched_group_power {
630 atomic_t ref;
631
632
633
634
635 unsigned int power, power_orig;
636 unsigned long next_update;
637 int imbalance;
638
639
640
641 atomic_t nr_busy_cpus;
642
643 unsigned long cpumask[0];
644};
645
646struct sched_group {
647 struct sched_group *next;
648 atomic_t ref;
649
650 unsigned int group_weight;
651 struct sched_group_power *sgp;
652
653
654
655
656
657
658
659
660 unsigned long cpumask[0];
661};
662
663static inline struct cpumask *sched_group_cpus(struct sched_group *sg)
664{
665 return to_cpumask(sg->cpumask);
666}
667
668
669
670
671
672static inline struct cpumask *sched_group_mask(struct sched_group *sg)
673{
674 return to_cpumask(sg->sgp->cpumask);
675}
676
677
678
679
680
681static inline unsigned int group_first_cpu(struct sched_group *group)
682{
683 return cpumask_first(sched_group_cpus(group));
684}
685
686extern int group_balance_cpu(struct sched_group *sg);
687
688#endif
689
690#include "stats.h"
691#include "auto_group.h"
692
693#ifdef CONFIG_CGROUP_SCHED
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708static inline struct task_group *task_group(struct task_struct *p)
709{
710 return p->sched_task_group;
711}
712
713
714static inline void set_task_rq(struct task_struct *p, unsigned int cpu)
715{
716#if defined(CONFIG_FAIR_GROUP_SCHED) || defined(CONFIG_RT_GROUP_SCHED)
717 struct task_group *tg = task_group(p);
718#endif
719
720#ifdef CONFIG_FAIR_GROUP_SCHED
721 p->se.cfs_rq = tg->cfs_rq[cpu];
722 p->se.parent = tg->se[cpu];
723#endif
724
725#ifdef CONFIG_RT_GROUP_SCHED
726 p->rt.rt_rq = tg->rt_rq[cpu];
727 p->rt.parent = tg->rt_se[cpu];
728#endif
729}
730
731#else
732
733static inline void set_task_rq(struct task_struct *p, unsigned int cpu) { }
734static inline struct task_group *task_group(struct task_struct *p)
735{
736 return NULL;
737}
738
739#endif
740
741static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu)
742{
743 set_task_rq(p, cpu);
744#ifdef CONFIG_SMP
745
746
747
748
749
750 smp_wmb();
751 task_thread_info(p)->cpu = cpu;
752 p->wake_cpu = cpu;
753#endif
754}
755
756
757
758
759#ifdef CONFIG_SCHED_DEBUG
760# include <linux/static_key.h>
761# define const_debug __read_mostly
762#else
763# define const_debug const
764#endif
765
766extern const_debug unsigned int sysctl_sched_features;
767
768#define SCHED_FEAT(name, enabled) \
769 __SCHED_FEAT_##name ,
770
771enum {
772#include "features.h"
773 __SCHED_FEAT_NR,
774};
775
776#undef SCHED_FEAT
777
778#if defined(CONFIG_SCHED_DEBUG) && defined(HAVE_JUMP_LABEL)
779static __always_inline bool static_branch__true(struct static_key *key)
780{
781 return static_key_true(key);
782}
783
784static __always_inline bool static_branch__false(struct static_key *key)
785{
786 return static_key_false(key);
787}
788
789#define SCHED_FEAT(name, enabled) \
790static __always_inline bool static_branch_##name(struct static_key *key) \
791{ \
792 return static_branch__##enabled(key); \
793}
794
795#include "features.h"
796
797#undef SCHED_FEAT
798
799extern struct static_key sched_feat_keys[__SCHED_FEAT_NR];
800#define sched_feat(x) (static_branch_##x(&sched_feat_keys[__SCHED_FEAT_##x]))
801#else
802#define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
803#endif
804
805#ifdef CONFIG_NUMA_BALANCING
806#define sched_feat_numa(x) sched_feat(x)
807#ifdef CONFIG_SCHED_DEBUG
808#define numabalancing_enabled sched_feat_numa(NUMA)
809#else
810extern bool numabalancing_enabled;
811#endif
812#else
813#define sched_feat_numa(x) (0)
814#define numabalancing_enabled (0)
815#endif
816
817static inline u64 global_rt_period(void)
818{
819 return (u64)sysctl_sched_rt_period * NSEC_PER_USEC;
820}
821
822static inline u64 global_rt_runtime(void)
823{
824 if (sysctl_sched_rt_runtime < 0)
825 return RUNTIME_INF;
826
827 return (u64)sysctl_sched_rt_runtime * NSEC_PER_USEC;
828}
829
830
831
832static inline int task_current(struct rq *rq, struct task_struct *p)
833{
834 return rq->curr == p;
835}
836
837static inline int task_running(struct rq *rq, struct task_struct *p)
838{
839#ifdef CONFIG_SMP
840 return p->on_cpu;
841#else
842 return task_current(rq, p);
843#endif
844}
845
846
847#ifndef prepare_arch_switch
848# define prepare_arch_switch(next) do { } while (0)
849#endif
850#ifndef finish_arch_switch
851# define finish_arch_switch(prev) do { } while (0)
852#endif
853#ifndef finish_arch_post_lock_switch
854# define finish_arch_post_lock_switch() do { } while (0)
855#endif
856
857#ifndef __ARCH_WANT_UNLOCKED_CTXSW
858static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
859{
860#ifdef CONFIG_SMP
861
862
863
864
865
866 next->on_cpu = 1;
867#endif
868}
869
870static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
871{
872#ifdef CONFIG_SMP
873
874
875
876
877
878 smp_wmb();
879 prev->on_cpu = 0;
880#endif
881#ifdef CONFIG_DEBUG_SPINLOCK
882
883 rq->lock.owner = current;
884#endif
885
886
887
888
889
890 spin_acquire(&rq->lock.dep_map, 0, 0, _THIS_IP_);
891
892 raw_spin_unlock_irq(&rq->lock);
893}
894
895#else
896static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
897{
898#ifdef CONFIG_SMP
899
900
901
902
903
904 next->on_cpu = 1;
905#endif
906 raw_spin_unlock(&rq->lock);
907}
908
909static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
910{
911#ifdef CONFIG_SMP
912
913
914
915
916
917 smp_wmb();
918 prev->on_cpu = 0;
919#endif
920 local_irq_enable();
921}
922#endif
923
924
925
926
927#define WF_SYNC 0x01
928#define WF_FORK 0x02
929#define WF_MIGRATED 0x4
930
931
932
933
934
935
936
937
938
939
940#define WEIGHT_IDLEPRIO 3
941#define WMULT_IDLEPRIO 1431655765
942
943
944
945
946
947
948
949
950
951
952
953
954
955static const int prio_to_weight[40] = {
956 88761, 71755, 56483, 46273, 36291,
957 29154, 23254, 18705, 14949, 11916,
958 9548, 7620, 6100, 4904, 3906,
959 3121, 2501, 1991, 1586, 1277,
960 1024, 820, 655, 526, 423,
961 335, 272, 215, 172, 137,
962 110, 87, 70, 56, 45,
963 36, 29, 23, 18, 15,
964};
965
966
967
968
969
970
971
972
973static const u32 prio_to_wmult[40] = {
974 48388, 59856, 76040, 92818, 118348,
975 147320, 184698, 229616, 287308, 360437,
976 449829, 563644, 704093, 875809, 1099582,
977 1376151, 1717300, 2157191, 2708050, 3363326,
978 4194304, 5237765, 6557202, 8165337, 10153587,
979 12820798, 15790321, 19976592, 24970740, 31350126,
980 39045157, 49367440, 61356676, 76695844, 95443717,
981 119304647, 148102320, 186737708, 238609294, 286331153,
982};
983
984#define ENQUEUE_WAKEUP 1
985#define ENQUEUE_HEAD 2
986#ifdef CONFIG_SMP
987#define ENQUEUE_WAKING 4
988#else
989#define ENQUEUE_WAKING 0
990#endif
991
992#define DEQUEUE_SLEEP 1
993
994struct sched_class {
995 const struct sched_class *next;
996
997 void (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);
998 void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);
999 void (*yield_task) (struct rq *rq);
1000 bool (*yield_to_task) (struct rq *rq, struct task_struct *p, bool preempt);
1001
1002 void (*check_preempt_curr) (struct rq *rq, struct task_struct *p, int flags);
1003
1004 struct task_struct * (*pick_next_task) (struct rq *rq);
1005 void (*put_prev_task) (struct rq *rq, struct task_struct *p);
1006
1007#ifdef CONFIG_SMP
1008 int (*select_task_rq)(struct task_struct *p, int task_cpu, int sd_flag, int flags);
1009 void (*migrate_task_rq)(struct task_struct *p, int next_cpu);
1010
1011 void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);
1012 void (*post_schedule) (struct rq *this_rq);
1013 void (*task_waking) (struct task_struct *task);
1014 void (*task_woken) (struct rq *this_rq, struct task_struct *task);
1015
1016 void (*set_cpus_allowed)(struct task_struct *p,
1017 const struct cpumask *newmask);
1018
1019 void (*rq_online)(struct rq *rq);
1020 void (*rq_offline)(struct rq *rq);
1021#endif
1022
1023 void (*set_curr_task) (struct rq *rq);
1024 void (*task_tick) (struct rq *rq, struct task_struct *p, int queued);
1025 void (*task_fork) (struct task_struct *p);
1026
1027 void (*switched_from) (struct rq *this_rq, struct task_struct *task);
1028 void (*switched_to) (struct rq *this_rq, struct task_struct *task);
1029 void (*prio_changed) (struct rq *this_rq, struct task_struct *task,
1030 int oldprio);
1031
1032 unsigned int (*get_rr_interval) (struct rq *rq,
1033 struct task_struct *task);
1034
1035#ifdef CONFIG_FAIR_GROUP_SCHED
1036 void (*task_move_group) (struct task_struct *p, int on_rq);
1037#endif
1038};
1039
1040#define sched_class_highest (&stop_sched_class)
1041#define for_each_class(class) \
1042 for (class = sched_class_highest; class; class = class->next)
1043
1044extern const struct sched_class stop_sched_class;
1045extern const struct sched_class rt_sched_class;
1046extern const struct sched_class fair_sched_class;
1047extern const struct sched_class idle_sched_class;
1048
1049
1050#ifdef CONFIG_SMP
1051
1052extern void update_group_power(struct sched_domain *sd, int cpu);
1053
1054extern void trigger_load_balance(struct rq *rq, int cpu);
1055extern void idle_balance(int this_cpu, struct rq *this_rq);
1056
1057extern void idle_enter_fair(struct rq *this_rq);
1058extern void idle_exit_fair(struct rq *this_rq);
1059
1060#else
1061
1062static inline void idle_balance(int cpu, struct rq *rq)
1063{
1064}
1065
1066#endif
1067
1068extern void sysrq_sched_debug_show(void);
1069extern void sched_init_granularity(void);
1070extern void update_max_interval(void);
1071extern void init_sched_rt_class(void);
1072extern void init_sched_fair_class(void);
1073
1074extern void resched_task(struct task_struct *p);
1075extern void resched_cpu(int cpu);
1076
1077extern struct rt_bandwidth def_rt_bandwidth;
1078extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime);
1079
1080extern void update_idle_cpu_load(struct rq *this_rq);
1081
1082extern void init_task_runnable_average(struct task_struct *p);
1083
1084#ifdef CONFIG_PARAVIRT
1085static inline u64 steal_ticks(u64 steal)
1086{
1087 if (unlikely(steal > NSEC_PER_SEC))
1088 return div_u64(steal, TICK_NSEC);
1089
1090 return __iter_div_u64_rem(steal, TICK_NSEC, &steal);
1091}
1092#endif
1093
1094static inline void inc_nr_running(struct rq *rq)
1095{
1096 rq->nr_running++;
1097
1098#ifdef CONFIG_NO_HZ_FULL
1099 if (rq->nr_running == 2) {
1100 if (tick_nohz_full_cpu(rq->cpu)) {
1101
1102 smp_wmb();
1103 smp_send_reschedule(rq->cpu);
1104 }
1105 }
1106#endif
1107}
1108
1109static inline void dec_nr_running(struct rq *rq)
1110{
1111 rq->nr_running--;
1112}
1113
1114static inline void rq_last_tick_reset(struct rq *rq)
1115{
1116#ifdef CONFIG_NO_HZ_FULL
1117 rq->last_sched_tick = jiffies;
1118#endif
1119}
1120
1121extern void update_rq_clock(struct rq *rq);
1122
1123extern void activate_task(struct rq *rq, struct task_struct *p, int flags);
1124extern void deactivate_task(struct rq *rq, struct task_struct *p, int flags);
1125
1126extern void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags);
1127
1128extern const_debug unsigned int sysctl_sched_time_avg;
1129extern const_debug unsigned int sysctl_sched_nr_migrate;
1130extern const_debug unsigned int sysctl_sched_migration_cost;
1131
1132static inline u64 sched_avg_period(void)
1133{
1134 return (u64)sysctl_sched_time_avg * NSEC_PER_MSEC / 2;
1135}
1136
1137#ifdef CONFIG_SCHED_HRTICK
1138
1139
1140
1141
1142
1143
1144static inline int hrtick_enabled(struct rq *rq)
1145{
1146 if (!sched_feat(HRTICK))
1147 return 0;
1148 if (!cpu_active(cpu_of(rq)))
1149 return 0;
1150 return hrtimer_is_hres_active(&rq->hrtick_timer);
1151}
1152
1153void hrtick_start(struct rq *rq, u64 delay);
1154
1155#else
1156
1157static inline int hrtick_enabled(struct rq *rq)
1158{
1159 return 0;
1160}
1161
1162#endif
1163
1164#ifdef CONFIG_SMP
1165extern void sched_avg_update(struct rq *rq);
1166static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta)
1167{
1168 rq->rt_avg += rt_delta;
1169 sched_avg_update(rq);
1170}
1171#else
1172static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta) { }
1173static inline void sched_avg_update(struct rq *rq) { }
1174#endif
1175
1176extern void start_bandwidth_timer(struct hrtimer *period_timer, ktime_t period);
1177
1178#ifdef CONFIG_SMP
1179#ifdef CONFIG_PREEMPT
1180
1181static inline void double_rq_lock(struct rq *rq1, struct rq *rq2);
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191static inline int _double_lock_balance(struct rq *this_rq, struct rq *busiest)
1192 __releases(this_rq->lock)
1193 __acquires(busiest->lock)
1194 __acquires(this_rq->lock)
1195{
1196 raw_spin_unlock(&this_rq->lock);
1197 double_rq_lock(this_rq, busiest);
1198
1199 return 1;
1200}
1201
1202#else
1203
1204
1205
1206
1207
1208
1209
1210static inline int _double_lock_balance(struct rq *this_rq, struct rq *busiest)
1211 __releases(this_rq->lock)
1212 __acquires(busiest->lock)
1213 __acquires(this_rq->lock)
1214{
1215 int ret = 0;
1216
1217 if (unlikely(!raw_spin_trylock(&busiest->lock))) {
1218 if (busiest < this_rq) {
1219 raw_spin_unlock(&this_rq->lock);
1220 raw_spin_lock(&busiest->lock);
1221 raw_spin_lock_nested(&this_rq->lock,
1222 SINGLE_DEPTH_NESTING);
1223 ret = 1;
1224 } else
1225 raw_spin_lock_nested(&busiest->lock,
1226 SINGLE_DEPTH_NESTING);
1227 }
1228 return ret;
1229}
1230
1231#endif
1232
1233
1234
1235
1236static inline int double_lock_balance(struct rq *this_rq, struct rq *busiest)
1237{
1238 if (unlikely(!irqs_disabled())) {
1239
1240 raw_spin_unlock(&this_rq->lock);
1241 BUG_ON(1);
1242 }
1243
1244 return _double_lock_balance(this_rq, busiest);
1245}
1246
1247static inline void double_unlock_balance(struct rq *this_rq, struct rq *busiest)
1248 __releases(busiest->lock)
1249{
1250 raw_spin_unlock(&busiest->lock);
1251 lock_set_subclass(&this_rq->lock.dep_map, 0, _RET_IP_);
1252}
1253
1254static inline void double_lock(spinlock_t *l1, spinlock_t *l2)
1255{
1256 if (l1 > l2)
1257 swap(l1, l2);
1258
1259 spin_lock(l1);
1260 spin_lock_nested(l2, SINGLE_DEPTH_NESTING);
1261}
1262
1263static inline void double_raw_lock(raw_spinlock_t *l1, raw_spinlock_t *l2)
1264{
1265 if (l1 > l2)
1266 swap(l1, l2);
1267
1268 raw_spin_lock(l1);
1269 raw_spin_lock_nested(l2, SINGLE_DEPTH_NESTING);
1270}
1271
1272
1273
1274
1275
1276
1277
1278static inline void double_rq_lock(struct rq *rq1, struct rq *rq2)
1279 __acquires(rq1->lock)
1280 __acquires(rq2->lock)
1281{
1282 BUG_ON(!irqs_disabled());
1283 if (rq1 == rq2) {
1284 raw_spin_lock(&rq1->lock);
1285 __acquire(rq2->lock);
1286 } else {
1287 if (rq1 < rq2) {
1288 raw_spin_lock(&rq1->lock);
1289 raw_spin_lock_nested(&rq2->lock, SINGLE_DEPTH_NESTING);
1290 } else {
1291 raw_spin_lock(&rq2->lock);
1292 raw_spin_lock_nested(&rq1->lock, SINGLE_DEPTH_NESTING);
1293 }
1294 }
1295}
1296
1297
1298
1299
1300
1301
1302
1303static inline void double_rq_unlock(struct rq *rq1, struct rq *rq2)
1304 __releases(rq1->lock)
1305 __releases(rq2->lock)
1306{
1307 raw_spin_unlock(&rq1->lock);
1308 if (rq1 != rq2)
1309 raw_spin_unlock(&rq2->lock);
1310 else
1311 __release(rq2->lock);
1312}
1313
1314#else
1315
1316
1317
1318
1319
1320
1321
1322static inline void double_rq_lock(struct rq *rq1, struct rq *rq2)
1323 __acquires(rq1->lock)
1324 __acquires(rq2->lock)
1325{
1326 BUG_ON(!irqs_disabled());
1327 BUG_ON(rq1 != rq2);
1328 raw_spin_lock(&rq1->lock);
1329 __acquire(rq2->lock);
1330}
1331
1332
1333
1334
1335
1336
1337
1338static inline void double_rq_unlock(struct rq *rq1, struct rq *rq2)
1339 __releases(rq1->lock)
1340 __releases(rq2->lock)
1341{
1342 BUG_ON(rq1 != rq2);
1343 raw_spin_unlock(&rq1->lock);
1344 __release(rq2->lock);
1345}
1346
1347#endif
1348
1349extern struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq);
1350extern struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq);
1351extern void print_cfs_stats(struct seq_file *m, int cpu);
1352extern void print_rt_stats(struct seq_file *m, int cpu);
1353
1354extern void init_cfs_rq(struct cfs_rq *cfs_rq);
1355extern void init_rt_rq(struct rt_rq *rt_rq, struct rq *rq);
1356
1357extern void cfs_bandwidth_usage_inc(void);
1358extern void cfs_bandwidth_usage_dec(void);
1359
1360#ifdef CONFIG_NO_HZ_COMMON
1361enum rq_nohz_flag_bits {
1362 NOHZ_TICK_STOPPED,
1363 NOHZ_BALANCE_KICK,
1364};
1365
1366#define nohz_flags(cpu) (&cpu_rq(cpu)->nohz_flags)
1367#endif
1368
1369#ifdef CONFIG_IRQ_TIME_ACCOUNTING
1370
1371DECLARE_PER_CPU(u64, cpu_hardirq_time);
1372DECLARE_PER_CPU(u64, cpu_softirq_time);
1373
1374#ifndef CONFIG_64BIT
1375DECLARE_PER_CPU(seqcount_t, irq_time_seq);
1376
1377static inline void irq_time_write_begin(void)
1378{
1379 __this_cpu_inc(irq_time_seq.sequence);
1380 smp_wmb();
1381}
1382
1383static inline void irq_time_write_end(void)
1384{
1385 smp_wmb();
1386 __this_cpu_inc(irq_time_seq.sequence);
1387}
1388
1389static inline u64 irq_time_read(int cpu)
1390{
1391 u64 irq_time;
1392 unsigned seq;
1393
1394 do {
1395 seq = read_seqcount_begin(&per_cpu(irq_time_seq, cpu));
1396 irq_time = per_cpu(cpu_softirq_time, cpu) +
1397 per_cpu(cpu_hardirq_time, cpu);
1398 } while (read_seqcount_retry(&per_cpu(irq_time_seq, cpu), seq));
1399
1400 return irq_time;
1401}
1402#else
1403static inline void irq_time_write_begin(void)
1404{
1405}
1406
1407static inline void irq_time_write_end(void)
1408{
1409}
1410
1411static inline u64 irq_time_read(int cpu)
1412{
1413 return per_cpu(cpu_softirq_time, cpu) + per_cpu(cpu_hardirq_time, cpu);
1414}
1415#endif
1416#endif
1417