lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 17 May 2016 13:31:59 +0800
From:	kbuild test robot <lkp@...el.com>
To:	Christoph Lameter <cl@...ux.com>
Cc:	kbuild-all@...org, Arnd Bergmann <arnd@...db.de>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Hugh Dickins <hughd@...gle.com>,
	Vlastimil Babka <vbabka@...e.cz>,
	Michal Hocko <mhocko@...e.com>,
	Mel Gorman <mgorman@...hsingularity.net>,
	Joonsoo Kim <iamjoonsoo.kim@....com>, linux-mm@...ck.org,
	linux-kernel@...r.kernel.org
Subject: Re: Do not build vmstat_refresh if there is no procfs support

Hi,

[auto build test ERROR on next-20160511]
[cannot apply to v4.6-rc7 v4.6-rc6 v4.6-rc5 v4.6]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Christoph-Lameter/Do-not-build-vmstat_refresh-if-there-is-no-procfs-support/20160511-233405
config: arm64-allnoconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 5.3.1-8) 5.3.1 20160205
reproduce:
        wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=arm64 

All error/warnings (new ones prefixed by >>):

   mm/vmstat.c: In function 'vmstat_update':
>> mm/vmstat.c:1436:45: error: 'vmstat_wq' undeclared (first use in this function)
      queue_delayed_work_on(smp_processor_id(), vmstat_wq,
                                                ^
   mm/vmstat.c:1436:45: note: each undeclared identifier is reported only once for each function it appears in
   In file included from include/asm-generic/percpu.h:6:0,
                    from arch/arm64/include/asm/percpu.h:276,
                    from include/linux/percpu.h:12,
                    from include/linux/percpu-rwsem.h:6,
                    from include/linux/fs.h:30,
                    from mm/vmstat.c:12:
>> mm/vmstat.c:1437:19: error: 'vmstat_work' undeclared (first use in this function)
        this_cpu_ptr(&vmstat_work),
                      ^
   include/linux/percpu-defs.h:206:47: note: in definition of macro '__verify_pcpu_ptr'
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                  ^
   include/linux/percpu-defs.h:239:27: note: in expansion of macro 'raw_cpu_ptr'
    #define this_cpu_ptr(ptr) raw_cpu_ptr(ptr)
                              ^
>> mm/vmstat.c:1437:5: note: in expansion of macro 'this_cpu_ptr'
        this_cpu_ptr(&vmstat_work),
        ^
   In file included from include/linux/fs.h:32:0,
                    from mm/vmstat.c:12:
   mm/vmstat.c: In function 'quiet_vmstat':
   mm/vmstat.c:1480:42: error: 'vmstat_work' undeclared (first use in this function)
     if (!delayed_work_pending(this_cpu_ptr(&vmstat_work)))
                                             ^
   include/linux/workqueue.h:26:51: note: in definition of macro 'work_data_bits'
    #define work_data_bits(work) ((unsigned long *)(&(work)->data))
                                                      ^
   include/linux/workqueue.h:271:2: note: in expansion of macro 'work_pending'
     work_pending(&(w)->work)
     ^
>> mm/vmstat.c:1480:7: note: in expansion of macro 'delayed_work_pending'
     if (!delayed_work_pending(this_cpu_ptr(&vmstat_work)))
          ^
   include/linux/percpu-defs.h:228:2: note: in expansion of macro '__verify_pcpu_ptr'
     __verify_pcpu_ptr(ptr);      \
     ^
   include/linux/percpu-defs.h:239:27: note: in expansion of macro 'raw_cpu_ptr'
    #define this_cpu_ptr(ptr) raw_cpu_ptr(ptr)
                              ^
   mm/vmstat.c:1480:28: note: in expansion of macro 'this_cpu_ptr'
     if (!delayed_work_pending(this_cpu_ptr(&vmstat_work)))
                               ^
   In file included from include/asm-generic/percpu.h:6:0,
                    from arch/arm64/include/asm/percpu.h:276,
                    from include/linux/percpu.h:12,
                    from include/linux/percpu-rwsem.h:6,
                    from include/linux/fs.h:30,
                    from mm/vmstat.c:12:
   mm/vmstat.c: In function 'vmstat_shepherd':
   mm/vmstat.c:1512:38: error: 'vmstat_work' undeclared (first use in this function)
      struct delayed_work *dw = &per_cpu(vmstat_work, cpu);
                                         ^
   include/linux/percpu-defs.h:206:47: note: in definition of macro '__verify_pcpu_ptr'
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                  ^
   include/linux/percpu-defs.h:256:29: note: in expansion of macro 'per_cpu_ptr'
    #define per_cpu(var, cpu) (*per_cpu_ptr(&(var), cpu))
                                ^
>> mm/vmstat.c:1512:30: note: in expansion of macro 'per_cpu'
      struct delayed_work *dw = &per_cpu(vmstat_work, cpu);
                                 ^
   mm/vmstat.c:1515:32: error: 'vmstat_wq' undeclared (first use in this function)
        queue_delayed_work_on(cpu, vmstat_wq, dw, 0);
                                   ^
   In file included from include/linux/fs.h:32:0,
                    from mm/vmstat.c:12:
   mm/vmstat.c: In function 'start_shepherd_timer':
   mm/vmstat.c:1528:37: error: 'vmstat_work' undeclared (first use in this function)
      INIT_DEFERRABLE_WORK(per_cpu_ptr(&vmstat_work, cpu),
                                        ^
   include/linux/workqueue.h:216:16: note: in definition of macro '__INIT_WORK'
      __init_work((_work), _onstack);    \
                   ^
   include/linux/workqueue.h:231:3: note: in expansion of macro 'INIT_WORK'
      INIT_WORK(&(_work)->work, (_func));   \
      ^
   include/linux/workqueue.h:253:2: note: in expansion of macro '__INIT_DELAYED_WORK'
     __INIT_DELAYED_WORK(_work, _func, TIMER_DEFERRABLE)
     ^
>> mm/vmstat.c:1528:3: note: in expansion of macro 'INIT_DEFERRABLE_WORK'
      INIT_DEFERRABLE_WORK(per_cpu_ptr(&vmstat_work, cpu),
      ^
   include/linux/percpu-defs.h:222:2: note: in expansion of macro '__verify_pcpu_ptr'
     __verify_pcpu_ptr(ptr);      \
     ^
>> mm/vmstat.c:1528:24: note: in expansion of macro 'per_cpu_ptr'
      INIT_DEFERRABLE_WORK(per_cpu_ptr(&vmstat_work, cpu),
                           ^
   mm/vmstat.c:1531:2: error: 'vmstat_wq' undeclared (first use in this function)
     vmstat_wq = alloc_workqueue("vmstat", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);
     ^
   In file included from include/asm-generic/percpu.h:6:0,
                    from arch/arm64/include/asm/percpu.h:276,
                    from include/linux/percpu.h:12,
                    from include/linux/percpu-rwsem.h:6,
                    from include/linux/fs.h:30,
                    from mm/vmstat.c:12:
   mm/vmstat.c: In function 'vmstat_cpuup_callback':
   mm/vmstat.c:1568:37: error: 'vmstat_work' undeclared (first use in this function)
      cancel_delayed_work_sync(&per_cpu(vmstat_work, cpu));
                                        ^
   include/linux/percpu-defs.h:206:47: note: in definition of macro '__verify_pcpu_ptr'
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                  ^
   include/linux/percpu-defs.h:256:29: note: in expansion of macro 'per_cpu_ptr'
    #define per_cpu(var, cpu) (*per_cpu_ptr(&(var), cpu))
                                ^
   mm/vmstat.c:1568:29: note: in expansion of macro 'per_cpu'
      cancel_delayed_work_sync(&per_cpu(vmstat_work, cpu));
                                ^

vim +/vmstat_wq +1436 mm/vmstat.c

0eb77e988 Christoph Lameter 2016-01-14  1430  	if (refresh_cpu_vm_stats(true)) {
7cc36bbdd Christoph Lameter 2014-10-09  1431  		/*
7cc36bbdd Christoph Lameter 2014-10-09  1432  		 * Counters were updated so we expect more updates
7cc36bbdd Christoph Lameter 2014-10-09  1433  		 * to occur in the future. Keep on running the
7cc36bbdd Christoph Lameter 2014-10-09  1434  		 * update worker thread.
7cc36bbdd Christoph Lameter 2014-10-09  1435  		 */
373ccbe59 Michal Hocko      2015-12-11 @1436  		queue_delayed_work_on(smp_processor_id(), vmstat_wq,
176bed1de Linus Torvalds    2015-10-15 @1437  				this_cpu_ptr(&vmstat_work),
98f4ebb29 Anton Blanchard   2009-04-02  1438  				round_jiffies_relative(sysctl_stat_interval));
f01f17d37 Michal Hocko      2016-02-05  1439  	}
7cc36bbdd Christoph Lameter 2014-10-09  1440  }
7cc36bbdd Christoph Lameter 2014-10-09  1441  
7cc36bbdd Christoph Lameter 2014-10-09  1442  /*
0eb77e988 Christoph Lameter 2016-01-14  1443   * Switch off vmstat processing and then fold all the remaining differentials
0eb77e988 Christoph Lameter 2016-01-14  1444   * until the diffs stay at zero. The function is used by NOHZ and can only be
0eb77e988 Christoph Lameter 2016-01-14  1445   * invoked when tick processing is not active.
0eb77e988 Christoph Lameter 2016-01-14  1446   */
0eb77e988 Christoph Lameter 2016-01-14  1447  /*
7cc36bbdd Christoph Lameter 2014-10-09  1448   * Check if the diffs for a certain cpu indicate that
7cc36bbdd Christoph Lameter 2014-10-09  1449   * an update is needed.
7cc36bbdd Christoph Lameter 2014-10-09  1450   */
7cc36bbdd Christoph Lameter 2014-10-09  1451  static bool need_update(int cpu)
7cc36bbdd Christoph Lameter 2014-10-09  1452  {
7cc36bbdd Christoph Lameter 2014-10-09  1453  	struct zone *zone;
7cc36bbdd Christoph Lameter 2014-10-09  1454  
7cc36bbdd Christoph Lameter 2014-10-09  1455  	for_each_populated_zone(zone) {
7cc36bbdd Christoph Lameter 2014-10-09  1456  		struct per_cpu_pageset *p = per_cpu_ptr(zone->pageset, cpu);
7cc36bbdd Christoph Lameter 2014-10-09  1457  
7cc36bbdd Christoph Lameter 2014-10-09  1458  		BUILD_BUG_ON(sizeof(p->vm_stat_diff[0]) != 1);
7cc36bbdd Christoph Lameter 2014-10-09  1459  		/*
7cc36bbdd Christoph Lameter 2014-10-09  1460  		 * The fast way of checking if there are any vmstat diffs.
7cc36bbdd Christoph Lameter 2014-10-09  1461  		 * This works because the diffs are byte sized items.
7cc36bbdd Christoph Lameter 2014-10-09  1462  		 */
7cc36bbdd Christoph Lameter 2014-10-09  1463  		if (memchr_inv(p->vm_stat_diff, 0, NR_VM_ZONE_STAT_ITEMS))
7cc36bbdd Christoph Lameter 2014-10-09  1464  			return true;
7cc36bbdd Christoph Lameter 2014-10-09  1465  
7cc36bbdd Christoph Lameter 2014-10-09  1466  	}
7cc36bbdd Christoph Lameter 2014-10-09  1467  	return false;
7cc36bbdd Christoph Lameter 2014-10-09  1468  }
7cc36bbdd Christoph Lameter 2014-10-09  1469  
043daba0d Christoph Lameter 2016-05-11  1470  /*
043daba0d Christoph Lameter 2016-05-11  1471   * Switch off vmstat processing and then fold all the remaining differentials
043daba0d Christoph Lameter 2016-05-11  1472   * until the diffs stay at zero. The function is used by NOHZ and can only be
043daba0d Christoph Lameter 2016-05-11  1473   * invoked when tick processing is not active.
043daba0d Christoph Lameter 2016-05-11  1474   */
f01f17d37 Michal Hocko      2016-02-05  1475  void quiet_vmstat(void)
f01f17d37 Michal Hocko      2016-02-05  1476  {
f01f17d37 Michal Hocko      2016-02-05  1477  	if (system_state != SYSTEM_RUNNING)
f01f17d37 Michal Hocko      2016-02-05  1478  		return;
f01f17d37 Michal Hocko      2016-02-05  1479  
043daba0d Christoph Lameter 2016-05-11 @1480  	if (!delayed_work_pending(this_cpu_ptr(&vmstat_work)))
f01f17d37 Michal Hocko      2016-02-05  1481  		return;
f01f17d37 Michal Hocko      2016-02-05  1482  
f01f17d37 Michal Hocko      2016-02-05  1483  	if (!need_update(smp_processor_id()))
f01f17d37 Michal Hocko      2016-02-05  1484  		return;
f01f17d37 Michal Hocko      2016-02-05  1485  
f01f17d37 Michal Hocko      2016-02-05  1486  	/*
f01f17d37 Michal Hocko      2016-02-05  1487  	 * Just refresh counters and do not care about the pending delayed
f01f17d37 Michal Hocko      2016-02-05  1488  	 * vmstat_update. It doesn't fire that often to matter and canceling
f01f17d37 Michal Hocko      2016-02-05  1489  	 * it would be too expensive from this path.
f01f17d37 Michal Hocko      2016-02-05  1490  	 * vmstat_shepherd will take care about that for us.
f01f17d37 Michal Hocko      2016-02-05  1491  	 */
f01f17d37 Michal Hocko      2016-02-05  1492  	refresh_cpu_vm_stats(false);
f01f17d37 Michal Hocko      2016-02-05  1493  }
f01f17d37 Michal Hocko      2016-02-05  1494  
7cc36bbdd Christoph Lameter 2014-10-09  1495  /*
7cc36bbdd Christoph Lameter 2014-10-09  1496   * Shepherd worker thread that checks the
7cc36bbdd Christoph Lameter 2014-10-09  1497   * differentials of processors that have their worker
7cc36bbdd Christoph Lameter 2014-10-09  1498   * threads for vm statistics updates disabled because of
7cc36bbdd Christoph Lameter 2014-10-09  1499   * inactivity.
7cc36bbdd Christoph Lameter 2014-10-09  1500   */
7cc36bbdd Christoph Lameter 2014-10-09  1501  static void vmstat_shepherd(struct work_struct *w);
7cc36bbdd Christoph Lameter 2014-10-09  1502  
0eb77e988 Christoph Lameter 2016-01-14  1503  static DECLARE_DEFERRABLE_WORK(shepherd, vmstat_shepherd);
7cc36bbdd Christoph Lameter 2014-10-09  1504  
7cc36bbdd Christoph Lameter 2014-10-09  1505  static void vmstat_shepherd(struct work_struct *w)
7cc36bbdd Christoph Lameter 2014-10-09  1506  {
7cc36bbdd Christoph Lameter 2014-10-09  1507  	int cpu;
7cc36bbdd Christoph Lameter 2014-10-09  1508  
7cc36bbdd Christoph Lameter 2014-10-09  1509  	get_online_cpus();
7cc36bbdd Christoph Lameter 2014-10-09  1510  	/* Check processors whose vmstat worker threads have been disabled */
043daba0d Christoph Lameter 2016-05-11  1511  	for_each_online_cpu(cpu) {
f01f17d37 Michal Hocko      2016-02-05 @1512  		struct delayed_work *dw = &per_cpu(vmstat_work, cpu);
7cc36bbdd Christoph Lameter 2014-10-09  1513  
043daba0d Christoph Lameter 2016-05-11  1514  		if (!delayed_work_pending(dw) && need_update(cpu))
f01f17d37 Michal Hocko      2016-02-05  1515  				queue_delayed_work_on(cpu, vmstat_wq, dw, 0);
f01f17d37 Michal Hocko      2016-02-05  1516  	}
7cc36bbdd Christoph Lameter 2014-10-09  1517  	put_online_cpus();
7cc36bbdd Christoph Lameter 2014-10-09  1518  
7cc36bbdd Christoph Lameter 2014-10-09  1519  	schedule_delayed_work(&shepherd,
7cc36bbdd Christoph Lameter 2014-10-09  1520  		round_jiffies_relative(sysctl_stat_interval));
d1187ed21 Christoph Lameter 2007-05-09  1521  }
d1187ed21 Christoph Lameter 2007-05-09  1522  
7cc36bbdd Christoph Lameter 2014-10-09  1523  static void __init start_shepherd_timer(void)
d1187ed21 Christoph Lameter 2007-05-09  1524  {
7cc36bbdd Christoph Lameter 2014-10-09  1525  	int cpu;
7cc36bbdd Christoph Lameter 2014-10-09  1526  
7cc36bbdd Christoph Lameter 2014-10-09  1527  	for_each_possible_cpu(cpu)
ccde8bd40 Michal Hocko      2016-02-05 @1528  		INIT_DEFERRABLE_WORK(per_cpu_ptr(&vmstat_work, cpu),
7cc36bbdd Christoph Lameter 2014-10-09  1529  			vmstat_update);
7cc36bbdd Christoph Lameter 2014-10-09  1530  
751e5f5c7 Michal Hocko      2016-01-08  1531  	vmstat_wq = alloc_workqueue("vmstat", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0);

:::::: The code at line 1436 was first introduced by commit
:::::: 373ccbe5927034b55bdc80b0f8b54d6e13fe8d12 mm, vmstat: allow WQ concurrency to discover memory reclaim doesn't make any progress

:::::: TO: Michal Hocko <mhocko@...e.com>
:::::: CC: Linus Torvalds <torvalds@...ux-foundation.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/octet-stream" (6049 bytes)

Powered by blists - more mailing lists