* [zen:5.14/prjc 1/221] kernel/sched/alt_core.c:1409:6: warning: no previous prototype for 'sched_set_stop_task'
@ 2021-09-27 17:55 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-09-27 17:55 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 30228 bytes --]
tree: https://github.com/zen-kernel/zen-kernel 5.14/prjc
head: a74cb46b3e41b71e5eb452467ef2000188afe8d7
commit: f746b5817d3274fa4f458f87f6b452e7304b1d64 [1/221] Project C v5.7.5-r2
config: parisc-randconfig-r013-20210927 (attached as .config)
compiler: hppa-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/zen-kernel/zen-kernel/commit/f746b5817d3274fa4f458f87f6b452e7304b1d64
git remote add zen https://github.com/zen-kernel/zen-kernel
git fetch --no-tags zen 5.14/prjc
git checkout f746b5817d3274fa4f458f87f6b452e7304b1d64
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=parisc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from kernel/sched/alt_core.c:191:
kernel/sched/alt_core.c: In function 'dequeue_task':
kernel/sched/bmq_imp.h:52:9: error: implicit declaration of function 'sched_info_dequeued'; did you mean 'sched_info_dequeue'? [-Werror=implicit-function-declaration]
52 | sched_info_dequeued(rq, p); \
| ^~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:444:9: note: in expansion of macro '__SCHED_DEQUEUE_TASK'
444 | __SCHED_DEQUEUE_TASK(p, rq, flags, update_sched_rq_watermark(rq));
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'enqueue_task':
kernel/sched/bmq_imp.h:61:9: error: implicit declaration of function 'sched_info_queued'; did you mean 'sched_info_enqueue'? [-Werror=implicit-function-declaration]
61 | sched_info_queued(rq, p); \
| ^~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c:461:9: note: in expansion of macro '__SCHED_ENQUEUE_TASK'
461 | __SCHED_ENQUEUE_TASK(p, rq, flags);
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:652:6: warning: no previous prototype for 'resched_curr' [-Wmissing-prototypes]
652 | void resched_curr(struct rq *rq)
| ^~~~~~~~~~~~
kernel/sched/alt_core.c:675:6: warning: no previous prototype for 'resched_cpu' [-Wmissing-prototypes]
675 | void resched_cpu(int cpu)
| ^~~~~~~~~~~
kernel/sched/alt_core.c: In function 'activate_task':
kernel/sched/alt_core.c:955:13: error: implicit declaration of function 'task_contributes_to_load' [-Werror=implicit-function-declaration]
955 | if (task_contributes_to_load(p))
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:1188:15: error: conflicting types for 'wait_task_inactive'; have 'long unsigned int(struct task_struct *, long int)'
1188 | unsigned long wait_task_inactive(struct task_struct *p, long match_state)
| ^~~~~~~~~~~~~~~~~~
In file included from kernel/sched/alt_sched.h:4,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched.h:1869:22: note: previous declaration of 'wait_task_inactive' with type 'long unsigned int(struct task_struct *, unsigned int)'
1869 | extern unsigned long wait_task_inactive(struct task_struct *, unsigned int match_state);
| ^~~~~~~~~~~~~~~~~~
In file included from include/linux/kernel.h:11,
from arch/parisc/include/asm/bug.h:5,
from include/linux/bug.h:5,
from include/linux/thread_info.h:13,
from include/asm-generic/current.h:5,
from ./arch/parisc/include/generated/asm/current.h:1,
from include/linux/sched.h:12,
from kernel/sched/alt_sched.h:4,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
kernel/sched/alt_core.c: In function 'wait_task_inactive':
kernel/sched/alt_core.c:1211:56: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1211 | if (match_state && unlikely(p->state != match_state))
| ^~~~~
include/linux/compiler.h:33:55: note: in definition of macro '__branch_check__'
33 | ______r = __builtin_expect(!!(x), expect); \
| ^
kernel/sched/alt_core.c:1211:44: note: in expansion of macro 'unlikely'
1211 | if (match_state && unlikely(p->state != match_state))
| ^~~~~~~~
kernel/sched/alt_core.c:1211:56: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1211 | if (match_state && unlikely(p->state != match_state))
| ^~~~~
include/linux/compiler.h:35:54: note: in definition of macro '__branch_check__'
35 | expect, is_constant); \
| ^~~~~~~~~~~
kernel/sched/alt_core.c:1211:44: note: in expansion of macro 'unlikely'
1211 | if (match_state && unlikely(p->state != match_state))
| ^~~~~~~~
kernel/sched/alt_core.c:1226:40: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1226 | if (!match_state || p->state == match_state)
| ^~~~~
| __state
kernel/sched/alt_core.c: At top level:
>> kernel/sched/alt_core.c:1409:6: warning: no previous prototype for 'sched_set_stop_task' [-Wmissing-prototypes]
1409 | void sched_set_stop_task(int cpu, struct task_struct *stop)
| ^~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function '__set_cpus_allowed_ptr':
kernel/sched/alt_core.c:1501:35: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1501 | if (task_running(p) || p->state == TASK_WAKING) {
| ^~~~~
| __state
kernel/sched/alt_core.c: In function 'ttwu_do_wakeup':
kernel/sched/alt_core.c:1578:12: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1578 | p->state = TASK_RUNNING;
| ^~~~~
| __state
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:1611:6: error: redefinition of 'scheduler_ipi'
1611 | void scheduler_ipi(void)
| ^~~~~~~~~~~~~
In file included from kernel/sched/alt_sched.h:4,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched.h:1860:29: note: previous definition of 'scheduler_ipi' with type 'void(void)'
1860 | static __always_inline void scheduler_ipi(void)
| ^~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'try_to_wake_up':
kernel/sched/alt_core.c:1793:26: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1793 | if (!(p->state & state))
| ^~~~~
| __state
kernel/sched/alt_core.c:1799:20: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1799 | p->state = TASK_RUNNING;
| ^~~~~
| __state
kernel/sched/alt_core.c:1812:18: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1812 | if (!(p->state & state))
| ^~~~~
| __state
kernel/sched/alt_core.c:1879:12: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1879 | p->state = TASK_WAKING;
| ^~~~~
| __state
kernel/sched/alt_core.c: In function 'sched_fork':
kernel/sched/alt_core.c:1973:12: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
1973 | p->state = TASK_NEW;
| ^~~~~
| __state
kernel/sched/alt_core.c: In function 'wake_up_new_task':
kernel/sched/alt_core.c:2136:12: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
2136 | p->state = TASK_RUNNING;
| ^~~~~
| __state
kernel/sched/alt_core.c: In function 'finish_task_switch':
kernel/sched/alt_core.c:2384:28: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
2384 | prev_state = prev->state;
| ^~~~~
| __state
kernel/sched/alt_core.c: In function 'schedule_tail':
kernel/sched/alt_core.c:2433:20: warning: variable 'rq' set but not used [-Wunused-but-set-variable]
2433 | struct rq *rq;
| ^~
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:2518:15: error: conflicting types for 'nr_running'; have 'long unsigned int(void)'
2518 | unsigned long nr_running(void)
| ^~~~~~~~~~
In file included from kernel/sched/alt_sched.h:16,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched/stat.h:20:21: note: previous declaration of 'nr_running' with type 'unsigned int(void)'
20 | extern unsigned int nr_running(void);
| ^~~~~~~~~~
kernel/sched/alt_core.c:2565:15: error: conflicting types for 'nr_iowait_cpu'; have 'long unsigned int(int)'
2565 | unsigned long nr_iowait_cpu(int cpu)
| ^~~~~~~~~~~~~
In file included from kernel/sched/alt_sched.h:16,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched/stat.h:23:21: note: previous declaration of 'nr_iowait_cpu' with type 'unsigned int(int)'
23 | extern unsigned int nr_iowait_cpu(int cpu);
| ^~~~~~~~~~~~~
kernel/sched/alt_core.c:2600:15: error: conflicting types for 'nr_iowait'; have 'long unsigned int(void)'
2600 | unsigned long nr_iowait(void)
| ^~~~~~~~~
In file included from kernel/sched/alt_sched.h:16,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched/stat.h:22:21: note: previous declaration of 'nr_iowait' with type 'unsigned int(void)'
22 | extern unsigned int nr_iowait(void);
| ^~~~~~~~~
kernel/sched/alt_core.c:2706:6: error: conflicting types for 'arch_set_thermal_pressure'; have 'void(struct cpumask *, long unsigned int)'
2706 | void arch_set_thermal_pressure(struct cpumask *cpus,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from kernel/sched/alt_sched.h:19,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched/topology.h:264:6: note: previous definition of 'arch_set_thermal_pressure' with type 'void(const struct cpumask *, long unsigned int)'
264 | void arch_set_thermal_pressure(const struct cpumask *cpus,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'scheduler_tick':
kernel/sched/alt_core.c:2753:9: error: implicit declaration of function 'psi_task_tick'; did you mean 'put_task_stack'? [-Werror=implicit-function-declaration]
2753 | psi_task_tick(rq);
| ^~~~~~~~~~~~~
| put_task_stack
--
from kernel/sched/alt_sched.h:24,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/kallsyms.h:177:20: note: declared here
177 | static inline void print_ip_sym(const char *loglvl, unsigned long ip)
| ^~~~~~~~~~~~
kernel/sched/alt_core.c: In function '__schedule':
kernel/sched/alt_core.c:3357:31: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
3357 | if (!preempt && prev->state) {
| ^~~~~
| __state
kernel/sched/alt_core.c:3358:48: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
3358 | if (signal_pending_state(prev->state, prev)) {
| ^~~~~
| __state
kernel/sched/alt_core.c:3359:31: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
3359 | prev->state = TASK_RUNNING;
| ^~~~~
| __state
kernel/sched/alt_core.c: In function 'sched_submit_work':
kernel/sched/alt_core.c:3438:19: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
3438 | if (!tsk->state)
| ^~~~~
| __state
In file included from arch/parisc/include/asm/bug.h:93,
from include/linux/bug.h:5,
from include/linux/thread_info.h:13,
from include/asm-generic/current.h:5,
from ./arch/parisc/include/generated/asm/current.h:1,
from include/linux/sched.h:12,
from kernel/sched/alt_sched.h:4,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
kernel/sched/alt_core.c: In function 'schedule_idle':
kernel/sched/alt_core.c:3512:31: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
3512 | WARN_ON_ONCE(current->state);
| ^~~~~
include/asm-generic/bug.h:104:32: note: in definition of macro 'WARN_ON_ONCE'
104 | int __ret_warn_on = !!(condition); \
| ^~~~~~~~~
kernel/sched/alt_core.c: In function '__sched_setscheduler':
kernel/sched/alt_core.c:4031:46: error: 'MAX_USER_RT_PRIO' undeclared (first use in this function); did you mean 'MAX_RT_PRIO'?
4031 | (p->mm && attr->sched_priority > MAX_USER_RT_PRIO - 1) ||
| ^~~~~~~~~~~~~~~~
| MAX_RT_PRIO
kernel/sched/alt_core.c:4031:46: note: each undeclared identifier is reported only once for each function it appears in
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:4749:13: error: redefinition of '_cond_resched'
4749 | int __sched _cond_resched(void)
| ^~~~~~~~~~~~~
In file included from kernel/sched/alt_sched.h:4,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched.h:1948:19: note: previous definition of '_cond_resched' with type 'int(void)'
1948 | static inline int _cond_resched(void)
| ^~~~~~~~~~~~~
kernel/sched/alt_core.c: In function '__do_sys_sched_get_priority_max':
kernel/sched/alt_core.c:4902:23: error: 'MAX_USER_RT_PRIO' undeclared (first use in this function); did you mean 'MAX_RT_PRIO'?
4902 | ret = MAX_USER_RT_PRIO-1;
| ^~~~~~~~~~~~~~~~
| MAX_RT_PRIO
kernel/sched/alt_core.c: In function 'sched_show_task':
kernel/sched/alt_core.c:5010:16: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
5010 | if (p->state == TASK_RUNNING)
| ^~~~~
| __state
kernel/sched/alt_core.c:5025:9: error: too few arguments to function 'show_stack'
5025 | show_stack(p, NULL);
| ^~~~~~~~~~
In file included from kernel/sched/alt_sched.h:9,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched/debug.h:33:13: note: declared here
33 | extern void show_stack(struct task_struct *task, unsigned long *sp,
| ^~~~~~~~~~
kernel/sched/alt_core.c: In function 'state_filter_match':
kernel/sched/alt_core.c:5038:18: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
5038 | if (!(p->state & state_filter))
| ^~~~~
| __state
kernel/sched/alt_core.c:5045:56: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
5045 | if (state_filter == TASK_UNINTERRUPTIBLE && p->state == TASK_IDLE)
| ^~~~~
| __state
kernel/sched/alt_core.c: At top level:
kernel/sched/alt_core.c:5052:6: error: conflicting types for 'show_state_filter'; have 'void(long unsigned int)'
5052 | void show_state_filter(unsigned long state_filter)
| ^~~~~~~~~~~~~~~~~
In file included from kernel/sched/alt_sched.h:9,
from kernel/sched/sched.h:6,
from kernel/sched/alt_core.c:14:
include/linux/sched/debug.h:17:13: note: previous declaration of 'show_state_filter' with type 'void(unsigned int)'
17 | extern void show_state_filter(unsigned int state_filter);
| ^~~~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'init_idle':
kernel/sched/alt_core.c:5118:15: error: 'struct task_struct' has no member named 'state'; did you mean '__state'?
5118 | idle->state = TASK_RUNNING;
| ^~~~~
| __state
kernel/sched/alt_core.c: At top level:
>> kernel/sched/alt_core.c:5191:6: warning: no previous prototype for 'idle_task_exit' [-Wmissing-prototypes]
5191 | void idle_task_exit(void)
| ^~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:5340:5: warning: no previous prototype for 'sched_cpu_activate' [-Wmissing-prototypes]
5340 | int sched_cpu_activate(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:5373:5: warning: no previous prototype for 'sched_cpu_deactivate' [-Wmissing-prototypes]
5373 | int sched_cpu_deactivate(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:5416:5: warning: no previous prototype for 'sched_cpu_starting' [-Wmissing-prototypes]
5416 | int sched_cpu_starting(unsigned int cpu)
| ^~~~~~~~~~~~~~~~~~
>> kernel/sched/alt_core.c:5424:5: warning: no previous prototype for 'sched_cpu_dying' [-Wmissing-prototypes]
5424 | int sched_cpu_dying(unsigned int cpu)
| ^~~~~~~~~~~~~~~
kernel/sched/alt_core.c: In function 'select_fallback_rq':
kernel/sched/alt_core.c:1357:28: warning: this statement may fall through [-Wimplicit-fallthrough=]
1357 | if (IS_ENABLED(CONFIG_CPUSETS)) {
| ^
kernel/sched/alt_core.c:1363:17: note: here
1363 | case possible:
| ^~~~
At top level:
kernel/sched/alt_core.c:142:18: warning: 'sched_sg_idle_mask' defined but not used [-Wunused-variable]
142 | static cpumask_t sched_sg_idle_mask ____cacheline_aligned_in_smp;
| ^~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/sched_set_stop_task +1409 kernel/sched/alt_core.c
1170
1171 #ifdef CONFIG_SMP
1172 /*
1173 * wait_task_inactive - wait for a thread to unschedule.
1174 *
1175 * If @match_state is nonzero, it's the @p->state value just checked and
1176 * not expected to change. If it changes, i.e. @p might have woken up,
1177 * then return zero. When we succeed in waiting for @p to be off its CPU,
1178 * we return a positive number (its total switch count). If a second call
1179 * a short while later returns the same number, the caller can be sure that
1180 * @p has remained unscheduled the whole time.
1181 *
1182 * The caller must ensure that the task *will* unschedule sometime soon,
1183 * else this function might spin for a *long* time. This function can't
1184 * be called with interrupts off, or it may introduce deadlock with
1185 * smp_call_function() if an IPI is sent by the same process we are
1186 * waiting to become inactive.
1187 */
1188 unsigned long wait_task_inactive(struct task_struct *p, long match_state)
1189 {
1190 unsigned long flags;
1191 bool running, on_rq;
1192 unsigned long ncsw;
1193 struct rq *rq;
1194 raw_spinlock_t *lock;
1195
1196 for (;;) {
1197 rq = task_rq(p);
1198
1199 /*
1200 * If the task is actively running on another CPU
1201 * still, just relax and busy-wait without holding
1202 * any locks.
1203 *
1204 * NOTE! Since we don't hold any locks, it's not
1205 * even sure that "rq" stays as the right runqueue!
1206 * But we don't care, since this will return false
1207 * if the runqueue has changed and p is actually now
1208 * running somewhere else!
1209 */
1210 while (task_running(p) && p == rq->curr) {
> 1211 if (match_state && unlikely(p->state != match_state))
1212 return 0;
1213 cpu_relax();
1214 }
1215
1216 /*
1217 * Ok, time to look more closely! We need the rq
1218 * lock now, to be *sure*. If we're wrong, we'll
1219 * just go back and repeat.
1220 */
1221 task_access_lock_irqsave(p, &lock, &flags);
1222 trace_sched_wait_task(p);
1223 running = task_running(p);
1224 on_rq = p->on_rq;
1225 ncsw = 0;
1226 if (!match_state || p->state == match_state)
1227 ncsw = p->nvcsw | LONG_MIN; /* sets MSB */
1228 task_access_unlock_irqrestore(p, lock, &flags);
1229
1230 /*
1231 * If it changed from the expected state, bail out now.
1232 */
1233 if (unlikely(!ncsw))
1234 break;
1235
1236 /*
1237 * Was it really running after all now that we
1238 * checked with the proper locks actually held?
1239 *
1240 * Oops. Go back and try again..
1241 */
1242 if (unlikely(running)) {
1243 cpu_relax();
1244 continue;
1245 }
1246
1247 /*
1248 * It's not enough that it's not actively running,
1249 * it must be off the runqueue _entirely_, and not
1250 * preempted!
1251 *
1252 * So if it was still runnable (but just not actively
1253 * running right now), it's preempted, and we should
1254 * yield - it could be a while.
1255 */
1256 if (unlikely(on_rq)) {
1257 ktime_t to = NSEC_PER_SEC / HZ;
1258
1259 set_current_state(TASK_UNINTERRUPTIBLE);
1260 schedule_hrtimeout(&to, HRTIMER_MODE_REL);
1261 continue;
1262 }
1263
1264 /*
1265 * Ahh, all good. It wasn't running, and it wasn't
1266 * runnable, which means that it will never become
1267 * running in the future either. We're all done!
1268 */
1269 break;
1270 }
1271
1272 return ncsw;
1273 }
1274
1275 /***
1276 * kick_process - kick a running thread to enter/exit the kernel
1277 * @p: the to-be-kicked thread
1278 *
1279 * Cause a process which is running on another CPU to enter
1280 * kernel-mode, without any delay. (to get signals handled.)
1281 *
1282 * NOTE: this function doesn't have to take the runqueue lock,
1283 * because all it wants to ensure is that the remote task enters
1284 * the kernel. If the IPI races and the task has been migrated
1285 * to another CPU then no harm is done and the purpose has been
1286 * achieved as well.
1287 */
1288 void kick_process(struct task_struct *p)
1289 {
1290 int cpu;
1291
1292 preempt_disable();
1293 cpu = task_cpu(p);
1294 if ((cpu != smp_processor_id()) && task_curr(p))
1295 smp_send_reschedule(cpu);
1296 preempt_enable();
1297 }
1298 EXPORT_SYMBOL_GPL(kick_process);
1299
1300 /*
1301 * ->cpus_ptr is protected by both rq->lock and p->pi_lock
1302 *
1303 * A few notes on cpu_active vs cpu_online:
1304 *
1305 * - cpu_active must be a subset of cpu_online
1306 *
1307 * - on CPU-up we allow per-CPU kthreads on the online && !active CPU,
1308 * see __set_cpus_allowed_ptr(). At this point the newly online
1309 * CPU isn't yet part of the sched domains, and balancing will not
1310 * see it.
1311 *
1312 * - on cpu-down we clear cpu_active() to mask the sched domains and
1313 * avoid the load balancer to place new tasks on the to be removed
1314 * CPU. Existing tasks will remain running there and will be taken
1315 * off.
1316 *
1317 * This means that fallback selection must not select !active CPUs.
1318 * And can assume that any active CPU must be online. Conversely
1319 * select_task_rq() below may allow selection of !active CPUs in order
1320 * to satisfy the above rules.
1321 */
1322 static int select_fallback_rq(int cpu, struct task_struct *p)
1323 {
1324 int nid = cpu_to_node(cpu);
1325 const struct cpumask *nodemask = NULL;
1326 enum { cpuset, possible, fail } state = cpuset;
1327 int dest_cpu;
1328
1329 /*
1330 * If the node that the CPU is on has been offlined, cpu_to_node()
1331 * will return -1. There is no CPU on the node, and we should
1332 * select the CPU on the other node.
1333 */
1334 if (nid != -1) {
1335 nodemask = cpumask_of_node(nid);
1336
1337 /* Look for allowed, online CPU in same node. */
1338 for_each_cpu(dest_cpu, nodemask) {
1339 if (!cpu_active(dest_cpu))
1340 continue;
1341 if (cpumask_test_cpu(dest_cpu, p->cpus_ptr))
1342 return dest_cpu;
1343 }
1344 }
1345
1346 for (;;) {
1347 /* Any allowed, online CPU? */
1348 for_each_cpu(dest_cpu, p->cpus_ptr) {
1349 if (!is_cpu_allowed(p, dest_cpu))
1350 continue;
1351 goto out;
1352 }
1353
1354 /* No more Mr. Nice Guy. */
1355 switch (state) {
1356 case cpuset:
1357 if (IS_ENABLED(CONFIG_CPUSETS)) {
1358 cpuset_cpus_allowed_fallback(p);
1359 state = possible;
1360 break;
1361 }
1362 /* Fall-through */
1363 case possible:
1364 do_set_cpus_allowed(p, cpu_possible_mask);
1365 state = fail;
1366 break;
1367
1368 case fail:
1369 BUG();
1370 break;
1371 }
1372 }
1373
1374 out:
1375 if (state != cpuset) {
1376 /*
1377 * Don't tell them about moving exiting tasks or
1378 * kernel threads (both mm NULL), since they never
1379 * leave kernel.
1380 */
1381 if (p->mm && printk_ratelimit()) {
1382 printk_deferred("process %d (%s) no longer affine to cpu%d\n",
1383 task_pid_nr(p), p->comm, cpu);
1384 }
1385 }
1386
1387 return dest_cpu;
1388 }
1389
1390 static inline int select_task_rq(struct task_struct *p)
1391 {
1392 cpumask_t chk_mask, tmp;
1393
1394 if (unlikely(!cpumask_and(&chk_mask, p->cpus_ptr, cpu_online_mask)))
1395 return select_fallback_rq(task_cpu(p), p);
1396
1397 if (
1398 #ifdef CONFIG_SCHED_SMT
1399 cpumask_and(&tmp, &chk_mask, &sched_sg_idle_mask) ||
1400 #endif
1401 cpumask_and(&tmp, &chk_mask, &sched_rq_watermark[IDLE_WM]) ||
1402 cpumask_and(&tmp, &chk_mask,
1403 &sched_rq_watermark[task_sched_prio(p) + 1]))
1404 return best_mask_cpu(task_cpu(p), &tmp);
1405
1406 return best_mask_cpu(task_cpu(p), &chk_mask);
1407 }
1408
> 1409 void sched_set_stop_task(int cpu, struct task_struct *stop)
1410 {
1411 struct sched_param stop_param = { .sched_priority = STOP_PRIO };
1412 struct sched_param start_param = { .sched_priority = 0 };
1413 struct task_struct *old_stop = cpu_rq(cpu)->stop;
1414
1415 if (stop) {
1416 /*
1417 * Make it appear like a SCHED_FIFO task, its something
1418 * userspace knows about and won't get confused about.
1419 *
1420 * Also, it will make PI more or less work without too
1421 * much confusion -- but then, stop work should not
1422 * rely on PI working anyway.
1423 */
1424 sched_setscheduler_nocheck(stop, SCHED_FIFO, &stop_param);
1425 }
1426
1427 cpu_rq(cpu)->stop = stop;
1428
1429 if (old_stop) {
1430 /*
1431 * Reset it back to a normal scheduling policy so that
1432 * it can die in pieces.
1433 */
1434 sched_setscheduler_nocheck(old_stop, SCHED_NORMAL, &start_param);
1435 }
1436 }
1437
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36943 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-09-27 17:55 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-27 17:55 [zen:5.14/prjc 1/221] kernel/sched/alt_core.c:1409:6: warning: no previous prototype for 'sched_set_stop_task' 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.