* [ammarfaizi2-block:akpm/mm/mm-nonmm-unstable 50/50] kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true
@ 2022-08-25 4:30 kernel test robot
2022-08-25 6:20 ` Uros Bizjak
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2022-08-25 4:30 UTC (permalink / raw)
To: Uros Bizjak
Cc: llvm, kbuild-all, Ammar Faizi, GNU/Weeb Mailing List,
linux-kernel, Andrew Morton, Linux Memory Management List
Hi Uros,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://github.com/ammarfaizi2/linux-block akpm/mm/mm-nonmm-unstable
head: 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
commit: 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc [50/50] smpboot: use atomic_try_cmpxchg in cpu_wait_death and cpu_report_death
config: x86_64-randconfig-a003 (https://download.01.org/0day-ci/archive/20220825/[email protected]/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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/ammarfaizi2/linux-block/commit/2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
git fetch --no-tags ammarfaizi2-block akpm/mm/mm-nonmm-unstable
git checkout 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
All warnings (new ones prefixed by >>):
>> kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/smpboot.c:449:6: note: uninitialized use occurs here
if (oldstate == CPU_DEAD) {
^~~~~~~~
kernel/smpboot.c:435:2: note: remove the 'if' if its condition is always false
if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/smpboot.c:428:14: note: initialize the variable 'oldstate' to silence this warning
int oldstate;
^
= 0
1 warning generated.
vim +435 kernel/smpboot.c
8038dad7e88858 Paul E. McKenney 2015-02-25 421
8038dad7e88858 Paul E. McKenney 2015-02-25 422 /*
8038dad7e88858 Paul E. McKenney 2015-02-25 423 * Wait for the specified CPU to exit the idle loop and die.
8038dad7e88858 Paul E. McKenney 2015-02-25 424 */
8038dad7e88858 Paul E. McKenney 2015-02-25 425 bool cpu_wait_death(unsigned int cpu, int seconds)
8038dad7e88858 Paul E. McKenney 2015-02-25 426 {
8038dad7e88858 Paul E. McKenney 2015-02-25 427 int jf_left = seconds * HZ;
8038dad7e88858 Paul E. McKenney 2015-02-25 428 int oldstate;
8038dad7e88858 Paul E. McKenney 2015-02-25 429 bool ret = true;
8038dad7e88858 Paul E. McKenney 2015-02-25 430 int sleep_jf = 1;
8038dad7e88858 Paul E. McKenney 2015-02-25 431
8038dad7e88858 Paul E. McKenney 2015-02-25 432 might_sleep();
8038dad7e88858 Paul E. McKenney 2015-02-25 433
8038dad7e88858 Paul E. McKenney 2015-02-25 434 /* The outgoing CPU will normally get done quite quickly. */
8038dad7e88858 Paul E. McKenney 2015-02-25 @435 if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
8038dad7e88858 Paul E. McKenney 2015-02-25 436 goto update_state;
8038dad7e88858 Paul E. McKenney 2015-02-25 437 udelay(5);
8038dad7e88858 Paul E. McKenney 2015-02-25 438
8038dad7e88858 Paul E. McKenney 2015-02-25 439 /* But if the outgoing CPU dawdles, wait increasingly long times. */
8038dad7e88858 Paul E. McKenney 2015-02-25 440 while (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) != CPU_DEAD) {
8038dad7e88858 Paul E. McKenney 2015-02-25 441 schedule_timeout_uninterruptible(sleep_jf);
8038dad7e88858 Paul E. McKenney 2015-02-25 442 jf_left -= sleep_jf;
8038dad7e88858 Paul E. McKenney 2015-02-25 443 if (jf_left <= 0)
8038dad7e88858 Paul E. McKenney 2015-02-25 444 break;
8038dad7e88858 Paul E. McKenney 2015-02-25 445 sleep_jf = DIV_ROUND_UP(sleep_jf * 11, 10);
8038dad7e88858 Paul E. McKenney 2015-02-25 446 }
8038dad7e88858 Paul E. McKenney 2015-02-25 447 oldstate = atomic_read(&per_cpu(cpu_hotplug_state, cpu));
2d1e07c7534c14 Uros Bizjak 2022-08-23 448 update_state:
8038dad7e88858 Paul E. McKenney 2015-02-25 449 if (oldstate == CPU_DEAD) {
8038dad7e88858 Paul E. McKenney 2015-02-25 450 /* Outgoing CPU died normally, update state. */
8038dad7e88858 Paul E. McKenney 2015-02-25 451 smp_mb(); /* atomic_read() before update. */
8038dad7e88858 Paul E. McKenney 2015-02-25 452 atomic_set(&per_cpu(cpu_hotplug_state, cpu), CPU_POST_DEAD);
8038dad7e88858 Paul E. McKenney 2015-02-25 453 } else {
8038dad7e88858 Paul E. McKenney 2015-02-25 454 /* Outgoing CPU still hasn't died, set state accordingly. */
2d1e07c7534c14 Uros Bizjak 2022-08-23 455 if (!atomic_try_cmpxchg(&per_cpu(cpu_hotplug_state, cpu),
2d1e07c7534c14 Uros Bizjak 2022-08-23 456 &oldstate, CPU_BROKEN))
8038dad7e88858 Paul E. McKenney 2015-02-25 457 goto update_state;
8038dad7e88858 Paul E. McKenney 2015-02-25 458 ret = false;
8038dad7e88858 Paul E. McKenney 2015-02-25 459 }
8038dad7e88858 Paul E. McKenney 2015-02-25 460 return ret;
8038dad7e88858 Paul E. McKenney 2015-02-25 461 }
8038dad7e88858 Paul E. McKenney 2015-02-25 462
:::::: The code at line 435 was first introduced by commit
:::::: 8038dad7e888581266c76df15d70ca457a3c5910 smpboot: Add common code for notification from dying CPU
:::::: TO: Paul E. McKenney <[email protected]>
:::::: CC: Paul E. McKenney <[email protected]>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [ammarfaizi2-block:akpm/mm/mm-nonmm-unstable 50/50] kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true
2022-08-25 4:30 [ammarfaizi2-block:akpm/mm/mm-nonmm-unstable 50/50] kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true kernel test robot
@ 2022-08-25 6:20 ` Uros Bizjak
0 siblings, 0 replies; 2+ messages in thread
From: Uros Bizjak @ 2022-08-25 6:20 UTC (permalink / raw)
To: kernel test robot
Cc: llvm, kbuild-all, Ammar Faizi, GNU/Weeb Mailing List,
linux-kernel, Andrew Morton, Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 6712 bytes --]
On Thu, Aug 25, 2022 at 6:30 AM kernel test robot <[email protected]> wrote:
>
> Hi Uros,
>
> FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
No, the warning is correct, and although my compiler didn't emit the
warning, the variable is indeed uninitialized.
The patched kernel worked for me and I was not careful enough to find
all incoming edges to the label.
Attached is an incremental patch I am testing, will send it later
today as a proper patch.
Uros.
> tree: https://github.com/ammarfaizi2/linux-block akpm/mm/mm-nonmm-unstable
> head: 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
> commit: 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc [50/50] smpboot: use atomic_try_cmpxchg in cpu_wait_death and cpu_report_death
> config: x86_64-randconfig-a003 (https://download.01.org/0day-ci/archive/20220825/[email protected]/config)
> compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
> 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/ammarfaizi2/linux-block/commit/2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
> git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
> git fetch --no-tags ammarfaizi2-block akpm/mm/mm-nonmm-unstable
> git checkout 2d1e07c7534c14e56ac3818fa24e7c1643a9b1dc
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <[email protected]>
>
> All warnings (new ones prefixed by >>):
>
> >> kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
> if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/smpboot.c:449:6: note: uninitialized use occurs here
> if (oldstate == CPU_DEAD) {
> ^~~~~~~~
> kernel/smpboot.c:435:2: note: remove the 'if' if its condition is always false
> if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/smpboot.c:428:14: note: initialize the variable 'oldstate' to silence this warning
> int oldstate;
> ^
> = 0
> 1 warning generated.
>
>
> vim +435 kernel/smpboot.c
>
> 8038dad7e88858 Paul E. McKenney 2015-02-25 421
> 8038dad7e88858 Paul E. McKenney 2015-02-25 422 /*
> 8038dad7e88858 Paul E. McKenney 2015-02-25 423 * Wait for the specified CPU to exit the idle loop and die.
> 8038dad7e88858 Paul E. McKenney 2015-02-25 424 */
> 8038dad7e88858 Paul E. McKenney 2015-02-25 425 bool cpu_wait_death(unsigned int cpu, int seconds)
> 8038dad7e88858 Paul E. McKenney 2015-02-25 426 {
> 8038dad7e88858 Paul E. McKenney 2015-02-25 427 int jf_left = seconds * HZ;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 428 int oldstate;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 429 bool ret = true;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 430 int sleep_jf = 1;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 431
> 8038dad7e88858 Paul E. McKenney 2015-02-25 432 might_sleep();
> 8038dad7e88858 Paul E. McKenney 2015-02-25 433
> 8038dad7e88858 Paul E. McKenney 2015-02-25 434 /* The outgoing CPU will normally get done quite quickly. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25 @435 if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
> 8038dad7e88858 Paul E. McKenney 2015-02-25 436 goto update_state;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 437 udelay(5);
> 8038dad7e88858 Paul E. McKenney 2015-02-25 438
> 8038dad7e88858 Paul E. McKenney 2015-02-25 439 /* But if the outgoing CPU dawdles, wait increasingly long times. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25 440 while (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) != CPU_DEAD) {
> 8038dad7e88858 Paul E. McKenney 2015-02-25 441 schedule_timeout_uninterruptible(sleep_jf);
> 8038dad7e88858 Paul E. McKenney 2015-02-25 442 jf_left -= sleep_jf;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 443 if (jf_left <= 0)
> 8038dad7e88858 Paul E. McKenney 2015-02-25 444 break;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 445 sleep_jf = DIV_ROUND_UP(sleep_jf * 11, 10);
> 8038dad7e88858 Paul E. McKenney 2015-02-25 446 }
> 8038dad7e88858 Paul E. McKenney 2015-02-25 447 oldstate = atomic_read(&per_cpu(cpu_hotplug_state, cpu));
> 2d1e07c7534c14 Uros Bizjak 2022-08-23 448 update_state:
> 8038dad7e88858 Paul E. McKenney 2015-02-25 449 if (oldstate == CPU_DEAD) {
> 8038dad7e88858 Paul E. McKenney 2015-02-25 450 /* Outgoing CPU died normally, update state. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25 451 smp_mb(); /* atomic_read() before update. */
> 8038dad7e88858 Paul E. McKenney 2015-02-25 452 atomic_set(&per_cpu(cpu_hotplug_state, cpu), CPU_POST_DEAD);
> 8038dad7e88858 Paul E. McKenney 2015-02-25 453 } else {
> 8038dad7e88858 Paul E. McKenney 2015-02-25 454 /* Outgoing CPU still hasn't died, set state accordingly. */
> 2d1e07c7534c14 Uros Bizjak 2022-08-23 455 if (!atomic_try_cmpxchg(&per_cpu(cpu_hotplug_state, cpu),
> 2d1e07c7534c14 Uros Bizjak 2022-08-23 456 &oldstate, CPU_BROKEN))
> 8038dad7e88858 Paul E. McKenney 2015-02-25 457 goto update_state;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 458 ret = false;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 459 }
> 8038dad7e88858 Paul E. McKenney 2015-02-25 460 return ret;
> 8038dad7e88858 Paul E. McKenney 2015-02-25 461 }
> 8038dad7e88858 Paul E. McKenney 2015-02-25 462
>
> :::::: The code at line 435 was first introduced by commit
> :::::: 8038dad7e888581266c76df15d70ca457a3c5910 smpboot: Add common code for notification from dying CPU
>
> :::::: TO: Paul E. McKenney <[email protected]>
> :::::: CC: Paul E. McKenney <[email protected]>
>
> --
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
[-- Attachment #2: 0001-smpboot-Fix-cpu_wait_death-for-early-cpu-death.patch --]
[-- Type: text/x-patch, Size: 1227 bytes --]
From 29c419f9c27677a4842fe2aef36dcf44b4321dfe Mon Sep 17 00:00:00 2001
From: Uros Bizjak <[email protected]>
Date: Thu, 25 Aug 2022 08:09:44 +0200
Subject: [PATCH] smpboot: Fix cpu_wait_death for early cpu death
Fix uninitialized variable in case cpu dies early.
Reported-by: kernel test robot <[email protected]>
Cc: Andrew Morton <[email protected]>
Signed-off-by: Uros Bizjak <[email protected]>
---
kernel/smpboot.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/smpboot.c b/kernel/smpboot.c
index f3cf1a9a8b44..2c7396da470c 100644
--- a/kernel/smpboot.c
+++ b/kernel/smpboot.c
@@ -433,7 +433,7 @@ bool cpu_wait_death(unsigned int cpu, int seconds)
/* The outgoing CPU will normally get done quite quickly. */
if (atomic_read(&per_cpu(cpu_hotplug_state, cpu)) == CPU_DEAD)
- goto update_state;
+ goto update_state_early;
udelay(5);
/* But if the outgoing CPU dawdles, wait increasingly long times. */
@@ -444,6 +444,7 @@ bool cpu_wait_death(unsigned int cpu, int seconds)
break;
sleep_jf = DIV_ROUND_UP(sleep_jf * 11, 10);
}
+update_state_early:
oldstate = atomic_read(&per_cpu(cpu_hotplug_state, cpu));
update_state:
if (oldstate == CPU_DEAD) {
--
2.31.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-08-25 6:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-25 4:30 [ammarfaizi2-block:akpm/mm/mm-nonmm-unstable 50/50] kernel/smpboot.c:435:6: warning: variable 'oldstate' is used uninitialized whenever 'if' condition is true kernel test robot
2022-08-25 6:20 ` Uros Bizjak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox