[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202204140711.k6JoljtY-lkp@intel.com>
Date: Thu, 14 Apr 2022 07:54:58 +0800
From: kernel test robot <lkp@...el.com>
To: Josh Poimboeuf <jpoimboe@...hat.com>
Cc: kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org
Subject: [jpoimboe:objtool-run 11/29] arch/ia64/kernel/process.c:230:1:
warning: 'noreturn' function does return
tree: https://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git objtool-run
head: 6d60b700d2179c68f134da8eda4d9879d460d1a3
commit: f5a10245e0eab8e93b77aa796fdf404d10b32468 [11/29] sched: Mark arch_cpu_idle_dead() __noreturn
config: ia64-randconfig-r035-20220413 (https://download.01.org/0day-ci/archive/20220414/202204140711.k6JoljtY-lkp@intel.com/config)
compiler: ia64-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://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git/commit/?id=f5a10245e0eab8e93b77aa796fdf404d10b32468
git remote add jpoimboe https://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git
git fetch --no-tags jpoimboe objtool-run
git checkout f5a10245e0eab8e93b77aa796fdf404d10b32468
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=ia64 SHELL=/bin/bash arch/ia64/kernel/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>
All warnings (new ones prefixed by >>):
arch/ia64/kernel/process.c:155:1: warning: no previous prototype for 'console_print' [-Wmissing-prototypes]
155 | console_print(const char *s)
| ^~~~~~~~~~~~~
arch/ia64/kernel/process.c:161:1: warning: no previous prototype for 'do_notify_resume_user' [-Wmissing-prototypes]
161 | do_notify_resume_user(sigset_t *unused, struct sigscratch *scr, long in_syscall)
| ^~~~~~~~~~~~~~~~~~~~~
arch/ia64/kernel/process.c:400:17: warning: no previous prototype for 'ia64_clone' [-Wmissing-prototypes]
400 | asmlinkage long ia64_clone(unsigned long clone_flags, unsigned long stack_start,
| ^~~~~~~~~~
arch/ia64/kernel/process.c:554:1: warning: no previous prototype for 'cpu_halt' [-Wmissing-prototypes]
554 | cpu_halt (void)
| ^~~~~~~~
arch/ia64/kernel/process.c: In function 'arch_cpu_idle_dead':
>> arch/ia64/kernel/process.c:230:1: warning: 'noreturn' function does return
230 | }
| ^
vim +/noreturn +230 arch/ia64/kernel/process.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 226
91d591c387af34 Thomas Gleixner 2013-03-21 227 void arch_cpu_idle_dead(void)
^1da177e4c3f41 Linus Torvalds 2005-04-16 228 {
91d591c387af34 Thomas Gleixner 2013-03-21 229 play_dead();
0888f06ac99f99 Ingo Molnar 2006-12-22 @230 }
1e185b97b43640 Kenneth W Chen 2005-11-15 231
91d591c387af34 Thomas Gleixner 2013-03-21 232 void arch_cpu_idle(void)
91d591c387af34 Thomas Gleixner 2013-03-21 233 {
91d591c387af34 Thomas Gleixner 2013-03-21 234 void (*mark_idle)(int) = ia64_mark_idle;
91d591c387af34 Thomas Gleixner 2013-03-21 235
^1da177e4c3f41 Linus Torvalds 2005-04-16 236 #ifdef CONFIG_SMP
^1da177e4c3f41 Linus Torvalds 2005-04-16 237 min_xtp();
^1da177e4c3f41 Linus Torvalds 2005-04-16 238 #endif
7d5f9c0f102550 Zwane Mwaikambo 2005-03-30 239 rmb();
^1da177e4c3f41 Linus Torvalds 2005-04-16 240 if (mark_idle)
^1da177e4c3f41 Linus Torvalds 2005-04-16 241 (*mark_idle)(1);
^1da177e4c3f41 Linus Torvalds 2005-04-16 242
58c644ba512cfb Peter Zijlstra 2020-11-20 243 raw_safe_halt();
91d591c387af34 Thomas Gleixner 2013-03-21 244
^1da177e4c3f41 Linus Torvalds 2005-04-16 245 if (mark_idle)
^1da177e4c3f41 Linus Torvalds 2005-04-16 246 (*mark_idle)(0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 247 #ifdef CONFIG_SMP
^1da177e4c3f41 Linus Torvalds 2005-04-16 248 normal_xtp();
^1da177e4c3f41 Linus Torvalds 2005-04-16 249 #endif
64c7c8f8855962 Nicholas Piggin 2005-11-08 250 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 251
^1da177e4c3f41 Linus Torvalds 2005-04-16 252 void
^1da177e4c3f41 Linus Torvalds 2005-04-16 253 ia64_save_extra (struct task_struct *task)
^1da177e4c3f41 Linus Torvalds 2005-04-16 254 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 255 if ((task->thread.flags & IA64_THREAD_DBG_VALID) != 0)
^1da177e4c3f41 Linus Torvalds 2005-04-16 256 ia64_save_debug_regs(&task->thread.dbr[0]);
^1da177e4c3f41 Linus Torvalds 2005-04-16 257 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 258
^1da177e4c3f41 Linus Torvalds 2005-04-16 259 void
^1da177e4c3f41 Linus Torvalds 2005-04-16 260 ia64_load_extra (struct task_struct *task)
^1da177e4c3f41 Linus Torvalds 2005-04-16 261 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 262 if ((task->thread.flags & IA64_THREAD_DBG_VALID) != 0)
^1da177e4c3f41 Linus Torvalds 2005-04-16 263 ia64_load_debug_regs(&task->thread.dbr[0]);
^1da177e4c3f41 Linus Torvalds 2005-04-16 264 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 265
^1da177e4c3f41 Linus Torvalds 2005-04-16 266 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 267 * Copy the state of an ia-64 thread.
^1da177e4c3f41 Linus Torvalds 2005-04-16 268 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 269 * We get here through the following call chain:
^1da177e4c3f41 Linus Torvalds 2005-04-16 270 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 271 * from user-level: from kernel:
^1da177e4c3f41 Linus Torvalds 2005-04-16 272 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 273 * <clone syscall> <some kernel call frames>
^1da177e4c3f41 Linus Torvalds 2005-04-16 274 * sys_clone :
f8c40ebe659db3 Christian Brauner 2020-08-19 275 * kernel_clone kernel_clone
^1da177e4c3f41 Linus Torvalds 2005-04-16 276 * copy_thread copy_thread
^1da177e4c3f41 Linus Torvalds 2005-04-16 277 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 278 * This means that the stack layout is as follows:
^1da177e4c3f41 Linus Torvalds 2005-04-16 279 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 280 * +---------------------+ (highest addr)
^1da177e4c3f41 Linus Torvalds 2005-04-16 281 * | struct pt_regs |
^1da177e4c3f41 Linus Torvalds 2005-04-16 282 * +---------------------+
^1da177e4c3f41 Linus Torvalds 2005-04-16 283 * | struct switch_stack |
^1da177e4c3f41 Linus Torvalds 2005-04-16 284 * +---------------------+
^1da177e4c3f41 Linus Torvalds 2005-04-16 285 * | |
^1da177e4c3f41 Linus Torvalds 2005-04-16 286 * | memory stack |
^1da177e4c3f41 Linus Torvalds 2005-04-16 287 * | | <-- sp (lowest addr)
^1da177e4c3f41 Linus Torvalds 2005-04-16 288 * +---------------------+
^1da177e4c3f41 Linus Torvalds 2005-04-16 289 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 290 * Observe that we copy the unat values that are in pt_regs and switch_stack. Spilling an
^1da177e4c3f41 Linus Torvalds 2005-04-16 291 * integer to address X causes bit N in ar.unat to be set to the NaT bit of the register,
^1da177e4c3f41 Linus Torvalds 2005-04-16 292 * with N=(X & 0x1ff)/8. Thus, copying the unat value preserves the NaT bits ONLY if the
^1da177e4c3f41 Linus Torvalds 2005-04-16 293 * pt_regs structure in the parent is congruent to that of the child, modulo 512. Since
^1da177e4c3f41 Linus Torvalds 2005-04-16 294 * the stack is page aligned and the page size is at least 4KB, this is always the case,
^1da177e4c3f41 Linus Torvalds 2005-04-16 295 * so there is nothing to worry about.
^1da177e4c3f41 Linus Torvalds 2005-04-16 296 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 297 int
714acdbd1c94e7 Christian Brauner 2020-06-11 298 copy_thread(unsigned long clone_flags, unsigned long user_stack_base,
714acdbd1c94e7 Christian Brauner 2020-06-11 299 unsigned long user_stack_size, struct task_struct *p, unsigned long tls)
^1da177e4c3f41 Linus Torvalds 2005-04-16 300 {
32974ad4907cdd Tony Luck 2010-02-08 301 extern char ia64_ret_from_clone;
^1da177e4c3f41 Linus Torvalds 2005-04-16 302 struct switch_stack *child_stack, *stack;
^1da177e4c3f41 Linus Torvalds 2005-04-16 303 unsigned long rbs, child_rbs, rbs_size;
^1da177e4c3f41 Linus Torvalds 2005-04-16 304 struct pt_regs *child_ptregs;
afa86fc426ff7e Al Viro 2012-10-22 305 struct pt_regs *regs = current_pt_regs();
^1da177e4c3f41 Linus Torvalds 2005-04-16 306 int retval = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 307
^1da177e4c3f41 Linus Torvalds 2005-04-16 308 child_ptregs = (struct pt_regs *) ((unsigned long) p + IA64_STK_OFFSET) - 1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 309 child_stack = (struct switch_stack *) child_ptregs - 1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 310
^1da177e4c3f41 Linus Torvalds 2005-04-16 311 rbs = (unsigned long) current + IA64_RBS_OFFSET;
^1da177e4c3f41 Linus Torvalds 2005-04-16 312 child_rbs = (unsigned long) p + IA64_RBS_OFFSET;
^1da177e4c3f41 Linus Torvalds 2005-04-16 313
^1da177e4c3f41 Linus Torvalds 2005-04-16 314 /* copy parts of thread_struct: */
^1da177e4c3f41 Linus Torvalds 2005-04-16 315 p->thread.ksp = (unsigned long) child_stack - 16;
^1da177e4c3f41 Linus Torvalds 2005-04-16 316
^1da177e4c3f41 Linus Torvalds 2005-04-16 317 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 318 * NOTE: The calling convention considers all floating point
^1da177e4c3f41 Linus Torvalds 2005-04-16 319 * registers in the high partition (fph) to be scratch. Since
^1da177e4c3f41 Linus Torvalds 2005-04-16 320 * the only way to get to this point is through a system call,
^1da177e4c3f41 Linus Torvalds 2005-04-16 321 * we know that the values in fph are all dead. Hence, there
^1da177e4c3f41 Linus Torvalds 2005-04-16 322 * is no need to inherit the fph state from the parent to the
^1da177e4c3f41 Linus Torvalds 2005-04-16 323 * child and all we have to do is to make sure that
^1da177e4c3f41 Linus Torvalds 2005-04-16 324 * IA64_THREAD_FPH_VALID is cleared in the child.
^1da177e4c3f41 Linus Torvalds 2005-04-16 325 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 326 * XXX We could push this optimization a bit further by
^1da177e4c3f41 Linus Torvalds 2005-04-16 327 * clearing IA64_THREAD_FPH_VALID on ANY system call.
^1da177e4c3f41 Linus Torvalds 2005-04-16 328 * However, it's not clear this is worth doing. Also, it
^1da177e4c3f41 Linus Torvalds 2005-04-16 329 * would be a slight deviation from the normal Linux system
^1da177e4c3f41 Linus Torvalds 2005-04-16 330 * call behavior where scratch registers are preserved across
^1da177e4c3f41 Linus Torvalds 2005-04-16 331 * system calls (unless used by the system call itself).
^1da177e4c3f41 Linus Torvalds 2005-04-16 332 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 333 # define THREAD_FLAGS_TO_CLEAR (IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID \
^1da177e4c3f41 Linus Torvalds 2005-04-16 334 | IA64_THREAD_PM_VALID)
^1da177e4c3f41 Linus Torvalds 2005-04-16 335 # define THREAD_FLAGS_TO_SET 0
^1da177e4c3f41 Linus Torvalds 2005-04-16 336 p->thread.flags = ((current->thread.flags & ~THREAD_FLAGS_TO_CLEAR)
^1da177e4c3f41 Linus Torvalds 2005-04-16 337 | THREAD_FLAGS_TO_SET);
54d496c3915a10 Al Viro 2012-10-14 338
^1da177e4c3f41 Linus Torvalds 2005-04-16 339 ia64_drop_fpu(p); /* don't pick up stale state from a CPU's fph */
^1da177e4c3f41 Linus Torvalds 2005-04-16 340
4727dc20e04222 Jens Axboe 2021-02-17 341 if (unlikely(p->flags & (PF_KTHREAD | PF_IO_WORKER))) {
54d496c3915a10 Al Viro 2012-10-14 342 if (unlikely(!user_stack_base)) {
54d496c3915a10 Al Viro 2012-10-14 343 /* fork_idle() called us */
54d496c3915a10 Al Viro 2012-10-14 344 return 0;
54d496c3915a10 Al Viro 2012-10-14 345 }
54d496c3915a10 Al Viro 2012-10-14 346 memset(child_stack, 0, sizeof(*child_ptregs) + sizeof(*child_stack));
54d496c3915a10 Al Viro 2012-10-14 347 child_stack->r4 = user_stack_base; /* payload */
54d496c3915a10 Al Viro 2012-10-14 348 child_stack->r5 = user_stack_size; /* argument */
54d496c3915a10 Al Viro 2012-10-14 349 /*
54d496c3915a10 Al Viro 2012-10-14 350 * Preserve PSR bits, except for bits 32-34 and 37-45,
54d496c3915a10 Al Viro 2012-10-14 351 * which we can't read.
54d496c3915a10 Al Viro 2012-10-14 352 */
54d496c3915a10 Al Viro 2012-10-14 353 child_ptregs->cr_ipsr = ia64_getreg(_IA64_REG_PSR) | IA64_PSR_BN;
54d496c3915a10 Al Viro 2012-10-14 354 /* mark as valid, empty frame */
54d496c3915a10 Al Viro 2012-10-14 355 child_ptregs->cr_ifs = 1UL << 63;
54d496c3915a10 Al Viro 2012-10-14 356 child_stack->ar_fpsr = child_ptregs->ar_fpsr
54d496c3915a10 Al Viro 2012-10-14 357 = ia64_getreg(_IA64_REG_AR_FPSR);
54d496c3915a10 Al Viro 2012-10-14 358 child_stack->pr = (1 << PRED_KERNEL_STACK);
54d496c3915a10 Al Viro 2012-10-14 359 child_stack->ar_bspstore = child_rbs;
54d496c3915a10 Al Viro 2012-10-14 360 child_stack->b0 = (unsigned long) &ia64_ret_from_clone;
54d496c3915a10 Al Viro 2012-10-14 361
54d496c3915a10 Al Viro 2012-10-14 362 /* stop some PSR bits from being inherited.
54d496c3915a10 Al Viro 2012-10-14 363 * the psr.up/psr.pp bits must be cleared on fork but inherited on execve()
54d496c3915a10 Al Viro 2012-10-14 364 * therefore we must specify them explicitly here and not include them in
54d496c3915a10 Al Viro 2012-10-14 365 * IA64_PSR_BITS_TO_CLEAR.
54d496c3915a10 Al Viro 2012-10-14 366 */
54d496c3915a10 Al Viro 2012-10-14 367 child_ptregs->cr_ipsr = ((child_ptregs->cr_ipsr | IA64_PSR_BITS_TO_SET)
54d496c3915a10 Al Viro 2012-10-14 368 & ~(IA64_PSR_BITS_TO_CLEAR | IA64_PSR_PP | IA64_PSR_UP));
54d496c3915a10 Al Viro 2012-10-14 369
54d496c3915a10 Al Viro 2012-10-14 370 return 0;
54d496c3915a10 Al Viro 2012-10-14 371 }
54d496c3915a10 Al Viro 2012-10-14 372 stack = ((struct switch_stack *) regs) - 1;
54d496c3915a10 Al Viro 2012-10-14 373 /* copy parent's switch_stack & pt_regs to child: */
54d496c3915a10 Al Viro 2012-10-14 374 memcpy(child_stack, stack, sizeof(*child_ptregs) + sizeof(*child_stack));
54d496c3915a10 Al Viro 2012-10-14 375
54d496c3915a10 Al Viro 2012-10-14 376 /* copy the parent's register backing store to the child: */
54d496c3915a10 Al Viro 2012-10-14 377 rbs_size = stack->ar_bspstore - rbs;
54d496c3915a10 Al Viro 2012-10-14 378 memcpy((void *) child_rbs, (void *) rbs, rbs_size);
54d496c3915a10 Al Viro 2012-10-14 379 if (clone_flags & CLONE_SETTLS)
ddb815bd545901 Christian Brauner 2020-05-17 380 child_ptregs->r13 = tls;
54d496c3915a10 Al Viro 2012-10-14 381 if (user_stack_base) {
54d496c3915a10 Al Viro 2012-10-14 382 child_ptregs->r12 = user_stack_base + user_stack_size - 16;
54d496c3915a10 Al Viro 2012-10-14 383 child_ptregs->ar_bspstore = user_stack_base;
54d496c3915a10 Al Viro 2012-10-14 384 child_ptregs->ar_rnat = 0;
54d496c3915a10 Al Viro 2012-10-14 385 child_ptregs->loadrs = 0;
54d496c3915a10 Al Viro 2012-10-14 386 }
54d496c3915a10 Al Viro 2012-10-14 387 child_stack->ar_bspstore = child_rbs + rbs_size;
54d496c3915a10 Al Viro 2012-10-14 388 child_stack->b0 = (unsigned long) &ia64_ret_from_clone;
54d496c3915a10 Al Viro 2012-10-14 389
54d496c3915a10 Al Viro 2012-10-14 390 /* stop some PSR bits from being inherited.
54d496c3915a10 Al Viro 2012-10-14 391 * the psr.up/psr.pp bits must be cleared on fork but inherited on execve()
54d496c3915a10 Al Viro 2012-10-14 392 * therefore we must specify them explicitly here and not include them in
54d496c3915a10 Al Viro 2012-10-14 393 * IA64_PSR_BITS_TO_CLEAR.
54d496c3915a10 Al Viro 2012-10-14 394 */
54d496c3915a10 Al Viro 2012-10-14 395 child_ptregs->cr_ipsr = ((child_ptregs->cr_ipsr | IA64_PSR_BITS_TO_SET)
54d496c3915a10 Al Viro 2012-10-14 396 & ~(IA64_PSR_BITS_TO_CLEAR | IA64_PSR_PP | IA64_PSR_UP));
^1da177e4c3f41 Linus Torvalds 2005-04-16 397 return retval;
^1da177e4c3f41 Linus Torvalds 2005-04-16 398 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 399
ddb815bd545901 Christian Brauner 2020-05-17 @400 asmlinkage long ia64_clone(unsigned long clone_flags, unsigned long stack_start,
ddb815bd545901 Christian Brauner 2020-05-17 401 unsigned long stack_size, unsigned long parent_tidptr,
ddb815bd545901 Christian Brauner 2020-05-17 402 unsigned long child_tidptr, unsigned long tls)
ddb815bd545901 Christian Brauner 2020-05-17 403 {
ddb815bd545901 Christian Brauner 2020-05-17 404 struct kernel_clone_args args = {
ddb815bd545901 Christian Brauner 2020-05-17 405 .flags = (lower_32_bits(clone_flags) & ~CSIGNAL),
ddb815bd545901 Christian Brauner 2020-05-17 406 .pidfd = (int __user *)parent_tidptr,
ddb815bd545901 Christian Brauner 2020-05-17 407 .child_tid = (int __user *)child_tidptr,
ddb815bd545901 Christian Brauner 2020-05-17 408 .parent_tid = (int __user *)parent_tidptr,
ddb815bd545901 Christian Brauner 2020-05-17 409 .exit_signal = (lower_32_bits(clone_flags) & CSIGNAL),
ddb815bd545901 Christian Brauner 2020-05-17 410 .stack = stack_start,
ddb815bd545901 Christian Brauner 2020-05-17 411 .stack_size = stack_size,
ddb815bd545901 Christian Brauner 2020-05-17 412 .tls = tls,
ddb815bd545901 Christian Brauner 2020-05-17 413 };
ddb815bd545901 Christian Brauner 2020-05-17 414
f8c40ebe659db3 Christian Brauner 2020-08-19 415 return kernel_clone(&args);
ddb815bd545901 Christian Brauner 2020-05-17 416 }
ddb815bd545901 Christian Brauner 2020-05-17 417
:::::: The code at line 230 was first introduced by commit
:::::: 0888f06ac99f993df2bb4c479f5b9306dafe154f [PATCH] sched: fix bad missed wakeups in the i386, x86_64, ia64, ACPI and APM idle code
:::::: TO: Ingo Molnar <mingo@...e.hu>
:::::: CC: Linus Torvalds <torvalds@...dy.osdl.org>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
Powered by blists - more mailing lists