From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: include/linux/mmzone.h:870:9: warning: Access to field 'pgdat' results in a dereference of a null pointer (loaded from variable 'lruvec') [clang-analyzer-core.NullDereference]
Date: Tue, 17 Aug 2021 14:25:31 +0800 [thread overview]
Message-ID: <202108171406.OCWBWrk0-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 28094 bytes --]
CC: clang-built-linux(a)googlegroups.com
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Alex Shi <alex.shi@linux.alibaba.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 794c7931a2428a656551f2179e6a093233a6e0aa
commit: 6168d0da2b479ce25a4647de194045de1bdd1f1d mm/lru: replace pgdat lru_lock with lruvec lock
date: 8 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 8 months ago
config: arm-randconfig-c002-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 arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6168d0da2b479ce25a4647de194045de1bdd1f1d
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 6168d0da2b479ce25a4647de194045de1bdd1f1d
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 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 >>)
^
drivers/i2c/i2c-core-smbus.c:136:2: note: Undefined or garbage value returned to caller
return (status < 0) ? status : data.byte;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/i2c-core-smbus.c:176:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn]
return (status < 0) ? status : data.word;
^
drivers/i2c/i2c-core-smbus.c:643:6: note: Assuming 'length' is > I2C_SMBUS_BLOCK_MAX
if (length > I2C_SMBUS_BLOCK_MAX)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/i2c-core-smbus.c:643:2: note: Taking true branch
if (length > I2C_SMBUS_BLOCK_MAX)
^
drivers/i2c/i2c-core-smbus.c:646:2: note: Taking false branch
if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_I2C_BLOCK))
^
drivers/i2c/i2c-core-smbus.c:649:2: note: Taking false branch
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_BYTE_DATA))
^
drivers/i2c/i2c-core-smbus.c:652:2: note: Taking true branch
if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_WORD_DATA)) {
^
drivers/i2c/i2c-core-smbus.c:653:3: note: Loop condition is true. Entering loop body
while ((i + 2) <= length) {
^
drivers/i2c/i2c-core-smbus.c:655:8: note: 'status' is >= 0
if (status < 0)
^~~~~~
drivers/i2c/i2c-core-smbus.c:655:4: note: Taking false branch
if (status < 0)
^
drivers/i2c/i2c-core-smbus.c:653:3: note: Loop condition is true. Entering loop body
while ((i + 2) <= length) {
^
drivers/i2c/i2c-core-smbus.c:654:13: note: Calling 'i2c_smbus_read_word_data'
status = i2c_smbus_read_word_data(client, command + i);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/i2c-core-smbus.c:173:11: note: Calling 'i2c_smbus_xfer'
status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/i2c-core-smbus.c:539:6: note: Assuming 'res' is not equal to 0
if (res)
^~~
drivers/i2c/i2c-core-smbus.c:539:2: note: Taking true branch
if (res)
^
drivers/i2c/i2c-core-smbus.c:540:3: note: Returning without writing to 'data->word'
return res;
^
drivers/i2c/i2c-core-smbus.c:173:11: note: Returning from 'i2c_smbus_xfer'
status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/i2c-core-smbus.c:176:10: note: Assuming 'status' is >= 0
return (status < 0) ? status : data.word;
^~~~~~~~~~
drivers/i2c/i2c-core-smbus.c:176:9: note: '?' condition is false
return (status < 0) ? status : data.word;
^
drivers/i2c/i2c-core-smbus.c:176:2: note: Undefined or garbage value returned to caller
return (status < 0) ? status : data.word;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
fs/autofs/root.c:560:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
strcpy(cp, symname);
^~~~~~
fs/autofs/root.c:560:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
strcpy(cp, symname);
^~~~~~
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
fs/autofs/dev-ioctl.c:518:34: warning: Although the value stored to 'devid' is used in the enclosing expression, the value is never actually read from 'devid' [clang-analyzer-deadcode.DeadStores]
param->ismountpoint.out.devid = devid = 0;
^ ~
fs/autofs/dev-ioctl.c:518:34: note: Although the value stored to 'devid' is used in the enclosing expression, the value is never actually read from 'devid'
param->ismountpoint.out.devid = devid = 0;
^ ~
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
7 warnings generated.
>> include/linux/mmzone.h:870:9: warning: Access to field 'pgdat' results in a dereference of a null pointer (loaded from variable 'lruvec') [clang-analyzer-core.NullDereference]
return lruvec->pgdat;
^
mm/vmscan.c:4268:2: note: 'lruvec' initialized to a null pointer value
struct lruvec *lruvec = NULL;
^~~~~~~~~~~~~~~~~~~~~
mm/vmscan.c:4273:14: note: Assuming 'i' is < field 'nr'
for (i = 0; i < pvec->nr; i++) {
^~~~~~~~~~~~
mm/vmscan.c:4273:2: note: Loop condition is true. Entering loop body
for (i = 0; i < pvec->nr; i++) {
^
mm/vmscan.c:4278:7: note: Calling 'PageTransTail'
if (PageTransTail(page))
^~~~~~~~~~~~~~~~~~~
include/linux/page-flags.h:698:1: note: Returning zero, which participates in a condition later
TESTPAGEFLAG_FALSE(TransTail)
^
include/linux/page-flags.h:305:58: note: expanded from macro 'TESTPAGEFLAG_FALSE'
static inline int Page##uname(const struct page *page) { return 0; }
^~~~~~~~
mm/vmscan.c:4278:7: note: Returning from 'PageTransTail'
if (PageTransTail(page))
^~~~~~~~~~~~~~~~~~~
mm/vmscan.c:4278:3: note: Taking false branch
if (PageTransTail(page))
^
mm/vmscan.c:4285:8: note: Calling 'TestClearPageLRU'
if (!TestClearPageLRU(page))
^~~~~~~~~~~~~~~~~~~~~~
include/linux/page-flags.h:337:2: note: '?' condition is true
TESTCLEARFLAG(LRU, lru, PF_HEAD)
^
include/linux/page-flags.h:288:11: note: expanded from macro 'TESTCLEARFLAG'
{ return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
^
arch/arm/include/asm/bitops.h:193:34: note: expanded from macro 'test_and_clear_bit'
#define test_and_clear_bit(nr,p) ATOMIC_BITOP(test_and_clear_bit,nr,p)
^
arch/arm/include/asm/bitops.h:181:3: note: expanded from macro 'ATOMIC_BITOP'
(__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p))
^
include/linux/page-flags.h:337:2: note: Calling '____atomic_test_and_clear_bit'
TESTCLEARFLAG(LRU, lru, PF_HEAD)
^
include/linux/page-flags.h:288:11: note: expanded from macro 'TESTCLEARFLAG'
{ return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm/include/asm/bitops.h:193:34: note: expanded from macro 'test_and_clear_bit'
#define test_and_clear_bit(nr,p) ATOMIC_BITOP(test_and_clear_bit,nr,p)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm/include/asm/bitops.h:181:30: note: expanded from macro 'ATOMIC_BITOP'
(__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p))
^~~~~~~~~~~~~~~~~~~~~~~~
note: expanded from here
arch/arm/include/asm/bitops.h:98:2: note: Loop condition is false. Exiting loop
raw_local_irq_save(flags);
^
include/linux/irqflags.h:158:2: note: expanded from macro 'raw_local_irq_save'
do { \
^
arch/arm/include/asm/bitops.h:101:2: note: Loop condition is false. Exiting loop
raw_local_irq_restore(flags);
^
include/linux/irqflags.h:163:2: note: expanded from macro 'raw_local_irq_restore'
do { \
^
arch/arm/include/asm/bitops.h:103:9: note: Assuming the condition is true
return (res & mask) != 0;
^~~~~~~~~~~~~~~~~
arch/arm/include/asm/bitops.h:103:2: note: Returning the value 1, which participates in a condition later
return (res & mask) != 0;
^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/page-flags.h:337:2: note: Returning from '____atomic_test_and_clear_bit'
TESTCLEARFLAG(LRU, lru, PF_HEAD)
^
include/linux/page-flags.h:288:11: note: expanded from macro 'TESTCLEARFLAG'
{ return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm/include/asm/bitops.h:193:34: note: expanded from macro 'test_and_clear_bit'
#define test_and_clear_bit(nr,p) ATOMIC_BITOP(test_and_clear_bit,nr,p)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/arm/include/asm/bitops.h:181:30: note: expanded from macro 'ATOMIC_BITOP'
(__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p))
^~~~~~~~~~~~~~~~~~~~~~~~
note: expanded from here
include/linux/page-flags.h:337:2: note: Returning the value 1, which participates in a condition later
TESTCLEARFLAG(LRU, lru, PF_HEAD)
^
include/linux/page-flags.h:288:4: note: expanded from macro 'TESTCLEARFLAG'
{ return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmscan.c:4285:8: note: Returning from 'TestClearPageLRU'
if (!TestClearPageLRU(page))
^~~~~~~~~~~~~~~~~~~~~~
mm/vmscan.c:4285:3: note: Taking false branch
if (!TestClearPageLRU(page))
^
mm/vmscan.c:4289:7: note: Assuming 'lruvec' is equal to 'new_lruvec'
if (lruvec != new_lruvec) {
^~~~~~~~~~~~~~~~~~~~
--
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
7 warnings generated.
drivers/misc/eeprom/idt_89hpesx.c:977:3: warning: Value stored to 'csraddr_len' is never read [clang-analyzer-deadcode.DeadStores]
csraddr_len = strnlen(csraddr_str, count);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/misc/eeprom/idt_89hpesx.c:977:3: note: Value stored to 'csraddr_len' is never read
csraddr_len = strnlen(csraddr_str, count);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 6 warnings (3 in non-user code, 3 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
mm/oom_kill.c:257:17: warning: Value stored to 'highest_zoneidx' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
enum zone_type highest_zoneidx = gfp_zone(oc->gfp_mask);
^~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
mm/oom_kill.c:257:17: note: Value stored to 'highest_zoneidx' during its initialization is never read
enum zone_type highest_zoneidx = gfp_zone(oc->gfp_mask);
^~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
mm/page-writeback.c:1408:14: warning: The result of the left shift is undefined because the right operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult]
return 1UL << (ilog2(thresh - dirty) >> 1);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/page-writeback.c:1407:6: note: Assuming 'thresh' is > 'dirty'
if (thresh > dirty)
^~~~~~~~~~~~~~
mm/page-writeback.c:1407:2: note: Taking true branch
if (thresh > dirty)
^
mm/page-writeback.c:1408:18: note: '?' condition is false
return 1UL << (ilog2(thresh - dirty) >> 1);
^
include/linux/log2.h:158:2: note: expanded from macro 'ilog2'
__builtin_constant_p(n) ? \
^
mm/page-writeback.c:1408:18: note: '?' condition is true
return 1UL << (ilog2(thresh - dirty) >> 1);
^
include/linux/log2.h:160:2: note: expanded from macro 'ilog2'
(sizeof(n) <= 4) ? \
^
mm/page-writeback.c:1408:14: note: The result of the left shift is undefined because the right operand is negative
return 1UL << (ilog2(thresh - dirty) >> 1);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
>> include/linux/mmzone.h:870:9: warning: Access to field 'pgdat' results in a dereference of a null pointer (loaded from variable 'lruvec') [clang-analyzer-core.NullDereference]
return lruvec->pgdat;
^
mm/swap.c:851:2: note: Calling 'lru_add_drain'
lru_add_drain();
^~~~~~~~~~~~~~~
mm/swap.c:726:2: note: Loop condition is false. Exiting loop
local_lock(&lru_pvecs.lock);
^
include/linux/local_lock.h:16:27: note: expanded from macro 'local_lock'
#define local_lock(lock) __local_lock(lock)
^
include/linux/local_lock_internal.h:58:3: note: expanded from macro '__local_lock'
preempt_disable(); \
^
include/linux/preempt.h:169:27: note: expanded from macro 'preempt_disable'
#define preempt_disable() \
^
mm/swap.c:726:2: note: Loop condition is false. Exiting loop
local_lock(&lru_pvecs.lock);
^
include/linux/local_lock.h:16:27: note: expanded from macro 'local_lock'
#define local_lock(lock) __local_lock(lock)
^
include/linux/local_lock_internal.h:59:22: note: expanded from macro '__local_lock'
local_lock_acquire(this_cpu_ptr(lock)); \
^
include/linux/percpu-defs.h:265:27: note: expanded from macro 'this_cpu_ptr'
#define this_cpu_ptr(ptr) raw_cpu_ptr(ptr)
^
note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/percpu-defs.h:263:47: note: expanded from macro 'per_cpu_ptr'
#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
^
include/linux/percpu-defs.h:259:2: note: expanded from macro 'VERIFY_PERCPU_PTR'
__verify_pcpu_ptr(__p); \
^
include/linux/percpu-defs.h:217:37: note: expanded from macro '__verify_pcpu_ptr'
#define __verify_pcpu_ptr(ptr) \
^
mm/swap.c:726:2: note: Loop condition is false. Exiting loop
local_lock(&lru_pvecs.lock);
^
include/linux/local_lock.h:16:27: note: expanded from macro 'local_lock'
#define local_lock(lock) __local_lock(lock)
^
include/linux/local_lock_internal.h:57:2: note: expanded from macro '__local_lock'
do { \
^
mm/swap.c:727:2: note: Calling 'lru_add_drain_cpu'
lru_add_drain_cpu(smp_processor_id());
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/swap.c:620:26: note: Loop condition is false. Exiting loop
struct pagevec *pvec = &per_cpu(lru_pvecs.lru_add, cpu);
^
include/linux/percpu-defs.h:269:29: note: expanded from macro 'per_cpu'
#define per_cpu(var, cpu) (*per_cpu_ptr(&(var), cpu))
^
include/linux/percpu-defs.h:263:47: note: expanded from macro 'per_cpu_ptr'
#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
^
include/linux/percpu-defs.h:259:2: note: expanded from macro 'VERIFY_PERCPU_PTR'
__verify_pcpu_ptr(__p); \
^
include/linux/percpu-defs.h:217:37: note: expanded from macro '__verify_pcpu_ptr'
#define __verify_pcpu_ptr(ptr) \
^
mm/swap.c:622:6: note: Assuming the condition is false
if (pagevec_count(pvec))
^~~~~~~~~~~~~~~~~~~
mm/swap.c:622:2: note: Taking false branch
if (pagevec_count(pvec))
^
mm/swap.c:625:10: note: Loop condition is false. Exiting loop
pvec = &per_cpu(lru_rotate.pvec, cpu);
^
include/linux/percpu-defs.h:269:29: note: expanded from macro 'per_cpu'
#define per_cpu(var, cpu) (*per_cpu_ptr(&(var), cpu))
^
include/linux/percpu-defs.h:263:47: note: expanded from macro 'per_cpu_ptr'
#define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
^
include/linux/percpu-defs.h:259:2: note: expanded from macro 'VERIFY_PERCPU_PTR'
__verify_pcpu_ptr(__p); \
^
include/linux/percpu-defs.h:217:37: note: expanded from macro '__verify_pcpu_ptr'
#define __verify_pcpu_ptr(ptr) \
^
mm/swap.c:627:6: note: Assuming the condition is false
if (data_race(pagevec_count(pvec))) {
^
include/linux/compiler.h:204:31: note: expanded from macro 'data_race'
#define data_race(expr) \
^
mm/swap.c:627:2: note: Taking false branch
if (data_race(pagevec_count(pvec))) {
^
mm/swap.c:636:10: note: Loop condition is false. Exiting loop
pvec = &per_cpu(lru_pvecs.lru_deactivate_file, cpu);
^
include/linux/percpu-defs.h:269:29: note: expanded from macro 'per_cpu'
vim +870 include/linux/mmzone.h
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29 866
599d0c954f91d0 Mel Gorman 2016-07-28 867 static inline struct pglist_data *lruvec_pgdat(struct lruvec *lruvec)
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29 868 {
c255a458055e45 Andrew Morton 2012-07-31 869 #ifdef CONFIG_MEMCG
599d0c954f91d0 Mel Gorman 2016-07-28 @870 return lruvec->pgdat;
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29 871 #else
867e5e1de14b2b Johannes Weiner 2019-11-30 872 return container_of(lruvec, struct pglist_data, __lruvec);
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29 873 #endif
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29 874 }
7f5e86c2ccc148 Konstantin Khlebnikov 2012-05-29 875
:::::: The code at line 870 was first introduced by commit
:::::: 599d0c954f91d0689c9bb421b5bc04ea02437a41 mm, vmscan: move LRU lists to node
:::::: TO: Mel Gorman <mgorman@techsingularity.net>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26948 bytes --]
next reply other threads:[~2021-08-17 6:25 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-17 6:25 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-08-20 12:42 include/linux/mmzone.h:870:9: warning: Access to field 'pgdat' results in a dereference of a null pointer (loaded from variable 'lruvec') [clang-analyzer-core.NullDereference] kernel test robot
2021-08-28 19:52 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202108171406.OCWBWrk0-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.