linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [linux-rt-devel:linux-5.14.y-rt-rebase 194/245] kernel/rcu/rcutorture.c:1525:16: warning: Value stored to 'preempts_irq' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
@ 2021-08-18  0:12 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-08-18  0:12 UTC (permalink / raw)
  To: Scott Wood
  Cc: clang-built-linux, kbuild-all, linux-kernel,
	Sebastian Andrzej Siewior, Thomas Gleixner

[-- Attachment #1: Type: text/plain, Size: 16073 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git linux-5.14.y-rt-rebase
head:   0eead4e5a60cb716ec911a552787a69332cf6943
commit: 32a3c5313cce130c4526507975314b84714b043a [194/245] rcutorture: Avoid problematic critical section nesting on RT
config: mips-randconfig-c004-20210816 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 44d0a99a12ec7ead4d2f5ef649ba05b40f6d463d)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git/commit/?id=32a3c5313cce130c4526507975314b84714b043a
        git remote add linux-rt-devel https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git
        git fetch --no-tags linux-rt-devel linux-5.14.y-rt-rebase
        git checkout 32a3c5313cce130c4526507975314b84714b043a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                   ^
   kernel/rcu/rcutorture.c:1734:9: note: Calling 'timer_pending'
                           if (!timer_pending(&t))
                                ^~~~~~~~~~~~~~~~~
   include/linux/timer.h:168:10: note: Calling 'hlist_unhashed_lockless'
           return !hlist_unhashed_lockless(&timer->entry);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:821:10: note: Left side of '||' is false
           return !READ_ONCE(h->pprev);
                   ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:290:3: note: expanded from macro '__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   include/linux/list.h:821:10: note: Left side of '||' is false
           return !READ_ONCE(h->pprev);
                   ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:290:3: note: expanded from macro '__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   include/linux/list.h:821:10: note: Left side of '||' is true
           return !READ_ONCE(h->pprev);
                   ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:291:28: note: expanded from macro '__native_word'
            sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
                                     ^
   include/linux/list.h:821:10: note: Taking false branch
           return !READ_ONCE(h->pprev);
                   ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
           ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   include/linux/list.h:821:10: note: Loop condition is false.  Exiting loop
           return !READ_ONCE(h->pprev);
                   ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
           ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert'
           do {                                                            \
           ^
   include/linux/list.h:821:2: note: Undefined or garbage value returned to caller
           return !READ_ONCE(h->pprev);
           ^      ~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:387:3: warning: Value stored to 'started' is never read [clang-analyzer-deadcode.DeadStores]
                   started = cur_ops->get_gp_seq();
                   ^         ~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:387:3: note: Value stored to 'started' is never read
                   started = cur_ops->get_gp_seq();
                   ^         ~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:388:3: warning: Value stored to 'ts' is never read [clang-analyzer-deadcode.DeadStores]
                   ts = rcu_trace_clock_local();
                   ^    ~~~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:388:3: note: Value stored to 'ts' is never read
                   ts = rcu_trace_clock_local();
                   ^    ~~~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:393:3: warning: Value stored to 'completed' is never read [clang-analyzer-deadcode.DeadStores]
                   completed = cur_ops->get_gp_seq();
                   ^           ~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:393:3: note: Value stored to 'completed' is never read
                   completed = cur_ops->get_gp_seq();
                   ^           ~~~~~~~~~~~~~~~~~~~~~
>> kernel/rcu/rcutorture.c:1525:16: warning: Value stored to 'preempts_irq' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           unsigned long preempts_irq = preempts | RCUTORTURE_RDR_IRQ;
                         ^~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1525:16: note: Value stored to 'preempts_irq' during its initialization is never read
           unsigned long preempts_irq = preempts | RCUTORTURE_RDR_IRQ;
                         ^~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1634:2: warning: Value stored to 'ts' is never read [clang-analyzer-deadcode.DeadStores]
           ts = rcu_trace_clock_local();
           ^    ~~~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1634:2: note: Value stored to 'ts' is never read
           ts = rcu_trace_clock_local();
           ^    ~~~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1667:13: warning: 1st function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage]
                   WARN_ONCE(cur_ops->poll_gp_state(cookie),
                             ^
   include/asm-generic/bug.h:150:18: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
                           ^~~~~~~~~
   include/linux/once_lite.h:15:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   kernel/rcu/rcutorture.c:1615:2: note: 'cookie' declared without an initial value
           unsigned long cookie;
           ^~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1628:2: note: '__ret_do_once' is false
           WARN_ON_ONCE(!rcu_is_watching());
           ^
   include/asm-generic/bug.h:146:2: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/once_lite.h:17:16: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                ^~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   kernel/rcu/rcutorture.c:1628:2: note: Left side of '&&' is false
           WARN_ON_ONCE(!rcu_is_watching());
           ^
   include/asm-generic/bug.h:146:2: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ^
   include/linux/once_lite.h:17:30: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                              ^
   kernel/rcu/rcutorture.c:1628:2: note: Taking false branch
           WARN_ON_ONCE(!rcu_is_watching());
           ^
   include/asm-generic/bug.h:146:2: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ^
   include/linux/once_lite.h:17:3: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                   ^
   kernel/rcu/rcutorture.c:1631:6: note: Assuming field 'get_gp_state' is null
           if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
               ^~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1631:28: note: Left side of '&&' is false
           if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
                                     ^
   kernel/rcu/rcutorture.c:1635:6: note: Left side of '||' is false
           p = rcu_dereference_check(rcu_torture_current,
               ^
   include/linux/rcupdate.h:542:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), (c) || rcu_read_lock_held(), __rcu)
           ^
   include/linux/rcupdate.h:403:48: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *________p1 = (typeof(*p) *__force)READ_ONCE(p); \
                                                         ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:290:3: note: expanded from macro '__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   kernel/rcu/rcutorture.c:1635:6: note: Left side of '||' is false
           p = rcu_dereference_check(rcu_torture_current,
               ^
   include/linux/rcupdate.h:542:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), (c) || rcu_read_lock_held(), __rcu)
           ^
   include/linux/rcupdate.h:403:48: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *________p1 = (typeof(*p) *__force)READ_ONCE(p); \
                                                         ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:290:3: note: expanded from macro '__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   kernel/rcu/rcutorture.c:1635:6: note: Left side of '||' is true
           p = rcu_dereference_check(rcu_torture_current,
               ^
   include/linux/rcupdate.h:542:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), (c) || rcu_read_lock_held(), __rcu)

vim +/preempts_irq +1525 kernel/rcu/rcutorture.c

  1516	
  1517	/* Return a random protection state mask, but with at least one bit set. */
  1518	static int
  1519	rcutorture_extend_mask(int oldmask, struct torture_random_state *trsp)
  1520	{
  1521		int mask = rcutorture_extend_mask_max();
  1522		unsigned long randmask1 = torture_random(trsp) >> 8;
  1523		unsigned long randmask2 = randmask1 >> 3;
  1524		unsigned long preempts = RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED;
> 1525		unsigned long preempts_irq = preempts | RCUTORTURE_RDR_IRQ;
  1526		unsigned long nonatomic_bhs = RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH;
  1527		unsigned long atomic_bhs = RCUTORTURE_RDR_ATOM_BH |
  1528					   RCUTORTURE_RDR_ATOM_RBH;
  1529		unsigned long tmp;
  1530	
  1531		WARN_ON_ONCE(mask >> RCUTORTURE_RDR_SHIFT);
  1532		/* Mostly only one bit (need preemption!), sometimes lots of bits. */
  1533		if (!(randmask1 & 0x7))
  1534			mask = mask & randmask2;
  1535		else
  1536			mask = mask & (1 << (randmask2 % RCUTORTURE_RDR_NBITS));
  1537	
  1538		/*
  1539		 * Can't enable bh w/irq disabled.
  1540		 */
  1541		tmp = atomic_bhs | nonatomic_bhs;
  1542		if (mask & RCUTORTURE_RDR_IRQ)
  1543			mask |= oldmask & tmp;
  1544	
  1545		/*
  1546		 * Ideally these sequences would be detected in debug builds
  1547		 * (regardless of RT), but until then don't stop testing
  1548		 * them on non-RT.
  1549		 */
  1550		if (IS_ENABLED(CONFIG_PREEMPT_RT)) {
  1551			/*
  1552			 * Can't release the outermost rcu lock in an irq disabled
  1553			 * section without preemption also being disabled, if irqs
  1554			 * had ever been enabled during this RCU critical section
  1555			 * (could leak a special flag and delay reporting the qs).
  1556			 */
  1557			if ((oldmask & RCUTORTURE_RDR_RCU) &&
  1558			    (mask & RCUTORTURE_RDR_IRQ) &&
  1559			    !(mask & preempts))
  1560				mask |= RCUTORTURE_RDR_RCU;
  1561	
  1562			/* Can't modify atomic bh in non-atomic context */
  1563			if ((oldmask & atomic_bhs) && (mask & atomic_bhs) &&
  1564			    !(mask & preempts_irq)) {
  1565				mask |= oldmask & preempts_irq;
  1566				if (mask & RCUTORTURE_RDR_IRQ)
  1567					mask |= oldmask & tmp;
  1568			}
  1569			if ((mask & atomic_bhs) && !(mask & preempts_irq))
  1570				mask |= RCUTORTURE_RDR_PREEMPT;
  1571	
  1572			/* Can't modify non-atomic bh in atomic context */
  1573			tmp = nonatomic_bhs;
  1574			if (oldmask & preempts_irq)
  1575				mask &= ~tmp;
  1576			if ((oldmask | mask) & preempts_irq)
  1577				mask |= oldmask & tmp;
  1578		}
  1579	
  1580		return mask ?: RCUTORTURE_RDR_RCU;
  1581	}
  1582	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 35604 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-18  0:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-18  0:12 [linux-rt-devel:linux-5.14.y-rt-rebase 194/245] kernel/rcu/rcutorture.c:1525:16: warning: Value stored to 'preempts_irq' during its initialization is never read [clang-analyzer-deadcode.DeadStores] kernel test robot

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).