On Thu, May 06, 2021 at 10:16:43AM +0800, kernel test robot wrote:
tree:
https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev.2021.05.02a
head: 35d2c62851bc03a945ae81ab0726985f726107b1
commit: 35d2c62851bc03a945ae81ab0726985f726107b1 [114/114] refscale: Add measurement of
clock readout
config: nios2-randconfig-r014-20210505 (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.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/paulmck/linux-rcu.git/com...
git remote add rcu
https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
git fetch --no-tags rcu dev.2021.05.02a
git checkout 35d2c62851bc03a945ae81ab0726985f726107b1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=nios2
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
kernel/rcu/refscale.c: In function 'ref_clock_section':
>> kernel/rcu/refscale.c:472:15: warning: variable 'x' set but not used
[-Wunused-but-set-variable]
472 | volatile u64 x;
| ^
kernel/rcu/refscale.c: In function 'ref_clock_delay_section':
kernel/rcu/refscale.c:484:15: warning: variable 'x' set but not used
[-Wunused-but-set-variable]
484 | volatile u64 x;
| ^
vim +/x +472 kernel/rcu/refscale.c
469
470 static void ref_clock_section(const int nloops)
471 {
> 472 volatile u64 x;
473 int i;
474
475 preempt_disable();
476 for (i = nloops; i >= 0; i--) {
477 x = ktime_get_real_fast_ns();
478 }
479 preempt_enable();
480 }
481
OK, how about with the following fixup patch?
But please note that this compiler warning is incorrect. The variable
is marked volatile, so the compiler cannot possibly know that it is in
fact unused. Some debugger might be examining it, for but one example.
Thus, the fixup patch below is a workaround for the compiler bug.
Thanx, Paul
------------------------------------------------------------------------
commit 1838223c42250bfc27a15b9712591e663babb1f0
Author: Paul E. McKenney <paulmck(a)kernel.org>
Date: Mon May 10 11:12:01 2021 -0700
squash! refscale: Add measurement of clock readout
[ paulmck: Adjust volatility per kernel test robot feedback. ]
Signed-off-by: Paul E. McKenney <paulmck(a)kernel.org>
diff --git a/kernel/rcu/refscale.c b/kernel/rcu/refscale.c
index bef61a322104..20e892b2502c 100644
--- a/kernel/rcu/refscale.c
+++ b/kernel/rcu/refscale.c
@@ -467,29 +467,33 @@ static struct ref_scale_ops acqrel_ops = {
.name = "acqrel"
};
+static volatile u64 stopopts;
+
static void ref_clock_section(const int nloops)
{
- volatile u64 x;
+ u64 x;
int i;
preempt_disable();
for (i = nloops; i >= 0; i--) {
- x = ktime_get_real_fast_ns();
+ x += ktime_get_real_fast_ns();
}
preempt_enable();
+ stopopts = x;
}
static void ref_clock_delay_section(const int nloops, const int udl, const int ndl)
{
- volatile u64 x;
+ u64 x;
int i;
preempt_disable();
for (i = nloops; i >= 0; i--) {
- x = ktime_get_real_fast_ns();
+ x += ktime_get_real_fast_ns();
un_delay(udl, ndl);
}
preempt_enable();
+ stopopts = x;
}
static struct ref_scale_ops clock_ops = {