* [zen:6.4/prjc 295/385] kernel/sched/alt_core.c:1004:6: warning: no previous prototype for 'select_nohz_load_balancer'
@ 2023-06-28 3:14 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-06-28 3:14 UTC (permalink / raw)
To: steven; +Cc: oe-kbuild-all
tree: https://github.com/zen-kernel/zen-kernel 6.4/prjc
head: d6148915d97f4535395579f728454c4f68f0774b
commit: bcf5606dbe8958da33841ebb8b63ba49b86c097f [295/385] sched/alt: [Sync] 95c74abe404d io_uring: move to separate directory
config: sparc-allyesconfig (https://download.01.org/0day-ci/archive/20230628/202306281141.GUEFFYF7-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230628/202306281141.GUEFFYF7-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306281141.GUEFFYF7-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from kernel/sched/sched.h:9,
from kernel/sched/alt_core.c:42:
kernel/sched/alt_sched.h:481:42: warning: 'struct cpuidle_state' declared inside parameter list will not be visible outside of this definition or declaration
481 | struct cpuidle_state *idle_state)
| ^~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'update_rq_clock':
kernel/sched/alt_core.c:578:21: error: implicit declaration of function 'sched_clock_cpu' [-Werror=implicit-function-declaration]
578 | s64 delta = sched_clock_cpu(cpu_of(rq)) - rq->clock;
| ^~~~~~~~~~~~~~~
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:632:15: error: conflicting types for 'sched_cpu_util'; have 'long unsigned int(int, long unsigned int)'
632 | unsigned long sched_cpu_util(int cpu, unsigned long max)
| ^~~~~~~~~~~~~~
In file included from include/linux/sched/signal.h:7,
from include/linux/sched/cputime.h:5,
from kernel/sched/alt_core.c:14:
include/linux/sched.h:2340:15: note: previous declaration of 'sched_cpu_util' with type 'long unsigned int(int)'
2340 | unsigned long sched_cpu_util(int cpu);
| ^~~~~~~~~~~~~~
kernel/sched/alt_core.c:966:6: warning: no previous prototype for 'resched_curr' [-Wmissing-prototypes]
966 | void resched_curr(struct rq *rq)
| ^~~~~~~~~~~~
In file included from include/linux/lockdep.h:14,
from include/linux/rcupdate.h:29,
from include/linux/rculist.h:11,
from include/linux/sched/signal.h:5:
kernel/sched/alt_core.c: In function 'resched_curr':
include/linux/smp.h:134:9: error: implicit declaration of function 'trace_ipi_send_cpu' [-Werror=implicit-function-declaration]
134 | trace_ipi_send_cpu(cpu, _RET_IP_, NULL); \
| ^~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:984:17: note: in expansion of macro 'smp_send_reschedule'
984 | smp_send_reschedule(cpu);
| ^~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:989:6: warning: no previous prototype for 'resched_cpu' [-Wmissing-prototypes]
989 | void resched_cpu(int cpu)
| ^~~~~~~~~~~
>> kernel/sched/alt_core.c:1004:6: warning: no previous prototype for 'select_nohz_load_balancer' [-Wmissing-prototypes]
1004 | void select_nohz_load_balancer(int stop_tick) {}
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:1006:6: warning: no previous prototype for 'set_cpu_sd_state_idle' [-Wmissing-prototypes]
1006 | void set_cpu_sd_state_idle(void) {}
| ^~~~~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:1192:6: warning: no previous prototype for 'hrtick_start' [-Wmissing-prototypes]
1192 | void hrtick_start(struct rq *rq, u64 delay)
| ^~~~~~~~~~~~
kernel/sched/alt_core.c:2339:6: warning: no previous prototype for 'sched_ttwu_pending' [-Wmissing-prototypes]
2339 | void sched_ttwu_pending(void *arg)
| ^~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:2372:6: warning: no previous prototype for 'send_call_function_single_ipi' [-Wmissing-prototypes]
2372 | void send_call_function_single_ipi(int cpu)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'scheduler_tick':
kernel/sched/alt_core.c:3894:9: error: implicit declaration of function 'sched_clock_tick'; did you mean 'scheduler_tick'? [-Werror=implicit-function-declaration]
3894 | sched_clock_tick();
| ^~~~~~~~~~~~~~~~
| scheduler_tick
kernel/sched/alt_core.c: In function '__schedule':
kernel/sched/alt_core.c:4558:49: error: 'PF_FROZEN' undeclared (first use in this function); did you mean 'PF_ROSE'?
4558 | !(prev->flags & PF_FROZEN);
| ^~~~~~~~~
| PF_ROSE
kernel/sched/alt_core.c:4558:49: note: each undeclared identifier is reported only once for each function it appears in
kernel/sched/alt_core.c: In function 'sched_submit_work':
kernel/sched/alt_core.c:4674:13: error: implicit declaration of function 'tsk_is_pi_blocked'; did you mean 'osq_is_locked'? [-Werror=implicit-function-declaration]
4674 | if (tsk_is_pi_blocked(tsk))
| ^~~~~~~~~~~~~~~~~
| osq_is_locked
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:4734:35: warning: no previous prototype for 'schedule_user' [-Wmissing-prototypes]
4734 | asmlinkage __visible void __sched schedule_user(void)
| ^~~~~~~~~~~~~
kernel/sched/alt_core.c:6770:6: warning: no previous prototype for 'idle_task_exit' [-Wmissing-prototypes]
6770 | void idle_task_exit(void)
| ^~~~~~~~~~~~~~
kernel/sched/alt_core.c:6980:5: warning: no previous prototype for 'sched_cpu_activate' [-Wmissing-prototypes]
6980 | int sched_cpu_activate(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:7019:5: warning: no previous prototype for 'sched_cpu_deactivate' [-Wmissing-prototypes]
7019 | int sched_cpu_deactivate(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:7083:5: warning: no previous prototype for 'sched_cpu_starting' [-Wmissing-prototypes]
7083 | int sched_cpu_starting(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:7103:5: warning: no previous prototype for 'sched_cpu_wait_empty' [-Wmissing-prototypes]
7103 | int sched_cpu_wait_empty(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:7145:5: warning: no previous prototype for 'sched_cpu_dying' [-Wmissing-prototypes]
7145 | int sched_cpu_dying(unsigned int cpu)
| ^~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'sched_init_topology_cpumask':
kernel/sched/alt_core.c:7205:17: error: implicit declaration of function 'cpumask_complement'; did you mean 'bitmap_complement'? [-Werror=implicit-function-declaration]
7205 | cpumask_complement(topo, cpumask_of(cpu));
| ^~~~~~~~~~~~~~~~~~
| bitmap_complement
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:7226:13: warning: no previous prototype for 'sched_init_smp' [-Wmissing-prototypes]
7226 | void __init sched_init_smp(void)
| ^~~~~~~~~~~~~~
kernel/sched/alt_core.c:7278:13: warning: no previous prototype for 'sched_init' [-Wmissing-prototypes]
7278 | void __init sched_init(void)
| ^~~~~~~~~~
>> kernel/sched/alt_core.c:7633:20: warning: no previous prototype for 'sched_create_group' [-Wmissing-prototypes]
7633 | struct task_group *sched_create_group(struct task_group *parent)
| ^~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:7644:6: warning: no previous prototype for 'sched_online_group' [-Wmissing-prototypes]
7644 | void sched_online_group(struct task_group *tg, struct task_group *parent)
| ^~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:7655:6: warning: no previous prototype for 'sched_destroy_group' [-Wmissing-prototypes]
7655 | void sched_destroy_group(struct task_group *tg)
| ^~~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:7661:6: warning: no previous prototype for 'sched_release_group' [-Wmissing-prototypes]
7661 | void sched_release_group(struct task_group *tg)
| ^~~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:7731:5: warning: no previous prototype for 'sched_group_set_shares' [-Wmissing-prototypes]
7731 | int sched_group_set_shares(struct task_group *tg, unsigned long shares)
| ^~~~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:7800:27: warning: initialized field overwritten [-Woverride-init]
7800 | .legacy_cftypes = cpu_legacy_files,
| ^~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:7800:27: note: (near initialization for 'cpu_cgrp_subsys.legacy_cftypes')
cc1: some warnings being treated as errors
vim +/select_nohz_load_balancer +1004 kernel/sched/alt_core.c
cedcd3e67433b3 Alfred Chen 2019-08-19 1003
20fdd10d6b2a3d Alfred Chen 2020-08-07 @1004 void select_nohz_load_balancer(int stop_tick) {}
cedcd3e67433b3 Alfred Chen 2019-08-19 1005
cedcd3e67433b3 Alfred Chen 2019-08-19 @1006 void set_cpu_sd_state_idle(void) {}
cedcd3e67433b3 Alfred Chen 2019-08-19 1007
cedcd3e67433b3 Alfred Chen 2019-08-19 1008 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1009 * In the semi idle case, use the nearest busy CPU for migrating timers
cedcd3e67433b3 Alfred Chen 2019-08-19 1010 * from an idle CPU. This is good for power-savings.
cedcd3e67433b3 Alfred Chen 2019-08-19 1011 *
cedcd3e67433b3 Alfred Chen 2019-08-19 1012 * We don't do similar optimization for completely idle system, as
cedcd3e67433b3 Alfred Chen 2019-08-19 1013 * selecting an idle CPU will add more delays to the timers than intended
cedcd3e67433b3 Alfred Chen 2019-08-19 1014 * (as that CPU's timer base may not be uptodate wrt jiffies etc).
cedcd3e67433b3 Alfred Chen 2019-08-19 1015 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1016 int get_nohz_timer_target(void)
cedcd3e67433b3 Alfred Chen 2019-08-19 1017 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1018 int i, cpu = smp_processor_id(), default_cpu = -1;
cedcd3e67433b3 Alfred Chen 2019-08-19 1019 struct cpumask *mask;
f6ded291cc9b43 Alfred Chen 2021-10-15 1020 const struct cpumask *hk_mask;
cedcd3e67433b3 Alfred Chen 2019-08-19 1021
2d596dea2bad04 Alfred Chen 2022-05-19 1022 if (housekeeping_cpu(cpu, HK_TYPE_TIMER)) {
cedcd3e67433b3 Alfred Chen 2019-08-19 1023 if (!idle_cpu(cpu))
cedcd3e67433b3 Alfred Chen 2019-08-19 1024 return cpu;
cedcd3e67433b3 Alfred Chen 2019-08-19 1025 default_cpu = cpu;
cedcd3e67433b3 Alfred Chen 2019-08-19 1026 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1027
2d596dea2bad04 Alfred Chen 2022-05-19 1028 hk_mask = housekeeping_cpumask(HK_TYPE_TIMER);
f6ded291cc9b43 Alfred Chen 2021-10-15 1029
11516d37fca3a4 Alfred Chen 2021-07-10 1030 for (mask = per_cpu(sched_cpu_topo_masks, cpu) + 1;
11516d37fca3a4 Alfred Chen 2021-07-10 1031 mask < per_cpu(sched_cpu_topo_end_mask, cpu); mask++)
f6ded291cc9b43 Alfred Chen 2021-10-15 1032 for_each_cpu_and(i, mask, hk_mask)
cedcd3e67433b3 Alfred Chen 2019-08-19 1033 if (!idle_cpu(i))
cedcd3e67433b3 Alfred Chen 2019-08-19 1034 return i;
cedcd3e67433b3 Alfred Chen 2019-08-19 1035
cedcd3e67433b3 Alfred Chen 2019-08-19 1036 if (default_cpu == -1)
2d596dea2bad04 Alfred Chen 2022-05-19 1037 default_cpu = housekeeping_any_cpu(HK_TYPE_TIMER);
cedcd3e67433b3 Alfred Chen 2019-08-19 1038 cpu = default_cpu;
cedcd3e67433b3 Alfred Chen 2019-08-19 1039
cedcd3e67433b3 Alfred Chen 2019-08-19 1040 return cpu;
cedcd3e67433b3 Alfred Chen 2019-08-19 1041 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1042
cedcd3e67433b3 Alfred Chen 2019-08-19 1043 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1044 * When add_timer_on() enqueues a timer into the timer wheel of an
cedcd3e67433b3 Alfred Chen 2019-08-19 1045 * idle CPU then this timer might expire before the next timer event
cedcd3e67433b3 Alfred Chen 2019-08-19 1046 * which is scheduled to wake up that CPU. In case of a completely
cedcd3e67433b3 Alfred Chen 2019-08-19 1047 * idle system the next event might even be infinite time into the
cedcd3e67433b3 Alfred Chen 2019-08-19 1048 * future. wake_up_idle_cpu() ensures that the CPU is woken up and
cedcd3e67433b3 Alfred Chen 2019-08-19 1049 * leaves the inner idle loop so the newly added timer is taken into
cedcd3e67433b3 Alfred Chen 2019-08-19 1050 * account when the CPU goes back to idle and evaluates the timer
cedcd3e67433b3 Alfred Chen 2019-08-19 1051 * wheel for the next timer event.
cedcd3e67433b3 Alfred Chen 2019-08-19 1052 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1053 static inline void wake_up_idle_cpu(int cpu)
cedcd3e67433b3 Alfred Chen 2019-08-19 1054 {
6e2561bfbf1fec Alfred Chen 2020-09-19 1055 struct rq *rq = cpu_rq(cpu);
6e2561bfbf1fec Alfred Chen 2020-09-19 1056
cedcd3e67433b3 Alfred Chen 2019-08-19 1057 if (cpu == smp_processor_id())
cedcd3e67433b3 Alfred Chen 2019-08-19 1058 return;
cedcd3e67433b3 Alfred Chen 2019-08-19 1059
6e2561bfbf1fec Alfred Chen 2020-09-19 1060 if (set_nr_and_not_polling(rq->idle))
cedcd3e67433b3 Alfred Chen 2019-08-19 1061 smp_send_reschedule(cpu);
6e2561bfbf1fec Alfred Chen 2020-09-19 1062 else
6e2561bfbf1fec Alfred Chen 2020-09-19 1063 trace_sched_wake_idle_without_ipi(cpu);
cedcd3e67433b3 Alfred Chen 2019-08-19 1064 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1065
cedcd3e67433b3 Alfred Chen 2019-08-19 1066 static inline bool wake_up_full_nohz_cpu(int cpu)
cedcd3e67433b3 Alfred Chen 2019-08-19 1067 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1068 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1069 * We just need the target to call irq_exit() and re-evaluate
cedcd3e67433b3 Alfred Chen 2019-08-19 1070 * the next tick. The nohz full kick at least implies that.
cedcd3e67433b3 Alfred Chen 2019-08-19 1071 * If needed we can still optimize that later with an
cedcd3e67433b3 Alfred Chen 2019-08-19 1072 * empty IRQ.
cedcd3e67433b3 Alfred Chen 2019-08-19 1073 */
6e2561bfbf1fec Alfred Chen 2020-09-19 1074 if (cpu_is_offline(cpu))
6e2561bfbf1fec Alfred Chen 2020-09-19 1075 return true; /* Don't try to wake offline CPUs. */
cedcd3e67433b3 Alfred Chen 2019-08-19 1076 if (tick_nohz_full_cpu(cpu)) {
cedcd3e67433b3 Alfred Chen 2019-08-19 1077 if (cpu != smp_processor_id() ||
cedcd3e67433b3 Alfred Chen 2019-08-19 1078 tick_nohz_tick_stopped())
cedcd3e67433b3 Alfred Chen 2019-08-19 1079 tick_nohz_full_kick_cpu(cpu);
cedcd3e67433b3 Alfred Chen 2019-08-19 1080 return true;
cedcd3e67433b3 Alfred Chen 2019-08-19 1081 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1082
cedcd3e67433b3 Alfred Chen 2019-08-19 1083 return false;
cedcd3e67433b3 Alfred Chen 2019-08-19 1084 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1085
cedcd3e67433b3 Alfred Chen 2019-08-19 1086 void wake_up_nohz_cpu(int cpu)
cedcd3e67433b3 Alfred Chen 2019-08-19 1087 {
6e2561bfbf1fec Alfred Chen 2020-09-19 1088 if (!wake_up_full_nohz_cpu(cpu))
cedcd3e67433b3 Alfred Chen 2019-08-19 1089 wake_up_idle_cpu(cpu);
cedcd3e67433b3 Alfred Chen 2019-08-19 1090 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1091
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1092 static void nohz_csd_func(void *info)
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1093 {
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1094 struct rq *rq = info;
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1095 int cpu = cpu_of(rq);
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1096 unsigned int flags;
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1097
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1098 /*
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1099 * Release the rq::nohz_csd.
20fdd10d6b2a3d Alfred Chen 2020-08-07 1100 */
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1101 flags = atomic_fetch_andnot(NOHZ_KICK_MASK, nohz_flags(cpu));
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1102 WARN_ON(!(flags & NOHZ_KICK_MASK));
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1103
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1104 rq->idle_balance = idle_cpu(cpu);
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1105 if (rq->idle_balance && !need_resched()) {
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1106 rq->nohz_idle_balance = flags;
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1107 raise_softirq_irqoff(SCHED_SOFTIRQ);
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1108 }
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1109 }
6ab8ee0f0daeb2 Alfred Chen 2020-07-31 1110
cedcd3e67433b3 Alfred Chen 2019-08-19 1111 #endif /* CONFIG_NO_HZ_COMMON */
cedcd3e67433b3 Alfred Chen 2019-08-19 1112 #endif /* CONFIG_SMP */
cedcd3e67433b3 Alfred Chen 2019-08-19 1113
cedcd3e67433b3 Alfred Chen 2019-08-19 1114 static inline void check_preempt_curr(struct rq *rq)
cedcd3e67433b3 Alfred Chen 2019-08-19 1115 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1116 if (sched_rq_first_task(rq) != rq->curr)
cedcd3e67433b3 Alfred Chen 2019-08-19 1117 resched_curr(rq);
cedcd3e67433b3 Alfred Chen 2019-08-19 1118 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1119
cedcd3e67433b3 Alfred Chen 2019-08-19 1120 #ifdef CONFIG_SCHED_HRTICK
cedcd3e67433b3 Alfred Chen 2019-08-19 1121 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1122 * Use HR-timers to deliver accurate preemption points.
cedcd3e67433b3 Alfred Chen 2019-08-19 1123 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1124
cedcd3e67433b3 Alfred Chen 2019-08-19 1125 static void hrtick_clear(struct rq *rq)
cedcd3e67433b3 Alfred Chen 2019-08-19 1126 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1127 if (hrtimer_active(&rq->hrtick_timer))
cedcd3e67433b3 Alfred Chen 2019-08-19 1128 hrtimer_cancel(&rq->hrtick_timer);
cedcd3e67433b3 Alfred Chen 2019-08-19 1129 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1130
cedcd3e67433b3 Alfred Chen 2019-08-19 1131 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1132 * High-resolution timer tick.
cedcd3e67433b3 Alfred Chen 2019-08-19 1133 * Runs from hardirq context with interrupts disabled.
cedcd3e67433b3 Alfred Chen 2019-08-19 1134 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1135 static enum hrtimer_restart hrtick(struct hrtimer *timer)
cedcd3e67433b3 Alfred Chen 2019-08-19 1136 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1137 struct rq *rq = container_of(timer, struct rq, hrtick_timer);
cedcd3e67433b3 Alfred Chen 2019-08-19 1138
cedcd3e67433b3 Alfred Chen 2019-08-19 1139 WARN_ON_ONCE(cpu_of(rq) != smp_processor_id());
cedcd3e67433b3 Alfred Chen 2019-08-19 1140
cedcd3e67433b3 Alfred Chen 2019-08-19 1141 raw_spin_lock(&rq->lock);
cedcd3e67433b3 Alfred Chen 2019-08-19 1142 resched_curr(rq);
cedcd3e67433b3 Alfred Chen 2019-08-19 1143 raw_spin_unlock(&rq->lock);
cedcd3e67433b3 Alfred Chen 2019-08-19 1144
cedcd3e67433b3 Alfred Chen 2019-08-19 1145 return HRTIMER_NORESTART;
cedcd3e67433b3 Alfred Chen 2019-08-19 1146 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1147
cedcd3e67433b3 Alfred Chen 2019-08-19 1148 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1149 * Use hrtick when:
cedcd3e67433b3 Alfred Chen 2019-08-19 1150 * - enabled by features
cedcd3e67433b3 Alfred Chen 2019-08-19 1151 * - hrtimer is actually high res
cedcd3e67433b3 Alfred Chen 2019-08-19 1152 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1153 static inline int hrtick_enabled(struct rq *rq)
cedcd3e67433b3 Alfred Chen 2019-08-19 1154 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1155 /**
cedcd3e67433b3 Alfred Chen 2019-08-19 1156 * Alt schedule FW doesn't support sched_feat yet
cedcd3e67433b3 Alfred Chen 2019-08-19 1157 if (!sched_feat(HRTICK))
cedcd3e67433b3 Alfred Chen 2019-08-19 1158 return 0;
cedcd3e67433b3 Alfred Chen 2019-08-19 1159 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1160 if (!cpu_active(cpu_of(rq)))
cedcd3e67433b3 Alfred Chen 2019-08-19 1161 return 0;
cedcd3e67433b3 Alfred Chen 2019-08-19 1162 return hrtimer_is_hres_active(&rq->hrtick_timer);
cedcd3e67433b3 Alfred Chen 2019-08-19 1163 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1164
cedcd3e67433b3 Alfred Chen 2019-08-19 1165 #ifdef CONFIG_SMP
cedcd3e67433b3 Alfred Chen 2019-08-19 1166
cedcd3e67433b3 Alfred Chen 2019-08-19 1167 static void __hrtick_restart(struct rq *rq)
cedcd3e67433b3 Alfred Chen 2019-08-19 1168 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1169 struct hrtimer *timer = &rq->hrtick_timer;
fa5f7bf056d306 Alfred Chen 2021-04-01 1170 ktime_t time = rq->hrtick_time;
cedcd3e67433b3 Alfred Chen 2019-08-19 1171
fa5f7bf056d306 Alfred Chen 2021-04-01 1172 hrtimer_start(timer, time, HRTIMER_MODE_ABS_PINNED_HARD);
cedcd3e67433b3 Alfred Chen 2019-08-19 1173 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1174
cedcd3e67433b3 Alfred Chen 2019-08-19 1175 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1176 * called from hardirq (IPI) context
cedcd3e67433b3 Alfred Chen 2019-08-19 1177 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1178 static void __hrtick_start(void *arg)
cedcd3e67433b3 Alfred Chen 2019-08-19 1179 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1180 struct rq *rq = arg;
cedcd3e67433b3 Alfred Chen 2019-08-19 1181
cedcd3e67433b3 Alfred Chen 2019-08-19 1182 raw_spin_lock(&rq->lock);
cedcd3e67433b3 Alfred Chen 2019-08-19 1183 __hrtick_restart(rq);
cedcd3e67433b3 Alfred Chen 2019-08-19 1184 raw_spin_unlock(&rq->lock);
cedcd3e67433b3 Alfred Chen 2019-08-19 1185 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1186
cedcd3e67433b3 Alfred Chen 2019-08-19 1187 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1188 * Called to set the hrtick timer state.
cedcd3e67433b3 Alfred Chen 2019-08-19 1189 *
cedcd3e67433b3 Alfred Chen 2019-08-19 1190 * called with rq->lock held and irqs disabled
cedcd3e67433b3 Alfred Chen 2019-08-19 1191 */
cedcd3e67433b3 Alfred Chen 2019-08-19 @1192 void hrtick_start(struct rq *rq, u64 delay)
cedcd3e67433b3 Alfred Chen 2019-08-19 1193 {
cedcd3e67433b3 Alfred Chen 2019-08-19 1194 struct hrtimer *timer = &rq->hrtick_timer;
cedcd3e67433b3 Alfred Chen 2019-08-19 1195 s64 delta;
cedcd3e67433b3 Alfred Chen 2019-08-19 1196
cedcd3e67433b3 Alfred Chen 2019-08-19 1197 /*
cedcd3e67433b3 Alfred Chen 2019-08-19 1198 * Don't schedule slices shorter than 10000ns, that just
cedcd3e67433b3 Alfred Chen 2019-08-19 1199 * doesn't make sense and can cause timer DoS.
cedcd3e67433b3 Alfred Chen 2019-08-19 1200 */
cedcd3e67433b3 Alfred Chen 2019-08-19 1201 delta = max_t(s64, delay, 10000LL);
cedcd3e67433b3 Alfred Chen 2019-08-19 1202
fa5f7bf056d306 Alfred Chen 2021-04-01 1203 rq->hrtick_time = ktime_add_ns(timer->base->get_time(), delta);
cedcd3e67433b3 Alfred Chen 2019-08-19 1204
cedcd3e67433b3 Alfred Chen 2019-08-19 1205 if (rq == this_rq())
cedcd3e67433b3 Alfred Chen 2019-08-19 1206 __hrtick_restart(rq);
cedcd3e67433b3 Alfred Chen 2019-08-19 1207 else
cedcd3e67433b3 Alfred Chen 2019-08-19 1208 smp_call_function_single_async(cpu_of(rq), &rq->hrtick_csd);
cedcd3e67433b3 Alfred Chen 2019-08-19 1209 }
cedcd3e67433b3 Alfred Chen 2019-08-19 1210
:::::: The code at line 1004 was first introduced by commit
:::::: 20fdd10d6b2a3de7a6cf8be5c0e565525e0cccff sched/alt: Fix/Enabled nohz_csd_func(), but not used.
:::::: TO: Alfred Chen <cchalpha@gmail.com>
:::::: CC: Alfred Chen <cchalpha@gmail.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-06-28 3:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-28 3:14 [zen:6.4/prjc 295/385] kernel/sched/alt_core.c:1004:6: warning: no previous prototype for 'select_nohz_load_balancer' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.