0001
0002
0003
0004
0005 #ifndef _KERNEL_SCHED_SCHED_H
0006 #define _KERNEL_SCHED_SCHED_H
0007
0008 #include <linux/sched/affinity.h>
0009 #include <linux/sched/autogroup.h>
0010 #include <linux/sched/cpufreq.h>
0011 #include <linux/sched/deadline.h>
0012 #include <linux/sched.h>
0013 #include <linux/sched/loadavg.h>
0014 #include <linux/sched/mm.h>
0015 #include <linux/sched/rseq_api.h>
0016 #include <linux/sched/signal.h>
0017 #include <linux/sched/smt.h>
0018 #include <linux/sched/stat.h>
0019 #include <linux/sched/sysctl.h>
0020 #include <linux/sched/task_flags.h>
0021 #include <linux/sched/task.h>
0022 #include <linux/sched/topology.h>
0023
0024 #include <linux/atomic.h>
0025 #include <linux/bitmap.h>
0026 #include <linux/bug.h>
0027 #include <linux/capability.h>
0028 #include <linux/cgroup_api.h>
0029 #include <linux/cgroup.h>
0030 #include <linux/context_tracking.h>
0031 #include <linux/cpufreq.h>
0032 #include <linux/cpumask_api.h>
0033 #include <linux/ctype.h>
0034 #include <linux/file.h>
0035 #include <linux/fs_api.h>
0036 #include <linux/hrtimer_api.h>
0037 #include <linux/interrupt.h>
0038 #include <linux/irq_work.h>
0039 #include <linux/jiffies.h>
0040 #include <linux/kref_api.h>
0041 #include <linux/kthread.h>
0042 #include <linux/ktime_api.h>
0043 #include <linux/lockdep_api.h>
0044 #include <linux/lockdep.h>
0045 #include <linux/minmax.h>
0046 #include <linux/mm.h>
0047 #include <linux/module.h>
0048 #include <linux/mutex_api.h>
0049 #include <linux/plist.h>
0050 #include <linux/poll.h>
0051 #include <linux/proc_fs.h>
0052 #include <linux/profile.h>
0053 #include <linux/psi.h>
0054 #include <linux/rcupdate.h>
0055 #include <linux/seq_file.h>
0056 #include <linux/seqlock.h>
0057 #include <linux/softirq.h>
0058 #include <linux/spinlock_api.h>
0059 #include <linux/static_key.h>
0060 #include <linux/stop_machine.h>
0061 #include <linux/syscalls_api.h>
0062 #include <linux/syscalls.h>
0063 #include <linux/tick.h>
0064 #include <linux/topology.h>
0065 #include <linux/types.h>
0066 #include <linux/u64_stats_sync_api.h>
0067 #include <linux/uaccess.h>
0068 #include <linux/wait_api.h>
0069 #include <linux/wait_bit.h>
0070 #include <linux/workqueue_api.h>
0071
0072 #include <trace/events/power.h>
0073 #include <trace/events/sched.h>
0074
0075 #include "../workqueue_internal.h"
0076
0077 #ifdef CONFIG_CGROUP_SCHED
0078 #include <linux/cgroup.h>
0079 #include <linux/psi.h>
0080 #endif
0081
0082 #ifdef CONFIG_SCHED_DEBUG
0083 # include <linux/static_key.h>
0084 #endif
0085
0086 #ifdef CONFIG_PARAVIRT
0087 # include <asm/paravirt.h>
0088 # include <asm/paravirt_api_clock.h>
0089 #endif
0090
0091 #include "cpupri.h"
0092 #include "cpudeadline.h"
0093
0094 #ifdef CONFIG_SCHED_DEBUG
0095 # define SCHED_WARN_ON(x) WARN_ONCE(x, #x)
0096 #else
0097 # define SCHED_WARN_ON(x) ({ (void)(x), 0; })
0098 #endif
0099
0100 struct rq;
0101 struct cpuidle_state;
0102
0103
0104 #define TASK_ON_RQ_QUEUED 1
0105 #define TASK_ON_RQ_MIGRATING 2
0106
0107 extern __read_mostly int scheduler_running;
0108
0109 extern unsigned long calc_load_update;
0110 extern atomic_long_t calc_load_tasks;
0111
0112 extern unsigned int sysctl_sched_child_runs_first;
0113
0114 extern void calc_global_load_tick(struct rq *this_rq);
0115 extern long calc_load_fold_active(struct rq *this_rq, long adjust);
0116
0117 extern void call_trace_sched_update_nr_running(struct rq *rq, int count);
0118
0119 extern unsigned int sysctl_sched_rt_period;
0120 extern int sysctl_sched_rt_runtime;
0121 extern int sched_rr_timeslice;
0122
0123
0124
0125
0126 #define NS_TO_JIFFIES(TIME) ((unsigned long)(TIME) / (NSEC_PER_SEC / HZ))
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142 #ifdef CONFIG_64BIT
0143 # define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT + SCHED_FIXEDPOINT_SHIFT)
0144 # define scale_load(w) ((w) << SCHED_FIXEDPOINT_SHIFT)
0145 # define scale_load_down(w) \
0146 ({ \
0147 unsigned long __w = (w); \
0148 if (__w) \
0149 __w = max(2UL, __w >> SCHED_FIXEDPOINT_SHIFT); \
0150 __w; \
0151 })
0152 #else
0153 # define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT)
0154 # define scale_load(w) (w)
0155 # define scale_load_down(w) (w)
0156 #endif
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167 #define NICE_0_LOAD (1L << NICE_0_LOAD_SHIFT)
0168
0169
0170
0171
0172
0173
0174 #define DL_SCALE 10
0175
0176
0177
0178
0179 #define RUNTIME_INF ((u64)~0ULL)
0180
0181 static inline int idle_policy(int policy)
0182 {
0183 return policy == SCHED_IDLE;
0184 }
0185 static inline int fair_policy(int policy)
0186 {
0187 return policy == SCHED_NORMAL || policy == SCHED_BATCH;
0188 }
0189
0190 static inline int rt_policy(int policy)
0191 {
0192 return policy == SCHED_FIFO || policy == SCHED_RR;
0193 }
0194
0195 static inline int dl_policy(int policy)
0196 {
0197 return policy == SCHED_DEADLINE;
0198 }
0199 static inline bool valid_policy(int policy)
0200 {
0201 return idle_policy(policy) || fair_policy(policy) ||
0202 rt_policy(policy) || dl_policy(policy);
0203 }
0204
0205 static inline int task_has_idle_policy(struct task_struct *p)
0206 {
0207 return idle_policy(p->policy);
0208 }
0209
0210 static inline int task_has_rt_policy(struct task_struct *p)
0211 {
0212 return rt_policy(p->policy);
0213 }
0214
0215 static inline int task_has_dl_policy(struct task_struct *p)
0216 {
0217 return dl_policy(p->policy);
0218 }
0219
0220 #define cap_scale(v, s) ((v)*(s) >> SCHED_CAPACITY_SHIFT)
0221
0222 static inline void update_avg(u64 *avg, u64 sample)
0223 {
0224 s64 diff = sample - *avg;
0225 *avg += diff / 8;
0226 }
0227
0228
0229
0230
0231
0232 #define shr_bound(val, shift) \
0233 (val >> min_t(typeof(shift), shift, BITS_PER_TYPE(typeof(val)) - 1))
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247 #define SCHED_FLAG_SUGOV 0x10000000
0248
0249 #define SCHED_DL_FLAGS (SCHED_FLAG_RECLAIM | SCHED_FLAG_DL_OVERRUN | SCHED_FLAG_SUGOV)
0250
0251 static inline bool dl_entity_is_special(struct sched_dl_entity *dl_se)
0252 {
0253 #ifdef CONFIG_CPU_FREQ_GOV_SCHEDUTIL
0254 return unlikely(dl_se->flags & SCHED_FLAG_SUGOV);
0255 #else
0256 return false;
0257 #endif
0258 }
0259
0260
0261
0262
0263 static inline bool
0264 dl_entity_preempt(struct sched_dl_entity *a, struct sched_dl_entity *b)
0265 {
0266 return dl_entity_is_special(a) ||
0267 dl_time_before(a->deadline, b->deadline);
0268 }
0269
0270
0271
0272
0273 struct rt_prio_array {
0274 DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1);
0275 struct list_head queue[MAX_RT_PRIO];
0276 };
0277
0278 struct rt_bandwidth {
0279
0280 raw_spinlock_t rt_runtime_lock;
0281 ktime_t rt_period;
0282 u64 rt_runtime;
0283 struct hrtimer rt_period_timer;
0284 unsigned int rt_period_active;
0285 };
0286
0287 void __dl_clear_params(struct task_struct *p);
0288
0289 struct dl_bandwidth {
0290 raw_spinlock_t dl_runtime_lock;
0291 u64 dl_runtime;
0292 u64 dl_period;
0293 };
0294
0295 static inline int dl_bandwidth_enabled(void)
0296 {
0297 return sysctl_sched_rt_runtime >= 0;
0298 }
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318 struct dl_bw {
0319 raw_spinlock_t lock;
0320 u64 bw;
0321 u64 total_bw;
0322 };
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332 static inline bool dl_task_fits_capacity(struct task_struct *p, int cpu)
0333 {
0334 unsigned long cap = arch_scale_cpu_capacity(cpu);
0335
0336 return cap_scale(p->dl.dl_deadline, cap) >= p->dl.dl_runtime;
0337 }
0338
0339 extern void init_dl_bw(struct dl_bw *dl_b);
0340 extern int sched_dl_global_validate(void);
0341 extern void sched_dl_do_global(void);
0342 extern int sched_dl_overflow(struct task_struct *p, int policy, const struct sched_attr *attr);
0343 extern void __setparam_dl(struct task_struct *p, const struct sched_attr *attr);
0344 extern void __getparam_dl(struct task_struct *p, struct sched_attr *attr);
0345 extern bool __checkparam_dl(const struct sched_attr *attr);
0346 extern bool dl_param_changed(struct task_struct *p, const struct sched_attr *attr);
0347 extern int dl_cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial);
0348 extern int dl_cpu_busy(int cpu, struct task_struct *p);
0349
0350 #ifdef CONFIG_CGROUP_SCHED
0351
0352 struct cfs_rq;
0353 struct rt_rq;
0354
0355 extern struct list_head task_groups;
0356
0357 struct cfs_bandwidth {
0358 #ifdef CONFIG_CFS_BANDWIDTH
0359 raw_spinlock_t lock;
0360 ktime_t period;
0361 u64 quota;
0362 u64 runtime;
0363 u64 burst;
0364 u64 runtime_snap;
0365 s64 hierarchical_quota;
0366
0367 u8 idle;
0368 u8 period_active;
0369 u8 slack_started;
0370 struct hrtimer period_timer;
0371 struct hrtimer slack_timer;
0372 struct list_head throttled_cfs_rq;
0373
0374
0375 int nr_periods;
0376 int nr_throttled;
0377 int nr_burst;
0378 u64 throttled_time;
0379 u64 burst_time;
0380 #endif
0381 };
0382
0383
0384 struct task_group {
0385 struct cgroup_subsys_state css;
0386
0387 #ifdef CONFIG_FAIR_GROUP_SCHED
0388
0389 struct sched_entity **se;
0390
0391 struct cfs_rq **cfs_rq;
0392 unsigned long shares;
0393
0394
0395 int idle;
0396
0397 #ifdef CONFIG_SMP
0398
0399
0400
0401
0402
0403 atomic_long_t load_avg ____cacheline_aligned;
0404 #endif
0405 #endif
0406
0407 #ifdef CONFIG_RT_GROUP_SCHED
0408 struct sched_rt_entity **rt_se;
0409 struct rt_rq **rt_rq;
0410
0411 struct rt_bandwidth rt_bandwidth;
0412 #endif
0413
0414 struct rcu_head rcu;
0415 struct list_head list;
0416
0417 struct task_group *parent;
0418 struct list_head siblings;
0419 struct list_head children;
0420
0421 #ifdef CONFIG_SCHED_AUTOGROUP
0422 struct autogroup *autogroup;
0423 #endif
0424
0425 struct cfs_bandwidth cfs_bandwidth;
0426
0427 #ifdef CONFIG_UCLAMP_TASK_GROUP
0428
0429 unsigned int uclamp_pct[UCLAMP_CNT];
0430
0431 struct uclamp_se uclamp_req[UCLAMP_CNT];
0432
0433 struct uclamp_se uclamp[UCLAMP_CNT];
0434 #endif
0435
0436 };
0437
0438 #ifdef CONFIG_FAIR_GROUP_SCHED
0439 #define ROOT_TASK_GROUP_LOAD NICE_0_LOAD
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449 #define MIN_SHARES (1UL << 1)
0450 #define MAX_SHARES (1UL << 18)
0451 #endif
0452
0453 typedef int (*tg_visitor)(struct task_group *, void *);
0454
0455 extern int walk_tg_tree_from(struct task_group *from,
0456 tg_visitor down, tg_visitor up, void *data);
0457
0458
0459
0460
0461
0462
0463
0464 static inline int walk_tg_tree(tg_visitor down, tg_visitor up, void *data)
0465 {
0466 return walk_tg_tree_from(&root_task_group, down, up, data);
0467 }
0468
0469 extern int tg_nop(struct task_group *tg, void *data);
0470
0471 extern void free_fair_sched_group(struct task_group *tg);
0472 extern int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent);
0473 extern void online_fair_sched_group(struct task_group *tg);
0474 extern void unregister_fair_sched_group(struct task_group *tg);
0475 extern void init_tg_cfs_entry(struct task_group *tg, struct cfs_rq *cfs_rq,
0476 struct sched_entity *se, int cpu,
0477 struct sched_entity *parent);
0478 extern void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b);
0479
0480 extern void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b);
0481 extern void start_cfs_bandwidth(struct cfs_bandwidth *cfs_b);
0482 extern void unthrottle_cfs_rq(struct cfs_rq *cfs_rq);
0483
0484 extern void init_tg_rt_entry(struct task_group *tg, struct rt_rq *rt_rq,
0485 struct sched_rt_entity *rt_se, int cpu,
0486 struct sched_rt_entity *parent);
0487 extern int sched_group_set_rt_runtime(struct task_group *tg, long rt_runtime_us);
0488 extern int sched_group_set_rt_period(struct task_group *tg, u64 rt_period_us);
0489 extern long sched_group_rt_runtime(struct task_group *tg);
0490 extern long sched_group_rt_period(struct task_group *tg);
0491 extern int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk);
0492
0493 extern struct task_group *sched_create_group(struct task_group *parent);
0494 extern void sched_online_group(struct task_group *tg,
0495 struct task_group *parent);
0496 extern void sched_destroy_group(struct task_group *tg);
0497 extern void sched_release_group(struct task_group *tg);
0498
0499 extern void sched_move_task(struct task_struct *tsk);
0500
0501 #ifdef CONFIG_FAIR_GROUP_SCHED
0502 extern int sched_group_set_shares(struct task_group *tg, unsigned long shares);
0503
0504 extern int sched_group_set_idle(struct task_group *tg, long idle);
0505
0506 #ifdef CONFIG_SMP
0507 extern void set_task_rq_fair(struct sched_entity *se,
0508 struct cfs_rq *prev, struct cfs_rq *next);
0509 #else
0510 static inline void set_task_rq_fair(struct sched_entity *se,
0511 struct cfs_rq *prev, struct cfs_rq *next) { }
0512 #endif
0513 #endif
0514
0515 #else
0516
0517 struct cfs_bandwidth { };
0518
0519 #endif
0520
0521 extern void unregister_rt_sched_group(struct task_group *tg);
0522 extern void free_rt_sched_group(struct task_group *tg);
0523 extern int alloc_rt_sched_group(struct task_group *tg, struct task_group *parent);
0524
0525
0526
0527
0528
0529
0530
0531 #ifdef CONFIG_64BIT
0532 # define u64_u32_load_copy(var, copy) var
0533 # define u64_u32_store_copy(var, copy, val) (var = val)
0534 #else
0535 # define u64_u32_load_copy(var, copy) \
0536 ({ \
0537 u64 __val, __val_copy; \
0538 do { \
0539 __val_copy = copy; \
0540
0541
0542
0543 \
0544 smp_rmb(); \
0545 __val = var; \
0546 } while (__val != __val_copy); \
0547 __val; \
0548 })
0549 # define u64_u32_store_copy(var, copy, val) \
0550 do { \
0551 typeof(val) __val = (val); \
0552 var = __val; \
0553
0554
0555
0556 \
0557 smp_wmb(); \
0558 copy = __val; \
0559 } while (0)
0560 #endif
0561 # define u64_u32_load(var) u64_u32_load_copy(var, var##_copy)
0562 # define u64_u32_store(var, val) u64_u32_store_copy(var, var##_copy, val)
0563
0564
0565 struct cfs_rq {
0566 struct load_weight load;
0567 unsigned int nr_running;
0568 unsigned int h_nr_running;
0569 unsigned int idle_nr_running;
0570 unsigned int idle_h_nr_running;
0571
0572 u64 exec_clock;
0573 u64 min_vruntime;
0574 #ifdef CONFIG_SCHED_CORE
0575 unsigned int forceidle_seq;
0576 u64 min_vruntime_fi;
0577 #endif
0578
0579 #ifndef CONFIG_64BIT
0580 u64 min_vruntime_copy;
0581 #endif
0582
0583 struct rb_root_cached tasks_timeline;
0584
0585
0586
0587
0588
0589 struct sched_entity *curr;
0590 struct sched_entity *next;
0591 struct sched_entity *last;
0592 struct sched_entity *skip;
0593
0594 #ifdef CONFIG_SCHED_DEBUG
0595 unsigned int nr_spread_over;
0596 #endif
0597
0598 #ifdef CONFIG_SMP
0599
0600
0601
0602 struct sched_avg avg;
0603 #ifndef CONFIG_64BIT
0604 u64 last_update_time_copy;
0605 #endif
0606 struct {
0607 raw_spinlock_t lock ____cacheline_aligned;
0608 int nr;
0609 unsigned long load_avg;
0610 unsigned long util_avg;
0611 unsigned long runnable_avg;
0612 } removed;
0613
0614 #ifdef CONFIG_FAIR_GROUP_SCHED
0615 unsigned long tg_load_avg_contrib;
0616 long propagate;
0617 long prop_runnable_sum;
0618
0619
0620
0621
0622
0623
0624
0625 unsigned long h_load;
0626 u64 last_h_load_update;
0627 struct sched_entity *h_load_next;
0628 #endif
0629 #endif
0630
0631 #ifdef CONFIG_FAIR_GROUP_SCHED
0632 struct rq *rq;
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642 int on_list;
0643 struct list_head leaf_cfs_rq_list;
0644 struct task_group *tg;
0645
0646
0647 int idle;
0648
0649 #ifdef CONFIG_CFS_BANDWIDTH
0650 int runtime_enabled;
0651 s64 runtime_remaining;
0652
0653 u64 throttled_pelt_idle;
0654 #ifndef CONFIG_64BIT
0655 u64 throttled_pelt_idle_copy;
0656 #endif
0657 u64 throttled_clock;
0658 u64 throttled_clock_pelt;
0659 u64 throttled_clock_pelt_time;
0660 int throttled;
0661 int throttle_count;
0662 struct list_head throttled_list;
0663 #endif
0664 #endif
0665 };
0666
0667 static inline int rt_bandwidth_enabled(void)
0668 {
0669 return sysctl_sched_rt_runtime >= 0;
0670 }
0671
0672
0673 #if defined(CONFIG_IRQ_WORK) && defined(CONFIG_SMP)
0674 # define HAVE_RT_PUSH_IPI
0675 #endif
0676
0677
0678 struct rt_rq {
0679 struct rt_prio_array active;
0680 unsigned int rt_nr_running;
0681 unsigned int rr_nr_running;
0682 #if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
0683 struct {
0684 int curr;
0685 #ifdef CONFIG_SMP
0686 int next;
0687 #endif
0688 } highest_prio;
0689 #endif
0690 #ifdef CONFIG_SMP
0691 unsigned int rt_nr_migratory;
0692 unsigned int rt_nr_total;
0693 int overloaded;
0694 struct plist_head pushable_tasks;
0695
0696 #endif
0697 int rt_queued;
0698
0699 int rt_throttled;
0700 u64 rt_time;
0701 u64 rt_runtime;
0702
0703 raw_spinlock_t rt_runtime_lock;
0704
0705 #ifdef CONFIG_RT_GROUP_SCHED
0706 unsigned int rt_nr_boosted;
0707
0708 struct rq *rq;
0709 struct task_group *tg;
0710 #endif
0711 };
0712
0713 static inline bool rt_rq_is_runnable(struct rt_rq *rt_rq)
0714 {
0715 return rt_rq->rt_queued && rt_rq->rt_nr_running;
0716 }
0717
0718
0719 struct dl_rq {
0720
0721 struct rb_root_cached root;
0722
0723 unsigned int dl_nr_running;
0724
0725 #ifdef CONFIG_SMP
0726
0727
0728
0729
0730
0731
0732 struct {
0733 u64 curr;
0734 u64 next;
0735 } earliest_dl;
0736
0737 unsigned int dl_nr_migratory;
0738 int overloaded;
0739
0740
0741
0742
0743
0744
0745 struct rb_root_cached pushable_dl_tasks_root;
0746 #else
0747 struct dl_bw dl_bw;
0748 #endif
0749
0750
0751
0752
0753
0754 u64 running_bw;
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765 u64 this_bw;
0766 u64 extra_bw;
0767
0768
0769
0770
0771
0772 u64 bw_ratio;
0773 };
0774
0775 #ifdef CONFIG_FAIR_GROUP_SCHED
0776
0777 #define entity_is_task(se) (!se->my_q)
0778
0779 static inline void se_update_runnable(struct sched_entity *se)
0780 {
0781 if (!entity_is_task(se))
0782 se->runnable_weight = se->my_q->h_nr_running;
0783 }
0784
0785 static inline long se_runnable(struct sched_entity *se)
0786 {
0787 if (entity_is_task(se))
0788 return !!se->on_rq;
0789 else
0790 return se->runnable_weight;
0791 }
0792
0793 #else
0794 #define entity_is_task(se) 1
0795
0796 static inline void se_update_runnable(struct sched_entity *se) {}
0797
0798 static inline long se_runnable(struct sched_entity *se)
0799 {
0800 return !!se->on_rq;
0801 }
0802 #endif
0803
0804 #ifdef CONFIG_SMP
0805
0806
0807
0808 static inline long se_weight(struct sched_entity *se)
0809 {
0810 return scale_load_down(se->load.weight);
0811 }
0812
0813
0814 static inline bool sched_asym_prefer(int a, int b)
0815 {
0816 return arch_asym_cpu_priority(a) > arch_asym_cpu_priority(b);
0817 }
0818
0819 struct perf_domain {
0820 struct em_perf_domain *em_pd;
0821 struct perf_domain *next;
0822 struct rcu_head rcu;
0823 };
0824
0825
0826 #define SG_OVERLOAD 0x1
0827 #define SG_OVERUTILIZED 0x2
0828
0829
0830
0831
0832
0833
0834
0835
0836
0837 struct root_domain {
0838 atomic_t refcount;
0839 atomic_t rto_count;
0840 struct rcu_head rcu;
0841 cpumask_var_t span;
0842 cpumask_var_t online;
0843
0844
0845
0846
0847
0848
0849 int overload;
0850
0851
0852 int overutilized;
0853
0854
0855
0856
0857
0858 cpumask_var_t dlo_mask;
0859 atomic_t dlo_count;
0860 struct dl_bw dl_bw;
0861 struct cpudl cpudl;
0862
0863
0864
0865
0866
0867
0868
0869
0870 u64 visit_gen;
0871
0872 #ifdef HAVE_RT_PUSH_IPI
0873
0874
0875
0876 struct irq_work rto_push_work;
0877 raw_spinlock_t rto_lock;
0878
0879 int rto_loop;
0880 int rto_cpu;
0881
0882 atomic_t rto_loop_next;
0883 atomic_t rto_loop_start;
0884 #endif
0885
0886
0887
0888
0889 cpumask_var_t rto_mask;
0890 struct cpupri cpupri;
0891
0892 unsigned long max_cpu_capacity;
0893
0894
0895
0896
0897
0898 struct perf_domain __rcu *pd;
0899 };
0900
0901 extern void init_defrootdomain(void);
0902 extern int sched_init_domains(const struct cpumask *cpu_map);
0903 extern void rq_attach_root(struct rq *rq, struct root_domain *rd);
0904 extern void sched_get_rd(struct root_domain *rd);
0905 extern void sched_put_rd(struct root_domain *rd);
0906
0907 #ifdef HAVE_RT_PUSH_IPI
0908 extern void rto_push_irq_work_func(struct irq_work *work);
0909 #endif
0910 #endif
0911
0912 #ifdef CONFIG_UCLAMP_TASK
0913
0914
0915
0916
0917
0918
0919
0920
0921 struct uclamp_bucket {
0922 unsigned long value : bits_per(SCHED_CAPACITY_SCALE);
0923 unsigned long tasks : BITS_PER_LONG - bits_per(SCHED_CAPACITY_SCALE);
0924 };
0925
0926
0927
0928
0929
0930
0931
0932
0933
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948 struct uclamp_rq {
0949 unsigned int value;
0950 struct uclamp_bucket bucket[UCLAMP_BUCKETS];
0951 };
0952
0953 DECLARE_STATIC_KEY_FALSE(sched_uclamp_used);
0954 #endif
0955
0956
0957
0958
0959
0960
0961
0962
0963 struct rq {
0964
0965 raw_spinlock_t __lock;
0966
0967
0968
0969
0970
0971 unsigned int nr_running;
0972 #ifdef CONFIG_NUMA_BALANCING
0973 unsigned int nr_numa_running;
0974 unsigned int nr_preferred_running;
0975 unsigned int numa_migrate_on;
0976 #endif
0977 #ifdef CONFIG_NO_HZ_COMMON
0978 #ifdef CONFIG_SMP
0979 unsigned long last_blocked_load_update_tick;
0980 unsigned int has_blocked_load;
0981 call_single_data_t nohz_csd;
0982 #endif
0983 unsigned int nohz_tick_stopped;
0984 atomic_t nohz_flags;
0985 #endif
0986
0987 #ifdef CONFIG_SMP
0988 unsigned int ttwu_pending;
0989 #endif
0990 u64 nr_switches;
0991
0992 #ifdef CONFIG_UCLAMP_TASK
0993
0994 struct uclamp_rq uclamp[UCLAMP_CNT] ____cacheline_aligned;
0995 unsigned int uclamp_flags;
0996 #define UCLAMP_FLAG_IDLE 0x01
0997 #endif
0998
0999 struct cfs_rq cfs;
1000 struct rt_rq rt;
1001 struct dl_rq dl;
1002
1003 #ifdef CONFIG_FAIR_GROUP_SCHED
1004
1005 struct list_head leaf_cfs_rq_list;
1006 struct list_head *tmp_alone_branch;
1007 #endif
1008
1009
1010
1011
1012
1013
1014
1015 unsigned int nr_uninterruptible;
1016
1017 struct task_struct __rcu *curr;
1018 struct task_struct *idle;
1019 struct task_struct *stop;
1020 unsigned long next_balance;
1021 struct mm_struct *prev_mm;
1022
1023 unsigned int clock_update_flags;
1024 u64 clock;
1025
1026 u64 clock_task ____cacheline_aligned;
1027 u64 clock_pelt;
1028 unsigned long lost_idle_time;
1029 u64 clock_pelt_idle;
1030 u64 clock_idle;
1031 #ifndef CONFIG_64BIT
1032 u64 clock_pelt_idle_copy;
1033 u64 clock_idle_copy;
1034 #endif
1035
1036 atomic_t nr_iowait;
1037
1038 #ifdef CONFIG_SCHED_DEBUG
1039 u64 last_seen_need_resched_ns;
1040 int ticks_without_resched;
1041 #endif
1042
1043 #ifdef CONFIG_MEMBARRIER
1044 int membarrier_state;
1045 #endif
1046
1047 #ifdef CONFIG_SMP
1048 struct root_domain *rd;
1049 struct sched_domain __rcu *sd;
1050
1051 unsigned long cpu_capacity;
1052 unsigned long cpu_capacity_orig;
1053
1054 struct callback_head *balance_callback;
1055
1056 unsigned char nohz_idle_balance;
1057 unsigned char idle_balance;
1058
1059 unsigned long misfit_task_load;
1060
1061
1062 int active_balance;
1063 int push_cpu;
1064 struct cpu_stop_work active_balance_work;
1065
1066
1067 int cpu;
1068 int online;
1069
1070 struct list_head cfs_tasks;
1071
1072 struct sched_avg avg_rt;
1073 struct sched_avg avg_dl;
1074 #ifdef CONFIG_HAVE_SCHED_AVG_IRQ
1075 struct sched_avg avg_irq;
1076 #endif
1077 #ifdef CONFIG_SCHED_THERMAL_PRESSURE
1078 struct sched_avg avg_thermal;
1079 #endif
1080 u64 idle_stamp;
1081 u64 avg_idle;
1082
1083 unsigned long wake_stamp;
1084 u64 wake_avg_idle;
1085
1086
1087 u64 max_idle_balance_cost;
1088
1089 #ifdef CONFIG_HOTPLUG_CPU
1090 struct rcuwait hotplug_wait;
1091 #endif
1092 #endif
1093
1094 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
1095 u64 prev_irq_time;
1096 #endif
1097 #ifdef CONFIG_PARAVIRT
1098 u64 prev_steal_time;
1099 #endif
1100 #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
1101 u64 prev_steal_time_rq;
1102 #endif
1103
1104
1105 unsigned long calc_load_update;
1106 long calc_load_active;
1107
1108 #ifdef CONFIG_SCHED_HRTICK
1109 #ifdef CONFIG_SMP
1110 call_single_data_t hrtick_csd;
1111 #endif
1112 struct hrtimer hrtick_timer;
1113 ktime_t hrtick_time;
1114 #endif
1115
1116 #ifdef CONFIG_SCHEDSTATS
1117
1118 struct sched_info rq_sched_info;
1119 unsigned long long rq_cpu_time;
1120
1121
1122
1123 unsigned int yld_count;
1124
1125
1126 unsigned int sched_count;
1127 unsigned int sched_goidle;
1128
1129
1130 unsigned int ttwu_count;
1131 unsigned int ttwu_local;
1132 #endif
1133
1134 #ifdef CONFIG_CPU_IDLE
1135
1136 struct cpuidle_state *idle_state;
1137 #endif
1138
1139 #ifdef CONFIG_SMP
1140 unsigned int nr_pinned;
1141 #endif
1142 unsigned int push_busy;
1143 struct cpu_stop_work push_work;
1144
1145 #ifdef CONFIG_SCHED_CORE
1146
1147 struct rq *core;
1148 struct task_struct *core_pick;
1149 unsigned int core_enabled;
1150 unsigned int core_sched_seq;
1151 struct rb_root core_tree;
1152
1153
1154 unsigned int core_task_seq;
1155 unsigned int core_pick_seq;
1156 unsigned long core_cookie;
1157 unsigned int core_forceidle_count;
1158 unsigned int core_forceidle_seq;
1159 unsigned int core_forceidle_occupation;
1160 u64 core_forceidle_start;
1161 #endif
1162 };
1163
1164 #ifdef CONFIG_FAIR_GROUP_SCHED
1165
1166
1167 static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
1168 {
1169 return cfs_rq->rq;
1170 }
1171
1172 #else
1173
1174 static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
1175 {
1176 return container_of(cfs_rq, struct rq, cfs);
1177 }
1178 #endif
1179
1180 static inline int cpu_of(struct rq *rq)
1181 {
1182 #ifdef CONFIG_SMP
1183 return rq->cpu;
1184 #else
1185 return 0;
1186 #endif
1187 }
1188
1189 #define MDF_PUSH 0x01
1190
1191 static inline bool is_migration_disabled(struct task_struct *p)
1192 {
1193 #ifdef CONFIG_SMP
1194 return p->migration_disabled;
1195 #else
1196 return false;
1197 #endif
1198 }
1199
1200 struct sched_group;
1201 #ifdef CONFIG_SCHED_CORE
1202 static inline struct cpumask *sched_group_span(struct sched_group *sg);
1203
1204 DECLARE_STATIC_KEY_FALSE(__sched_core_enabled);
1205
1206 static inline bool sched_core_enabled(struct rq *rq)
1207 {
1208 return static_branch_unlikely(&__sched_core_enabled) && rq->core_enabled;
1209 }
1210
1211 static inline bool sched_core_disabled(void)
1212 {
1213 return !static_branch_unlikely(&__sched_core_enabled);
1214 }
1215
1216
1217
1218
1219
1220 static inline raw_spinlock_t *rq_lockp(struct rq *rq)
1221 {
1222 if (sched_core_enabled(rq))
1223 return &rq->core->__lock;
1224
1225 return &rq->__lock;
1226 }
1227
1228 static inline raw_spinlock_t *__rq_lockp(struct rq *rq)
1229 {
1230 if (rq->core_enabled)
1231 return &rq->core->__lock;
1232
1233 return &rq->__lock;
1234 }
1235
1236 bool cfs_prio_less(struct task_struct *a, struct task_struct *b, bool fi);
1237
1238
1239
1240
1241
1242
1243
1244 static inline bool sched_cpu_cookie_match(struct rq *rq, struct task_struct *p)
1245 {
1246
1247 if (!sched_core_enabled(rq))
1248 return true;
1249
1250 return rq->core->core_cookie == p->core_cookie;
1251 }
1252
1253 static inline bool sched_core_cookie_match(struct rq *rq, struct task_struct *p)
1254 {
1255 bool idle_core = true;
1256 int cpu;
1257
1258
1259 if (!sched_core_enabled(rq))
1260 return true;
1261
1262 for_each_cpu(cpu, cpu_smt_mask(cpu_of(rq))) {
1263 if (!available_idle_cpu(cpu)) {
1264 idle_core = false;
1265 break;
1266 }
1267 }
1268
1269
1270
1271
1272
1273 return idle_core || rq->core->core_cookie == p->core_cookie;
1274 }
1275
1276 static inline bool sched_group_cookie_match(struct rq *rq,
1277 struct task_struct *p,
1278 struct sched_group *group)
1279 {
1280 int cpu;
1281
1282
1283 if (!sched_core_enabled(rq))
1284 return true;
1285
1286 for_each_cpu_and(cpu, sched_group_span(group), p->cpus_ptr) {
1287 if (sched_core_cookie_match(rq, p))
1288 return true;
1289 }
1290 return false;
1291 }
1292
1293 static inline bool sched_core_enqueued(struct task_struct *p)
1294 {
1295 return !RB_EMPTY_NODE(&p->core_node);
1296 }
1297
1298 extern void sched_core_enqueue(struct rq *rq, struct task_struct *p);
1299 extern void sched_core_dequeue(struct rq *rq, struct task_struct *p, int flags);
1300
1301 extern void sched_core_get(void);
1302 extern void sched_core_put(void);
1303
1304 #else
1305
1306 static inline bool sched_core_enabled(struct rq *rq)
1307 {
1308 return false;
1309 }
1310
1311 static inline bool sched_core_disabled(void)
1312 {
1313 return true;
1314 }
1315
1316 static inline raw_spinlock_t *rq_lockp(struct rq *rq)
1317 {
1318 return &rq->__lock;
1319 }
1320
1321 static inline raw_spinlock_t *__rq_lockp(struct rq *rq)
1322 {
1323 return &rq->__lock;
1324 }
1325
1326 static inline bool sched_cpu_cookie_match(struct rq *rq, struct task_struct *p)
1327 {
1328 return true;
1329 }
1330
1331 static inline bool sched_core_cookie_match(struct rq *rq, struct task_struct *p)
1332 {
1333 return true;
1334 }
1335
1336 static inline bool sched_group_cookie_match(struct rq *rq,
1337 struct task_struct *p,
1338 struct sched_group *group)
1339 {
1340 return true;
1341 }
1342 #endif
1343
1344 static inline void lockdep_assert_rq_held(struct rq *rq)
1345 {
1346 lockdep_assert_held(__rq_lockp(rq));
1347 }
1348
1349 extern void raw_spin_rq_lock_nested(struct rq *rq, int subclass);
1350 extern bool raw_spin_rq_trylock(struct rq *rq);
1351 extern void raw_spin_rq_unlock(struct rq *rq);
1352
1353 static inline void raw_spin_rq_lock(struct rq *rq)
1354 {
1355 raw_spin_rq_lock_nested(rq, 0);
1356 }
1357
1358 static inline void raw_spin_rq_lock_irq(struct rq *rq)
1359 {
1360 local_irq_disable();
1361 raw_spin_rq_lock(rq);
1362 }
1363
1364 static inline void raw_spin_rq_unlock_irq(struct rq *rq)
1365 {
1366 raw_spin_rq_unlock(rq);
1367 local_irq_enable();
1368 }
1369
1370 static inline unsigned long _raw_spin_rq_lock_irqsave(struct rq *rq)
1371 {
1372 unsigned long flags;
1373 local_irq_save(flags);
1374 raw_spin_rq_lock(rq);
1375 return flags;
1376 }
1377
1378 static inline void raw_spin_rq_unlock_irqrestore(struct rq *rq, unsigned long flags)
1379 {
1380 raw_spin_rq_unlock(rq);
1381 local_irq_restore(flags);
1382 }
1383
1384 #define raw_spin_rq_lock_irqsave(rq, flags) \
1385 do { \
1386 flags = _raw_spin_rq_lock_irqsave(rq); \
1387 } while (0)
1388
1389 #ifdef CONFIG_SCHED_SMT
1390 extern void __update_idle_core(struct rq *rq);
1391
1392 static inline void update_idle_core(struct rq *rq)
1393 {
1394 if (static_branch_unlikely(&sched_smt_present))
1395 __update_idle_core(rq);
1396 }
1397
1398 #else
1399 static inline void update_idle_core(struct rq *rq) { }
1400 #endif
1401
1402 DECLARE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
1403
1404 #define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
1405 #define this_rq() this_cpu_ptr(&runqueues)
1406 #define task_rq(p) cpu_rq(task_cpu(p))
1407 #define cpu_curr(cpu) (cpu_rq(cpu)->curr)
1408 #define raw_rq() raw_cpu_ptr(&runqueues)
1409
1410 #ifdef CONFIG_FAIR_GROUP_SCHED
1411 static inline struct task_struct *task_of(struct sched_entity *se)
1412 {
1413 SCHED_WARN_ON(!entity_is_task(se));
1414 return container_of(se, struct task_struct, se);
1415 }
1416
1417 static inline struct cfs_rq *task_cfs_rq(struct task_struct *p)
1418 {
1419 return p->se.cfs_rq;
1420 }
1421
1422
1423 static inline struct cfs_rq *cfs_rq_of(struct sched_entity *se)
1424 {
1425 return se->cfs_rq;
1426 }
1427
1428
1429 static inline struct cfs_rq *group_cfs_rq(struct sched_entity *grp)
1430 {
1431 return grp->my_q;
1432 }
1433
1434 #else
1435
1436 static inline struct task_struct *task_of(struct sched_entity *se)
1437 {
1438 return container_of(se, struct task_struct, se);
1439 }
1440
1441 static inline struct cfs_rq *task_cfs_rq(struct task_struct *p)
1442 {
1443 return &task_rq(p)->cfs;
1444 }
1445
1446 static inline struct cfs_rq *cfs_rq_of(struct sched_entity *se)
1447 {
1448 struct task_struct *p = task_of(se);
1449 struct rq *rq = task_rq(p);
1450
1451 return &rq->cfs;
1452 }
1453
1454
1455 static inline struct cfs_rq *group_cfs_rq(struct sched_entity *grp)
1456 {
1457 return NULL;
1458 }
1459 #endif
1460
1461 extern void update_rq_clock(struct rq *rq);
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486 #define RQCF_REQ_SKIP 0x01
1487 #define RQCF_ACT_SKIP 0x02
1488 #define RQCF_UPDATED 0x04
1489
1490 static inline void assert_clock_updated(struct rq *rq)
1491 {
1492
1493
1494
1495
1496 SCHED_WARN_ON(rq->clock_update_flags < RQCF_ACT_SKIP);
1497 }
1498
1499 static inline u64 rq_clock(struct rq *rq)
1500 {
1501 lockdep_assert_rq_held(rq);
1502 assert_clock_updated(rq);
1503
1504 return rq->clock;
1505 }
1506
1507 static inline u64 rq_clock_task(struct rq *rq)
1508 {
1509 lockdep_assert_rq_held(rq);
1510 assert_clock_updated(rq);
1511
1512 return rq->clock_task;
1513 }
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526 extern int sched_thermal_decay_shift;
1527
1528 static inline u64 rq_clock_thermal(struct rq *rq)
1529 {
1530 return rq_clock_task(rq) >> sched_thermal_decay_shift;
1531 }
1532
1533 static inline void rq_clock_skip_update(struct rq *rq)
1534 {
1535 lockdep_assert_rq_held(rq);
1536 rq->clock_update_flags |= RQCF_REQ_SKIP;
1537 }
1538
1539
1540
1541
1542
1543 static inline void rq_clock_cancel_skipupdate(struct rq *rq)
1544 {
1545 lockdep_assert_rq_held(rq);
1546 rq->clock_update_flags &= ~RQCF_REQ_SKIP;
1547 }
1548
1549 struct rq_flags {
1550 unsigned long flags;
1551 struct pin_cookie cookie;
1552 #ifdef CONFIG_SCHED_DEBUG
1553
1554
1555
1556
1557
1558 unsigned int clock_update_flags;
1559 #endif
1560 };
1561
1562 extern struct callback_head balance_push_callback;
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574 static inline void rq_pin_lock(struct rq *rq, struct rq_flags *rf)
1575 {
1576 rf->cookie = lockdep_pin_lock(__rq_lockp(rq));
1577
1578 #ifdef CONFIG_SCHED_DEBUG
1579 rq->clock_update_flags &= (RQCF_REQ_SKIP|RQCF_ACT_SKIP);
1580 rf->clock_update_flags = 0;
1581 #ifdef CONFIG_SMP
1582 SCHED_WARN_ON(rq->balance_callback && rq->balance_callback != &balance_push_callback);
1583 #endif
1584 #endif
1585 }
1586
1587 static inline void rq_unpin_lock(struct rq *rq, struct rq_flags *rf)
1588 {
1589 #ifdef CONFIG_SCHED_DEBUG
1590 if (rq->clock_update_flags > RQCF_ACT_SKIP)
1591 rf->clock_update_flags = RQCF_UPDATED;
1592 #endif
1593
1594 lockdep_unpin_lock(__rq_lockp(rq), rf->cookie);
1595 }
1596
1597 static inline void rq_repin_lock(struct rq *rq, struct rq_flags *rf)
1598 {
1599 lockdep_repin_lock(__rq_lockp(rq), rf->cookie);
1600
1601 #ifdef CONFIG_SCHED_DEBUG
1602
1603
1604
1605 rq->clock_update_flags |= rf->clock_update_flags;
1606 #endif
1607 }
1608
1609 struct rq *__task_rq_lock(struct task_struct *p, struct rq_flags *rf)
1610 __acquires(rq->lock);
1611
1612 struct rq *task_rq_lock(struct task_struct *p, struct rq_flags *rf)
1613 __acquires(p->pi_lock)
1614 __acquires(rq->lock);
1615
1616 static inline void __task_rq_unlock(struct rq *rq, struct rq_flags *rf)
1617 __releases(rq->lock)
1618 {
1619 rq_unpin_lock(rq, rf);
1620 raw_spin_rq_unlock(rq);
1621 }
1622
1623 static inline void
1624 task_rq_unlock(struct rq *rq, struct task_struct *p, struct rq_flags *rf)
1625 __releases(rq->lock)
1626 __releases(p->pi_lock)
1627 {
1628 rq_unpin_lock(rq, rf);
1629 raw_spin_rq_unlock(rq);
1630 raw_spin_unlock_irqrestore(&p->pi_lock, rf->flags);
1631 }
1632
1633 static inline void
1634 rq_lock_irqsave(struct rq *rq, struct rq_flags *rf)
1635 __acquires(rq->lock)
1636 {
1637 raw_spin_rq_lock_irqsave(rq, rf->flags);
1638 rq_pin_lock(rq, rf);
1639 }
1640
1641 static inline void
1642 rq_lock_irq(struct rq *rq, struct rq_flags *rf)
1643 __acquires(rq->lock)
1644 {
1645 raw_spin_rq_lock_irq(rq);
1646 rq_pin_lock(rq, rf);
1647 }
1648
1649 static inline void
1650 rq_lock(struct rq *rq, struct rq_flags *rf)
1651 __acquires(rq->lock)
1652 {
1653 raw_spin_rq_lock(rq);
1654 rq_pin_lock(rq, rf);
1655 }
1656
1657 static inline void
1658 rq_unlock_irqrestore(struct rq *rq, struct rq_flags *rf)
1659 __releases(rq->lock)
1660 {
1661 rq_unpin_lock(rq, rf);
1662 raw_spin_rq_unlock_irqrestore(rq, rf->flags);
1663 }
1664
1665 static inline void
1666 rq_unlock_irq(struct rq *rq, struct rq_flags *rf)
1667 __releases(rq->lock)
1668 {
1669 rq_unpin_lock(rq, rf);
1670 raw_spin_rq_unlock_irq(rq);
1671 }
1672
1673 static inline void
1674 rq_unlock(struct rq *rq, struct rq_flags *rf)
1675 __releases(rq->lock)
1676 {
1677 rq_unpin_lock(rq, rf);
1678 raw_spin_rq_unlock(rq);
1679 }
1680
1681 static inline struct rq *
1682 this_rq_lock_irq(struct rq_flags *rf)
1683 __acquires(rq->lock)
1684 {
1685 struct rq *rq;
1686
1687 local_irq_disable();
1688 rq = this_rq();
1689 rq_lock(rq, rf);
1690 return rq;
1691 }
1692
1693 #ifdef CONFIG_NUMA
1694 enum numa_topology_type {
1695 NUMA_DIRECT,
1696 NUMA_GLUELESS_MESH,
1697 NUMA_BACKPLANE,
1698 };
1699 extern enum numa_topology_type sched_numa_topology_type;
1700 extern int sched_max_numa_distance;
1701 extern bool find_numa_distance(int distance);
1702 extern void sched_init_numa(int offline_node);
1703 extern void sched_update_numa(int cpu, bool online);
1704 extern void sched_domains_numa_masks_set(unsigned int cpu);
1705 extern void sched_domains_numa_masks_clear(unsigned int cpu);
1706 extern int sched_numa_find_closest(const struct cpumask *cpus, int cpu);
1707 #else
1708 static inline void sched_init_numa(int offline_node) { }
1709 static inline void sched_update_numa(int cpu, bool online) { }
1710 static inline void sched_domains_numa_masks_set(unsigned int cpu) { }
1711 static inline void sched_domains_numa_masks_clear(unsigned int cpu) { }
1712 static inline int sched_numa_find_closest(const struct cpumask *cpus, int cpu)
1713 {
1714 return nr_cpu_ids;
1715 }
1716 #endif
1717
1718 #ifdef CONFIG_NUMA_BALANCING
1719
1720 enum numa_faults_stats {
1721 NUMA_MEM = 0,
1722 NUMA_CPU,
1723 NUMA_MEMBUF,
1724 NUMA_CPUBUF
1725 };
1726 extern void sched_setnuma(struct task_struct *p, int node);
1727 extern int migrate_task_to(struct task_struct *p, int cpu);
1728 extern int migrate_swap(struct task_struct *p, struct task_struct *t,
1729 int cpu, int scpu);
1730 extern void init_numa_balancing(unsigned long clone_flags, struct task_struct *p);
1731 #else
1732 static inline void
1733 init_numa_balancing(unsigned long clone_flags, struct task_struct *p)
1734 {
1735 }
1736 #endif
1737
1738 #ifdef CONFIG_SMP
1739
1740 static inline void
1741 queue_balance_callback(struct rq *rq,
1742 struct callback_head *head,
1743 void (*func)(struct rq *rq))
1744 {
1745 lockdep_assert_rq_held(rq);
1746
1747
1748
1749
1750
1751
1752 if (unlikely(head->next || rq->balance_callback == &balance_push_callback))
1753 return;
1754
1755 head->func = (void (*)(struct callback_head *))func;
1756 head->next = rq->balance_callback;
1757 rq->balance_callback = head;
1758 }
1759
1760 #define rcu_dereference_check_sched_domain(p) \
1761 rcu_dereference_check((p), \
1762 lockdep_is_held(&sched_domains_mutex))
1763
1764
1765
1766
1767
1768
1769
1770
1771 #define for_each_domain(cpu, __sd) \
1772 for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd); \
1773 __sd; __sd = __sd->parent)
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784 static inline struct sched_domain *highest_flag_domain(int cpu, int flag)
1785 {
1786 struct sched_domain *sd, *hsd = NULL;
1787
1788 for_each_domain(cpu, sd) {
1789 if (!(sd->flags & flag))
1790 break;
1791 hsd = sd;
1792 }
1793
1794 return hsd;
1795 }
1796
1797 static inline struct sched_domain *lowest_flag_domain(int cpu, int flag)
1798 {
1799 struct sched_domain *sd;
1800
1801 for_each_domain(cpu, sd) {
1802 if (sd->flags & flag)
1803 break;
1804 }
1805
1806 return sd;
1807 }
1808
1809 DECLARE_PER_CPU(struct sched_domain __rcu *, sd_llc);
1810 DECLARE_PER_CPU(int, sd_llc_size);
1811 DECLARE_PER_CPU(int, sd_llc_id);
1812 DECLARE_PER_CPU(struct sched_domain_shared __rcu *, sd_llc_shared);
1813 DECLARE_PER_CPU(struct sched_domain __rcu *, sd_numa);
1814 DECLARE_PER_CPU(struct sched_domain __rcu *, sd_asym_packing);
1815 DECLARE_PER_CPU(struct sched_domain __rcu *, sd_asym_cpucapacity);
1816 extern struct static_key_false sched_asym_cpucapacity;
1817
1818 struct sched_group_capacity {
1819 atomic_t ref;
1820
1821
1822
1823
1824 unsigned long capacity;
1825 unsigned long min_capacity;
1826 unsigned long max_capacity;
1827 unsigned long next_update;
1828 int imbalance;
1829
1830 #ifdef CONFIG_SCHED_DEBUG
1831 int id;
1832 #endif
1833
1834 unsigned long cpumask[];
1835 };
1836
1837 struct sched_group {
1838 struct sched_group *next;
1839 atomic_t ref;
1840
1841 unsigned int group_weight;
1842 struct sched_group_capacity *sgc;
1843 int asym_prefer_cpu;
1844 int flags;
1845
1846
1847
1848
1849
1850
1851
1852
1853 unsigned long cpumask[];
1854 };
1855
1856 static inline struct cpumask *sched_group_span(struct sched_group *sg)
1857 {
1858 return to_cpumask(sg->cpumask);
1859 }
1860
1861
1862
1863
1864 static inline struct cpumask *group_balance_mask(struct sched_group *sg)
1865 {
1866 return to_cpumask(sg->sgc->cpumask);
1867 }
1868
1869 extern int group_balance_cpu(struct sched_group *sg);
1870
1871 #ifdef CONFIG_SCHED_DEBUG
1872 void update_sched_domain_debugfs(void);
1873 void dirty_sched_domain_sysctl(int cpu);
1874 #else
1875 static inline void update_sched_domain_debugfs(void)
1876 {
1877 }
1878 static inline void dirty_sched_domain_sysctl(int cpu)
1879 {
1880 }
1881 #endif
1882
1883 extern int sched_update_scaling(void);
1884 #endif
1885
1886 #include "stats.h"
1887
1888 #if defined(CONFIG_SCHED_CORE) && defined(CONFIG_SCHEDSTATS)
1889
1890 extern void __sched_core_account_forceidle(struct rq *rq);
1891
1892 static inline void sched_core_account_forceidle(struct rq *rq)
1893 {
1894 if (schedstat_enabled())
1895 __sched_core_account_forceidle(rq);
1896 }
1897
1898 extern void __sched_core_tick(struct rq *rq);
1899
1900 static inline void sched_core_tick(struct rq *rq)
1901 {
1902 if (sched_core_enabled(rq) && schedstat_enabled())
1903 __sched_core_tick(rq);
1904 }
1905
1906 #else
1907
1908 static inline void sched_core_account_forceidle(struct rq *rq) {}
1909
1910 static inline void sched_core_tick(struct rq *rq) {}
1911
1912 #endif
1913
1914 #ifdef CONFIG_CGROUP_SCHED
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929 static inline struct task_group *task_group(struct task_struct *p)
1930 {
1931 return p->sched_task_group;
1932 }
1933
1934
1935 static inline void set_task_rq(struct task_struct *p, unsigned int cpu)
1936 {
1937 #if defined(CONFIG_FAIR_GROUP_SCHED) || defined(CONFIG_RT_GROUP_SCHED)
1938 struct task_group *tg = task_group(p);
1939 #endif
1940
1941 #ifdef CONFIG_FAIR_GROUP_SCHED
1942 set_task_rq_fair(&p->se, p->se.cfs_rq, tg->cfs_rq[cpu]);
1943 p->se.cfs_rq = tg->cfs_rq[cpu];
1944 p->se.parent = tg->se[cpu];
1945 #endif
1946
1947 #ifdef CONFIG_RT_GROUP_SCHED
1948 p->rt.rt_rq = tg->rt_rq[cpu];
1949 p->rt.parent = tg->rt_se[cpu];
1950 #endif
1951 }
1952
1953 #else
1954
1955 static inline void set_task_rq(struct task_struct *p, unsigned int cpu) { }
1956 static inline struct task_group *task_group(struct task_struct *p)
1957 {
1958 return NULL;
1959 }
1960
1961 #endif
1962
1963 static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu)
1964 {
1965 set_task_rq(p, cpu);
1966 #ifdef CONFIG_SMP
1967
1968
1969
1970
1971
1972 smp_wmb();
1973 WRITE_ONCE(task_thread_info(p)->cpu, cpu);
1974 p->wake_cpu = cpu;
1975 #endif
1976 }
1977
1978
1979
1980
1981 #ifdef CONFIG_SCHED_DEBUG
1982 # define const_debug __read_mostly
1983 #else
1984 # define const_debug const
1985 #endif
1986
1987 #define SCHED_FEAT(name, enabled) \
1988 __SCHED_FEAT_##name ,
1989
1990 enum {
1991 #include "features.h"
1992 __SCHED_FEAT_NR,
1993 };
1994
1995 #undef SCHED_FEAT
1996
1997 #ifdef CONFIG_SCHED_DEBUG
1998
1999
2000
2001
2002
2003 extern const_debug unsigned int sysctl_sched_features;
2004
2005 #ifdef CONFIG_JUMP_LABEL
2006 #define SCHED_FEAT(name, enabled) \
2007 static __always_inline bool static_branch_##name(struct static_key *key) \
2008 { \
2009 return static_key_##enabled(key); \
2010 }
2011
2012 #include "features.h"
2013 #undef SCHED_FEAT
2014
2015 extern struct static_key sched_feat_keys[__SCHED_FEAT_NR];
2016 #define sched_feat(x) (static_branch_##x(&sched_feat_keys[__SCHED_FEAT_##x]))
2017
2018 #else
2019
2020 #define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
2021
2022 #endif
2023
2024 #else
2025
2026
2027
2028
2029
2030
2031 #define SCHED_FEAT(name, enabled) \
2032 (1UL << __SCHED_FEAT_##name) * enabled |
2033 static const_debug __maybe_unused unsigned int sysctl_sched_features =
2034 #include "features.h"
2035 0;
2036 #undef SCHED_FEAT
2037
2038 #define sched_feat(x) !!(sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
2039
2040 #endif
2041
2042 extern struct static_key_false sched_numa_balancing;
2043 extern struct static_key_false sched_schedstats;
2044
2045 static inline u64 global_rt_period(void)
2046 {
2047 return (u64)sysctl_sched_rt_period * NSEC_PER_USEC;
2048 }
2049
2050 static inline u64 global_rt_runtime(void)
2051 {
2052 if (sysctl_sched_rt_runtime < 0)
2053 return RUNTIME_INF;
2054
2055 return (u64)sysctl_sched_rt_runtime * NSEC_PER_USEC;
2056 }
2057
2058 static inline int task_current(struct rq *rq, struct task_struct *p)
2059 {
2060 return rq->curr == p;
2061 }
2062
2063 static inline int task_running(struct rq *rq, struct task_struct *p)
2064 {
2065 #ifdef CONFIG_SMP
2066 return p->on_cpu;
2067 #else
2068 return task_current(rq, p);
2069 #endif
2070 }
2071
2072 static inline int task_on_rq_queued(struct task_struct *p)
2073 {
2074 return p->on_rq == TASK_ON_RQ_QUEUED;
2075 }
2076
2077 static inline int task_on_rq_migrating(struct task_struct *p)
2078 {
2079 return READ_ONCE(p->on_rq) == TASK_ON_RQ_MIGRATING;
2080 }
2081
2082
2083 #define WF_EXEC 0x02
2084 #define WF_FORK 0x04
2085 #define WF_TTWU 0x08
2086
2087 #define WF_SYNC 0x10
2088 #define WF_MIGRATED 0x20
2089
2090 #ifdef CONFIG_SMP
2091 static_assert(WF_EXEC == SD_BALANCE_EXEC);
2092 static_assert(WF_FORK == SD_BALANCE_FORK);
2093 static_assert(WF_TTWU == SD_BALANCE_WAKE);
2094 #endif
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105 #define WEIGHT_IDLEPRIO 3
2106 #define WMULT_IDLEPRIO 1431655765
2107
2108 extern const int sched_prio_to_weight[40];
2109 extern const u32 sched_prio_to_wmult[40];
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130 #define DEQUEUE_SLEEP 0x01
2131 #define DEQUEUE_SAVE 0x02
2132 #define DEQUEUE_MOVE 0x04
2133 #define DEQUEUE_NOCLOCK 0x08
2134
2135 #define ENQUEUE_WAKEUP 0x01
2136 #define ENQUEUE_RESTORE 0x02
2137 #define ENQUEUE_MOVE 0x04
2138 #define ENQUEUE_NOCLOCK 0x08
2139
2140 #define ENQUEUE_HEAD 0x10
2141 #define ENQUEUE_REPLENISH 0x20
2142 #ifdef CONFIG_SMP
2143 #define ENQUEUE_MIGRATED 0x40
2144 #else
2145 #define ENQUEUE_MIGRATED 0x00
2146 #endif
2147
2148 #define RETRY_TASK ((void *)-1UL)
2149
2150 struct sched_class {
2151
2152 #ifdef CONFIG_UCLAMP_TASK
2153 int uclamp_enabled;
2154 #endif
2155
2156 void (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);
2157 void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);
2158 void (*yield_task) (struct rq *rq);
2159 bool (*yield_to_task)(struct rq *rq, struct task_struct *p);
2160
2161 void (*check_preempt_curr)(struct rq *rq, struct task_struct *p, int flags);
2162
2163 struct task_struct *(*pick_next_task)(struct rq *rq);
2164
2165 void (*put_prev_task)(struct rq *rq, struct task_struct *p);
2166 void (*set_next_task)(struct rq *rq, struct task_struct *p, bool first);
2167
2168 #ifdef CONFIG_SMP
2169 int (*balance)(struct rq *rq, struct task_struct *prev, struct rq_flags *rf);
2170 int (*select_task_rq)(struct task_struct *p, int task_cpu, int flags);
2171
2172 struct task_struct * (*pick_task)(struct rq *rq);
2173
2174 void (*migrate_task_rq)(struct task_struct *p, int new_cpu);
2175
2176 void (*task_woken)(struct rq *this_rq, struct task_struct *task);
2177
2178 void (*set_cpus_allowed)(struct task_struct *p,
2179 const struct cpumask *newmask,
2180 u32 flags);
2181
2182 void (*rq_online)(struct rq *rq);
2183 void (*rq_offline)(struct rq *rq);
2184
2185 struct rq *(*find_lock_rq)(struct task_struct *p, struct rq *rq);
2186 #endif
2187
2188 void (*task_tick)(struct rq *rq, struct task_struct *p, int queued);
2189 void (*task_fork)(struct task_struct *p);
2190 void (*task_dead)(struct task_struct *p);
2191
2192
2193
2194
2195
2196
2197 void (*switched_from)(struct rq *this_rq, struct task_struct *task);
2198 void (*switched_to) (struct rq *this_rq, struct task_struct *task);
2199 void (*prio_changed) (struct rq *this_rq, struct task_struct *task,
2200 int oldprio);
2201
2202 unsigned int (*get_rr_interval)(struct rq *rq,
2203 struct task_struct *task);
2204
2205 void (*update_curr)(struct rq *rq);
2206
2207 #define TASK_SET_GROUP 0
2208 #define TASK_MOVE_GROUP 1
2209
2210 #ifdef CONFIG_FAIR_GROUP_SCHED
2211 void (*task_change_group)(struct task_struct *p, int type);
2212 #endif
2213 };
2214
2215 static inline void put_prev_task(struct rq *rq, struct task_struct *prev)
2216 {
2217 WARN_ON_ONCE(rq->curr != prev);
2218 prev->sched_class->put_prev_task(rq, prev);
2219 }
2220
2221 static inline void set_next_task(struct rq *rq, struct task_struct *next)
2222 {
2223 next->sched_class->set_next_task(rq, next, false);
2224 }
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237 #define DEFINE_SCHED_CLASS(name) \
2238 const struct sched_class name##_sched_class \
2239 __aligned(__alignof__(struct sched_class)) \
2240 __section("__" #name "_sched_class")
2241
2242
2243 extern struct sched_class __sched_class_highest[];
2244 extern struct sched_class __sched_class_lowest[];
2245
2246 #define for_class_range(class, _from, _to) \
2247 for (class = (_from); class < (_to); class++)
2248
2249 #define for_each_class(class) \
2250 for_class_range(class, __sched_class_highest, __sched_class_lowest)
2251
2252 #define sched_class_above(_a, _b) ((_a) < (_b))
2253
2254 extern const struct sched_class stop_sched_class;
2255 extern const struct sched_class dl_sched_class;
2256 extern const struct sched_class rt_sched_class;
2257 extern const struct sched_class fair_sched_class;
2258 extern const struct sched_class idle_sched_class;
2259
2260 static inline bool sched_stop_runnable(struct rq *rq)
2261 {
2262 return rq->stop && task_on_rq_queued(rq->stop);
2263 }
2264
2265 static inline bool sched_dl_runnable(struct rq *rq)
2266 {
2267 return rq->dl.dl_nr_running > 0;
2268 }
2269
2270 static inline bool sched_rt_runnable(struct rq *rq)
2271 {
2272 return rq->rt.rt_queued > 0;
2273 }
2274
2275 static inline bool sched_fair_runnable(struct rq *rq)
2276 {
2277 return rq->cfs.nr_running > 0;
2278 }
2279
2280 extern struct task_struct *pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf);
2281 extern struct task_struct *pick_next_task_idle(struct rq *rq);
2282
2283 #define SCA_CHECK 0x01
2284 #define SCA_MIGRATE_DISABLE 0x02
2285 #define SCA_MIGRATE_ENABLE 0x04
2286 #define SCA_USER 0x08
2287
2288 #ifdef CONFIG_SMP
2289
2290 extern void update_group_capacity(struct sched_domain *sd, int cpu);
2291
2292 extern void trigger_load_balance(struct rq *rq);
2293
2294 extern void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_mask, u32 flags);
2295
2296 static inline struct task_struct *get_push_task(struct rq *rq)
2297 {
2298 struct task_struct *p = rq->curr;
2299
2300 lockdep_assert_rq_held(rq);
2301
2302 if (rq->push_busy)
2303 return NULL;
2304
2305 if (p->nr_cpus_allowed == 1)
2306 return NULL;
2307
2308 if (p->migration_disabled)
2309 return NULL;
2310
2311 rq->push_busy = true;
2312 return get_task_struct(p);
2313 }
2314
2315 extern int push_cpu_stop(void *arg);
2316
2317 #endif
2318
2319 #ifdef CONFIG_CPU_IDLE
2320 static inline void idle_set_state(struct rq *rq,
2321 struct cpuidle_state *idle_state)
2322 {
2323 rq->idle_state = idle_state;
2324 }
2325
2326 static inline struct cpuidle_state *idle_get_state(struct rq *rq)
2327 {
2328 SCHED_WARN_ON(!rcu_read_lock_held());
2329
2330 return rq->idle_state;
2331 }
2332 #else
2333 static inline void idle_set_state(struct rq *rq,
2334 struct cpuidle_state *idle_state)
2335 {
2336 }
2337
2338 static inline struct cpuidle_state *idle_get_state(struct rq *rq)
2339 {
2340 return NULL;
2341 }
2342 #endif
2343
2344 extern void schedule_idle(void);
2345
2346 extern void sysrq_sched_debug_show(void);
2347 extern void sched_init_granularity(void);
2348 extern void update_max_interval(void);
2349
2350 extern void init_sched_dl_class(void);
2351 extern void init_sched_rt_class(void);
2352 extern void init_sched_fair_class(void);
2353
2354 extern void reweight_task(struct task_struct *p, int prio);
2355
2356 extern void resched_curr(struct rq *rq);
2357 extern void resched_cpu(int cpu);
2358
2359 extern struct rt_bandwidth def_rt_bandwidth;
2360 extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime);
2361 extern bool sched_rt_bandwidth_account(struct rt_rq *rt_rq);
2362
2363 extern void init_dl_bandwidth(struct dl_bandwidth *dl_b, u64 period, u64 runtime);
2364 extern void init_dl_task_timer(struct sched_dl_entity *dl_se);
2365 extern void init_dl_inactive_task_timer(struct sched_dl_entity *dl_se);
2366
2367 #define BW_SHIFT 20
2368 #define BW_UNIT (1 << BW_SHIFT)
2369 #define RATIO_SHIFT 8
2370 #define MAX_BW_BITS (64 - BW_SHIFT)
2371 #define MAX_BW ((1ULL << MAX_BW_BITS) - 1)
2372 unsigned long to_ratio(u64 period, u64 runtime);
2373
2374 extern void init_entity_runnable_average(struct sched_entity *se);
2375 extern void post_init_entity_util_avg(struct task_struct *p);
2376
2377 #ifdef CONFIG_NO_HZ_FULL
2378 extern bool sched_can_stop_tick(struct rq *rq);
2379 extern int __init sched_tick_offload_init(void);
2380
2381
2382
2383
2384
2385
2386 static inline void sched_update_tick_dependency(struct rq *rq)
2387 {
2388 int cpu = cpu_of(rq);
2389
2390 if (!tick_nohz_full_cpu(cpu))
2391 return;
2392
2393 if (sched_can_stop_tick(rq))
2394 tick_nohz_dep_clear_cpu(cpu, TICK_DEP_BIT_SCHED);
2395 else
2396 tick_nohz_dep_set_cpu(cpu, TICK_DEP_BIT_SCHED);
2397 }
2398 #else
2399 static inline int sched_tick_offload_init(void) { return 0; }
2400 static inline void sched_update_tick_dependency(struct rq *rq) { }
2401 #endif
2402
2403 static inline void add_nr_running(struct rq *rq, unsigned count)
2404 {
2405 unsigned prev_nr = rq->nr_running;
2406
2407 rq->nr_running = prev_nr + count;
2408 if (trace_sched_update_nr_running_tp_enabled()) {
2409 call_trace_sched_update_nr_running(rq, count);
2410 }
2411
2412 #ifdef CONFIG_SMP
2413 if (prev_nr < 2 && rq->nr_running >= 2) {
2414 if (!READ_ONCE(rq->rd->overload))
2415 WRITE_ONCE(rq->rd->overload, 1);
2416 }
2417 #endif
2418
2419 sched_update_tick_dependency(rq);
2420 }
2421
2422 static inline void sub_nr_running(struct rq *rq, unsigned count)
2423 {
2424 rq->nr_running -= count;
2425 if (trace_sched_update_nr_running_tp_enabled()) {
2426 call_trace_sched_update_nr_running(rq, -count);
2427 }
2428
2429
2430 sched_update_tick_dependency(rq);
2431 }
2432
2433 extern void activate_task(struct rq *rq, struct task_struct *p, int flags);
2434 extern void deactivate_task(struct rq *rq, struct task_struct *p, int flags);
2435
2436 extern void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags);
2437
2438 extern const_debug unsigned int sysctl_sched_nr_migrate;
2439 extern const_debug unsigned int sysctl_sched_migration_cost;
2440
2441 #ifdef CONFIG_SCHED_DEBUG
2442 extern unsigned int sysctl_sched_latency;
2443 extern unsigned int sysctl_sched_min_granularity;
2444 extern unsigned int sysctl_sched_idle_min_granularity;
2445 extern unsigned int sysctl_sched_wakeup_granularity;
2446 extern int sysctl_resched_latency_warn_ms;
2447 extern int sysctl_resched_latency_warn_once;
2448
2449 extern unsigned int sysctl_sched_tunable_scaling;
2450
2451 extern unsigned int sysctl_numa_balancing_scan_delay;
2452 extern unsigned int sysctl_numa_balancing_scan_period_min;
2453 extern unsigned int sysctl_numa_balancing_scan_period_max;
2454 extern unsigned int sysctl_numa_balancing_scan_size;
2455 #endif
2456
2457 #ifdef CONFIG_SCHED_HRTICK
2458
2459
2460
2461
2462
2463
2464 static inline int hrtick_enabled(struct rq *rq)
2465 {
2466 if (!cpu_active(cpu_of(rq)))
2467 return 0;
2468 return hrtimer_is_hres_active(&rq->hrtick_timer);
2469 }
2470
2471 static inline int hrtick_enabled_fair(struct rq *rq)
2472 {
2473 if (!sched_feat(HRTICK))
2474 return 0;
2475 return hrtick_enabled(rq);
2476 }
2477
2478 static inline int hrtick_enabled_dl(struct rq *rq)
2479 {
2480 if (!sched_feat(HRTICK_DL))
2481 return 0;
2482 return hrtick_enabled(rq);
2483 }
2484
2485 void hrtick_start(struct rq *rq, u64 delay);
2486
2487 #else
2488
2489 static inline int hrtick_enabled_fair(struct rq *rq)
2490 {
2491 return 0;
2492 }
2493
2494 static inline int hrtick_enabled_dl(struct rq *rq)
2495 {
2496 return 0;
2497 }
2498
2499 static inline int hrtick_enabled(struct rq *rq)
2500 {
2501 return 0;
2502 }
2503
2504 #endif
2505
2506 #ifndef arch_scale_freq_tick
2507 static __always_inline
2508 void arch_scale_freq_tick(void)
2509 {
2510 }
2511 #endif
2512
2513 #ifndef arch_scale_freq_capacity
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524 static __always_inline
2525 unsigned long arch_scale_freq_capacity(int cpu)
2526 {
2527 return SCHED_CAPACITY_SCALE;
2528 }
2529 #endif
2530
2531 #ifdef CONFIG_SCHED_DEBUG
2532
2533
2534
2535
2536
2537
2538 static inline void double_rq_clock_clear_update(struct rq *rq1, struct rq *rq2)
2539 {
2540 rq1->clock_update_flags &= (RQCF_REQ_SKIP|RQCF_ACT_SKIP);
2541
2542 #ifdef CONFIG_SMP
2543 rq2->clock_update_flags &= (RQCF_REQ_SKIP|RQCF_ACT_SKIP);
2544 #endif
2545 }
2546 #else
2547 static inline void double_rq_clock_clear_update(struct rq *rq1, struct rq *rq2) {}
2548 #endif
2549
2550 #ifdef CONFIG_SMP
2551
2552 static inline bool rq_order_less(struct rq *rq1, struct rq *rq2)
2553 {
2554 #ifdef CONFIG_SCHED_CORE
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566 if (rq1->core->cpu < rq2->core->cpu)
2567 return true;
2568 if (rq1->core->cpu > rq2->core->cpu)
2569 return false;
2570
2571
2572
2573
2574 #endif
2575 return rq1->cpu < rq2->cpu;
2576 }
2577
2578 extern void double_rq_lock(struct rq *rq1, struct rq *rq2);
2579
2580 #ifdef CONFIG_PREEMPTION
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590 static inline int _double_lock_balance(struct rq *this_rq, struct rq *busiest)
2591 __releases(this_rq->lock)
2592 __acquires(busiest->lock)
2593 __acquires(this_rq->lock)
2594 {
2595 raw_spin_rq_unlock(this_rq);
2596 double_rq_lock(this_rq, busiest);
2597
2598 return 1;
2599 }
2600
2601 #else
2602
2603
2604
2605
2606
2607
2608
2609 static inline int _double_lock_balance(struct rq *this_rq, struct rq *busiest)
2610 __releases(this_rq->lock)
2611 __acquires(busiest->lock)
2612 __acquires(this_rq->lock)
2613 {
2614 if (__rq_lockp(this_rq) == __rq_lockp(busiest) ||
2615 likely(raw_spin_rq_trylock(busiest))) {
2616 double_rq_clock_clear_update(this_rq, busiest);
2617 return 0;
2618 }
2619
2620 if (rq_order_less(this_rq, busiest)) {
2621 raw_spin_rq_lock_nested(busiest, SINGLE_DEPTH_NESTING);
2622 double_rq_clock_clear_update(this_rq, busiest);
2623 return 0;
2624 }
2625
2626 raw_spin_rq_unlock(this_rq);
2627 double_rq_lock(this_rq, busiest);
2628
2629 return 1;
2630 }
2631
2632 #endif
2633
2634
2635
2636
2637 static inline int double_lock_balance(struct rq *this_rq, struct rq *busiest)
2638 {
2639 lockdep_assert_irqs_disabled();
2640
2641 return _double_lock_balance(this_rq, busiest);
2642 }
2643
2644 static inline void double_unlock_balance(struct rq *this_rq, struct rq *busiest)
2645 __releases(busiest->lock)
2646 {
2647 if (__rq_lockp(this_rq) != __rq_lockp(busiest))
2648 raw_spin_rq_unlock(busiest);
2649 lock_set_subclass(&__rq_lockp(this_rq)->dep_map, 0, _RET_IP_);
2650 }
2651
2652 static inline void double_lock(spinlock_t *l1, spinlock_t *l2)
2653 {
2654 if (l1 > l2)
2655 swap(l1, l2);
2656
2657 spin_lock(l1);
2658 spin_lock_nested(l2, SINGLE_DEPTH_NESTING);
2659 }
2660
2661 static inline void double_lock_irq(spinlock_t *l1, spinlock_t *l2)
2662 {
2663 if (l1 > l2)
2664 swap(l1, l2);
2665
2666 spin_lock_irq(l1);
2667 spin_lock_nested(l2, SINGLE_DEPTH_NESTING);
2668 }
2669
2670 static inline void double_raw_lock(raw_spinlock_t *l1, raw_spinlock_t *l2)
2671 {
2672 if (l1 > l2)
2673 swap(l1, l2);
2674
2675 raw_spin_lock(l1);
2676 raw_spin_lock_nested(l2, SINGLE_DEPTH_NESTING);
2677 }
2678
2679
2680
2681
2682
2683
2684
2685 static inline void double_rq_unlock(struct rq *rq1, struct rq *rq2)
2686 __releases(rq1->lock)
2687 __releases(rq2->lock)
2688 {
2689 if (__rq_lockp(rq1) != __rq_lockp(rq2))
2690 raw_spin_rq_unlock(rq2);
2691 else
2692 __release(rq2->lock);
2693 raw_spin_rq_unlock(rq1);
2694 }
2695
2696 extern void set_rq_online (struct rq *rq);
2697 extern void set_rq_offline(struct rq *rq);
2698 extern bool sched_smp_initialized;
2699
2700 #else
2701
2702
2703
2704
2705
2706
2707
2708 static inline void double_rq_lock(struct rq *rq1, struct rq *rq2)
2709 __acquires(rq1->lock)
2710 __acquires(rq2->lock)
2711 {
2712 BUG_ON(!irqs_disabled());
2713 BUG_ON(rq1 != rq2);
2714 raw_spin_rq_lock(rq1);
2715 __acquire(rq2->lock);
2716 double_rq_clock_clear_update(rq1, rq2);
2717 }
2718
2719
2720
2721
2722
2723
2724
2725 static inline void double_rq_unlock(struct rq *rq1, struct rq *rq2)
2726 __releases(rq1->lock)
2727 __releases(rq2->lock)
2728 {
2729 BUG_ON(rq1 != rq2);
2730 raw_spin_rq_unlock(rq1);
2731 __release(rq2->lock);
2732 }
2733
2734 #endif
2735
2736 extern struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq);
2737 extern struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq);
2738
2739 #ifdef CONFIG_SCHED_DEBUG
2740 extern bool sched_debug_verbose;
2741
2742 extern void print_cfs_stats(struct seq_file *m, int cpu);
2743 extern void print_rt_stats(struct seq_file *m, int cpu);
2744 extern void print_dl_stats(struct seq_file *m, int cpu);
2745 extern void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq);
2746 extern void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq);
2747 extern void print_dl_rq(struct seq_file *m, int cpu, struct dl_rq *dl_rq);
2748
2749 extern void resched_latency_warn(int cpu, u64 latency);
2750 #ifdef CONFIG_NUMA_BALANCING
2751 extern void
2752 show_numa_stats(struct task_struct *p, struct seq_file *m);
2753 extern void
2754 print_numa_stats(struct seq_file *m, int node, unsigned long tsf,
2755 unsigned long tpf, unsigned long gsf, unsigned long gpf);
2756 #endif
2757 #else
2758 static inline void resched_latency_warn(int cpu, u64 latency) {}
2759 #endif
2760
2761 extern void init_cfs_rq(struct cfs_rq *cfs_rq);
2762 extern void init_rt_rq(struct rt_rq *rt_rq);
2763 extern void init_dl_rq(struct dl_rq *dl_rq);
2764
2765 extern void cfs_bandwidth_usage_inc(void);
2766 extern void cfs_bandwidth_usage_dec(void);
2767
2768 #ifdef CONFIG_NO_HZ_COMMON
2769 #define NOHZ_BALANCE_KICK_BIT 0
2770 #define NOHZ_STATS_KICK_BIT 1
2771 #define NOHZ_NEWILB_KICK_BIT 2
2772 #define NOHZ_NEXT_KICK_BIT 3
2773
2774
2775 #define NOHZ_BALANCE_KICK BIT(NOHZ_BALANCE_KICK_BIT)
2776
2777 #define NOHZ_STATS_KICK BIT(NOHZ_STATS_KICK_BIT)
2778
2779 #define NOHZ_NEWILB_KICK BIT(NOHZ_NEWILB_KICK_BIT)
2780
2781 #define NOHZ_NEXT_KICK BIT(NOHZ_NEXT_KICK_BIT)
2782
2783 #define NOHZ_KICK_MASK (NOHZ_BALANCE_KICK | NOHZ_STATS_KICK | NOHZ_NEXT_KICK)
2784
2785 #define nohz_flags(cpu) (&cpu_rq(cpu)->nohz_flags)
2786
2787 extern void nohz_balance_exit_idle(struct rq *rq);
2788 #else
2789 static inline void nohz_balance_exit_idle(struct rq *rq) { }
2790 #endif
2791
2792 #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON)
2793 extern void nohz_run_idle_balance(int cpu);
2794 #else
2795 static inline void nohz_run_idle_balance(int cpu) { }
2796 #endif
2797
2798 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
2799 struct irqtime {
2800 u64 total;
2801 u64 tick_delta;
2802 u64 irq_start_time;
2803 struct u64_stats_sync sync;
2804 };
2805
2806 DECLARE_PER_CPU(struct irqtime, cpu_irqtime);
2807
2808
2809
2810
2811
2812
2813 static inline u64 irq_time_read(int cpu)
2814 {
2815 struct irqtime *irqtime = &per_cpu(cpu_irqtime, cpu);
2816 unsigned int seq;
2817 u64 total;
2818
2819 do {
2820 seq = __u64_stats_fetch_begin(&irqtime->sync);
2821 total = irqtime->total;
2822 } while (__u64_stats_fetch_retry(&irqtime->sync, seq));
2823
2824 return total;
2825 }
2826 #endif
2827
2828 #ifdef CONFIG_CPU_FREQ
2829 DECLARE_PER_CPU(struct update_util_data __rcu *, cpufreq_update_util_data);
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853 static inline void cpufreq_update_util(struct rq *rq, unsigned int flags)
2854 {
2855 struct update_util_data *data;
2856
2857 data = rcu_dereference_sched(*per_cpu_ptr(&cpufreq_update_util_data,
2858 cpu_of(rq)));
2859 if (data)
2860 data->func(data, rq_clock(rq), flags);
2861 }
2862 #else
2863 static inline void cpufreq_update_util(struct rq *rq, unsigned int flags) {}
2864 #endif
2865
2866 #ifdef arch_scale_freq_capacity
2867 # ifndef arch_scale_freq_invariant
2868 # define arch_scale_freq_invariant() true
2869 # endif
2870 #else
2871 # define arch_scale_freq_invariant() false
2872 #endif
2873
2874 #ifdef CONFIG_SMP
2875 static inline unsigned long capacity_orig_of(int cpu)
2876 {
2877 return cpu_rq(cpu)->cpu_capacity_orig;
2878 }
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890 enum cpu_util_type {
2891 FREQUENCY_UTIL,
2892 ENERGY_UTIL,
2893 };
2894
2895 unsigned long effective_cpu_util(int cpu, unsigned long util_cfs,
2896 enum cpu_util_type type,
2897 struct task_struct *p);
2898
2899 static inline unsigned long cpu_bw_dl(struct rq *rq)
2900 {
2901 return (rq->dl.running_bw * SCHED_CAPACITY_SCALE) >> BW_SHIFT;
2902 }
2903
2904 static inline unsigned long cpu_util_dl(struct rq *rq)
2905 {
2906 return READ_ONCE(rq->avg_dl.util_avg);
2907 }
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941 static inline unsigned long cpu_util_cfs(int cpu)
2942 {
2943 struct cfs_rq *cfs_rq;
2944 unsigned long util;
2945
2946 cfs_rq = &cpu_rq(cpu)->cfs;
2947 util = READ_ONCE(cfs_rq->avg.util_avg);
2948
2949 if (sched_feat(UTIL_EST)) {
2950 util = max_t(unsigned long, util,
2951 READ_ONCE(cfs_rq->avg.util_est.enqueued));
2952 }
2953
2954 return min(util, capacity_orig_of(cpu));
2955 }
2956
2957 static inline unsigned long cpu_util_rt(struct rq *rq)
2958 {
2959 return READ_ONCE(rq->avg_rt.util_avg);
2960 }
2961 #endif
2962
2963 #ifdef CONFIG_UCLAMP_TASK
2964 unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983 static __always_inline
2984 unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
2985 struct task_struct *p)
2986 {
2987 unsigned long min_util = 0;
2988 unsigned long max_util = 0;
2989
2990 if (!static_branch_likely(&sched_uclamp_used))
2991 return util;
2992
2993 if (p) {
2994 min_util = uclamp_eff_value(p, UCLAMP_MIN);
2995 max_util = uclamp_eff_value(p, UCLAMP_MAX);
2996
2997
2998
2999
3000
3001 if (rq->uclamp_flags & UCLAMP_FLAG_IDLE)
3002 goto out;
3003 }
3004
3005 min_util = max_t(unsigned long, min_util, READ_ONCE(rq->uclamp[UCLAMP_MIN].value));
3006 max_util = max_t(unsigned long, max_util, READ_ONCE(rq->uclamp[UCLAMP_MAX].value));
3007 out:
3008
3009
3010
3011
3012
3013 if (unlikely(min_util >= max_util))
3014 return min_util;
3015
3016 return clamp(util, min_util, max_util);
3017 }
3018
3019
3020 static inline bool uclamp_rq_is_capped(struct rq *rq)
3021 {
3022 unsigned long rq_util;
3023 unsigned long max_util;
3024
3025 if (!static_branch_likely(&sched_uclamp_used))
3026 return false;
3027
3028 rq_util = cpu_util_cfs(cpu_of(rq)) + cpu_util_rt(rq);
3029 max_util = READ_ONCE(rq->uclamp[UCLAMP_MAX].value);
3030
3031 return max_util != SCHED_CAPACITY_SCALE && rq_util >= max_util;
3032 }
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042 static inline bool uclamp_is_used(void)
3043 {
3044 return static_branch_likely(&sched_uclamp_used);
3045 }
3046 #else
3047 static inline
3048 unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
3049 struct task_struct *p)
3050 {
3051 return util;
3052 }
3053
3054 static inline bool uclamp_rq_is_capped(struct rq *rq) { return false; }
3055
3056 static inline bool uclamp_is_used(void)
3057 {
3058 return false;
3059 }
3060 #endif
3061
3062 #ifdef CONFIG_HAVE_SCHED_AVG_IRQ
3063 static inline unsigned long cpu_util_irq(struct rq *rq)
3064 {
3065 return rq->avg_irq.util_avg;
3066 }
3067
3068 static inline
3069 unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned long max)
3070 {
3071 util *= (max - irq);
3072 util /= max;
3073
3074 return util;
3075
3076 }
3077 #else
3078 static inline unsigned long cpu_util_irq(struct rq *rq)
3079 {
3080 return 0;
3081 }
3082
3083 static inline
3084 unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned long max)
3085 {
3086 return util;
3087 }
3088 #endif
3089
3090 #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
3091
3092 #define perf_domain_span(pd) (to_cpumask(((pd)->em_pd->cpus)))
3093
3094 DECLARE_STATIC_KEY_FALSE(sched_energy_present);
3095
3096 static inline bool sched_energy_enabled(void)
3097 {
3098 return static_branch_unlikely(&sched_energy_present);
3099 }
3100
3101 #else
3102
3103 #define perf_domain_span(pd) NULL
3104 static inline bool sched_energy_enabled(void) { return false; }
3105
3106 #endif
3107
3108 #ifdef CONFIG_MEMBARRIER
3109
3110
3111
3112
3113
3114
3115 static inline void membarrier_switch_mm(struct rq *rq,
3116 struct mm_struct *prev_mm,
3117 struct mm_struct *next_mm)
3118 {
3119 int membarrier_state;
3120
3121 if (prev_mm == next_mm)
3122 return;
3123
3124 membarrier_state = atomic_read(&next_mm->membarrier_state);
3125 if (READ_ONCE(rq->membarrier_state) == membarrier_state)
3126 return;
3127
3128 WRITE_ONCE(rq->membarrier_state, membarrier_state);
3129 }
3130 #else
3131 static inline void membarrier_switch_mm(struct rq *rq,
3132 struct mm_struct *prev_mm,
3133 struct mm_struct *next_mm)
3134 {
3135 }
3136 #endif
3137
3138 #ifdef CONFIG_SMP
3139 static inline bool is_per_cpu_kthread(struct task_struct *p)
3140 {
3141 if (!(p->flags & PF_KTHREAD))
3142 return false;
3143
3144 if (p->nr_cpus_allowed != 1)
3145 return false;
3146
3147 return true;
3148 }
3149 #endif
3150
3151 extern void swake_up_all_locked(struct swait_queue_head *q);
3152 extern void __prepare_to_swait(struct swait_queue_head *q, struct swait_queue *wait);
3153
3154 #ifdef CONFIG_PREEMPT_DYNAMIC
3155 extern int preempt_dynamic_mode;
3156 extern int sched_dynamic_mode(const char *str);
3157 extern void sched_dynamic_update(int mode);
3158 #endif
3159
3160 #endif