All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.