linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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/202208251224.teVMa7Yy-lkp@intel.com/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 <lkp@intel.com>

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 <paulmck@linux.vnet.ibm.com>
:::::: CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

-- 
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 <lkp@intel.com> 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/202208251224.teVMa7Yy-lkp@intel.com/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 <lkp@intel.com>
>
> 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 <paulmck@linux.vnet.ibm.com>
> :::::: CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> --
> 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 <ubizjak@gmail.com>
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 <lkp@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
---
 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;
as well as URLs for NNTP newsgroup(s).