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