All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 1/2] mm: disable LRU pagevec during the migration temporarily
Date: Wed, 03 Mar 2021 23:11:48 +0800	[thread overview]
Message-ID: <202103032333.bv4y27Ol-lkp@intel.com> (raw)
In-Reply-To: <20210302210949.2440120-1-minchan@kernel.org>

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

Hi Minchan,

I love your patch! Yet something to improve:

[auto build test ERROR on block/for-next]
[also build test ERROR on linux/master linus/master v5.12-rc1 next-20210303]
[cannot apply to hnaz-linux-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Minchan-Kim/mm-disable-LRU-pagevec-during-the-migration-temporarily/20210303-191809
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
config: nios2-randconfig-r032-20210303 (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://github.com/0day-ci/linux/commit/6e669beb75caae92c613a012734b1a2dc9485524
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Minchan-Kim/mm-disable-LRU-pagevec-during-the-migration-temporarily/20210303-191809
        git checkout 6e669beb75caae92c613a012734b1a2dc9485524
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2 

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

All errors (new ones prefixed by >>):

   mm/swap.c:59:6: warning: no previous prototype for 'lru_cache_disabled' [-Wmissing-prototypes]
      59 | bool lru_cache_disabled(void)
         |      ^~~~~~~~~~~~~~~~~~
>> mm/swap.c:871:6: error: conflicting types for 'lru_add_drain_all'
     871 | void lru_add_drain_all(void)
         |      ^~~~~~~~~~~~~~~~~
   In file included from mm/swap.c:20:
   include/linux/swap.h:347:13: note: previous declaration of 'lru_add_drain_all' was here
     347 | extern void lru_add_drain_all(bool force_all_cpus);
         |             ^~~~~~~~~~~~~~~~~

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for SERIAL_CORE_CONSOLE
   Depends on TTY && HAS_IOMEM
   Selected by
   - EARLY_PRINTK


vim +/lru_add_drain_all +871 mm/swap.c

053837fce7aa79 Nick Piggin           2006-01-18  768  
9852a7212324fd Michal Hocko          2018-01-31  769  /*
9852a7212324fd Michal Hocko          2018-01-31  770   * Doesn't need any cpu hotplug locking because we do rely on per-cpu
9852a7212324fd Michal Hocko          2018-01-31  771   * kworkers being shut down before our page_alloc_cpu_dead callback is
9852a7212324fd Michal Hocko          2018-01-31  772   * executed on the offlined cpu.
9852a7212324fd Michal Hocko          2018-01-31  773   * Calling this function with cpu hotplug locks held can actually lead
9852a7212324fd Michal Hocko          2018-01-31  774   * to obscure indirect dependencies via WQ context.
9852a7212324fd Michal Hocko          2018-01-31  775   */
6e669beb75caae Minchan Kim           2021-03-02  776  void lru_add_drain_all(bool force_all_cpus)
053837fce7aa79 Nick Piggin           2006-01-18  777  {
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  778  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  779  	 * lru_drain_gen - Global pages generation number
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  780  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  781  	 * (A) Definition: global lru_drain_gen = x implies that all generations
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  782  	 *     0 < n <= x are already *scheduled* for draining.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  783  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  784  	 * This is an optimization for the highly-contended use case where a
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  785  	 * user space workload keeps constantly generating a flow of pages for
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  786  	 * each CPU.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  787  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  788  	static unsigned int lru_drain_gen;
5fbc461636c32e Chris Metcalf         2013-09-12  789  	static struct cpumask has_work;
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  790  	static DEFINE_MUTEX(lock);
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  791  	unsigned cpu, this_gen;
5fbc461636c32e Chris Metcalf         2013-09-12  792  
ce612879ddc78e Michal Hocko          2017-04-07  793  	/*
ce612879ddc78e Michal Hocko          2017-04-07  794  	 * Make sure nobody triggers this path before mm_percpu_wq is fully
ce612879ddc78e Michal Hocko          2017-04-07  795  	 * initialized.
ce612879ddc78e Michal Hocko          2017-04-07  796  	 */
ce612879ddc78e Michal Hocko          2017-04-07  797  	if (WARN_ON(!mm_percpu_wq))
ce612879ddc78e Michal Hocko          2017-04-07  798  		return;
ce612879ddc78e Michal Hocko          2017-04-07  799  
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  800  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  801  	 * Guarantee pagevec counter stores visible by this CPU are visible to
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  802  	 * other CPUs before loading the current drain generation.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  803  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  804  	smp_mb();
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  805  
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  806  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  807  	 * (B) Locally cache global LRU draining generation number
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  808  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  809  	 * The read barrier ensures that the counter is loaded before the mutex
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  810  	 * is taken. It pairs with smp_mb() inside the mutex critical section
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  811  	 * at (D).
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  812  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  813  	this_gen = smp_load_acquire(&lru_drain_gen);
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  814  
5fbc461636c32e Chris Metcalf         2013-09-12  815  	mutex_lock(&lock);
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  816  
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  817  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  818  	 * (C) Exit the draining operation if a newer generation, from another
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  819  	 * lru_add_drain_all(), was already scheduled for draining. Check (A).
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  820  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  821  	if (unlikely(this_gen != lru_drain_gen))
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  822  		goto done;
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  823  
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  824  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  825  	 * (D) Increment global generation number
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  826  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  827  	 * Pairs with smp_load_acquire() at (B), outside of the critical
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  828  	 * section. Use a full memory barrier to guarantee that the new global
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  829  	 * drain generation number is stored before loading pagevec counters.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  830  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  831  	 * This pairing must be done here, before the for_each_online_cpu loop
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  832  	 * below which drains the page vectors.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  833  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  834  	 * Let x, y, and z represent some system CPU numbers, where x < y < z.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  835  	 * Assume CPU #z is is in the middle of the for_each_online_cpu loop
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  836  	 * below and has already reached CPU #y's per-cpu data. CPU #x comes
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  837  	 * along, adds some pages to its per-cpu vectors, then calls
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  838  	 * lru_add_drain_all().
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  839  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  840  	 * If the paired barrier is done at any later step, e.g. after the
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  841  	 * loop, CPU #x will just exit@(C) and miss flushing out all of its
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  842  	 * added pages.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  843  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  844  	WRITE_ONCE(lru_drain_gen, lru_drain_gen + 1);
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  845  	smp_mb();
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  846  
5fbc461636c32e Chris Metcalf         2013-09-12  847  	cpumask_clear(&has_work);
5fbc461636c32e Chris Metcalf         2013-09-12  848  	for_each_online_cpu(cpu) {
5fbc461636c32e Chris Metcalf         2013-09-12  849  		struct work_struct *work = &per_cpu(lru_add_drain_work, cpu);
5fbc461636c32e Chris Metcalf         2013-09-12  850  
6e669beb75caae Minchan Kim           2021-03-02  851  		if (force_all_cpus ||
6e669beb75caae Minchan Kim           2021-03-02  852  		    pagevec_count(&per_cpu(lru_pvecs.lru_add, cpu)) ||
7e0cc01ea181c6 Qian Cai              2020-08-14  853  		    data_race(pagevec_count(&per_cpu(lru_rotate.pvec, cpu))) ||
b01b2141999936 Ingo Molnar           2020-05-27  854  		    pagevec_count(&per_cpu(lru_pvecs.lru_deactivate_file, cpu)) ||
b01b2141999936 Ingo Molnar           2020-05-27  855  		    pagevec_count(&per_cpu(lru_pvecs.lru_deactivate, cpu)) ||
b01b2141999936 Ingo Molnar           2020-05-27  856  		    pagevec_count(&per_cpu(lru_pvecs.lru_lazyfree, cpu)) ||
5fbc461636c32e Chris Metcalf         2013-09-12  857  		    need_activate_page_drain(cpu)) {
5fbc461636c32e Chris Metcalf         2013-09-12  858  			INIT_WORK(work, lru_add_drain_per_cpu);
ce612879ddc78e Michal Hocko          2017-04-07  859  			queue_work_on(cpu, mm_percpu_wq, work);
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  860  			__cpumask_set_cpu(cpu, &has_work);
5fbc461636c32e Chris Metcalf         2013-09-12  861  		}
5fbc461636c32e Chris Metcalf         2013-09-12  862  	}
5fbc461636c32e Chris Metcalf         2013-09-12  863  
5fbc461636c32e Chris Metcalf         2013-09-12  864  	for_each_cpu(cpu, &has_work)
5fbc461636c32e Chris Metcalf         2013-09-12  865  		flush_work(&per_cpu(lru_add_drain_work, cpu));
5fbc461636c32e Chris Metcalf         2013-09-12  866  
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  867  done:
5fbc461636c32e Chris Metcalf         2013-09-12  868  	mutex_unlock(&lock);
053837fce7aa79 Nick Piggin           2006-01-18  869  }
6ea183d60c4695 Michal Hocko          2019-02-20  870  #else
6ea183d60c4695 Michal Hocko          2019-02-20 @871  void lru_add_drain_all(void)
6ea183d60c4695 Michal Hocko          2019-02-20  872  {
6ea183d60c4695 Michal Hocko          2019-02-20  873  	lru_add_drain();
6ea183d60c4695 Michal Hocko          2019-02-20  874  }
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  875  #endif /* CONFIG_SMP */
053837fce7aa79 Nick Piggin           2006-01-18  876  

---
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: 24755 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Minchan Kim <minchan@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: kbuild-all@lists.01.org,
	Linux Memory Management List <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	joaodias@google.com, surenb@google.com, cgoldswo@codeaurora.org,
	willy@infradead.org, mhocko@suse.com, david@redhat.com,
	vbabka@suse.cz
Subject: Re: [PATCH 1/2] mm: disable LRU pagevec during the migration temporarily
Date: Wed, 3 Mar 2021 23:11:48 +0800	[thread overview]
Message-ID: <202103032333.bv4y27Ol-lkp@intel.com> (raw)
In-Reply-To: <20210302210949.2440120-1-minchan@kernel.org>

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

Hi Minchan,

I love your patch! Yet something to improve:

[auto build test ERROR on block/for-next]
[also build test ERROR on linux/master linus/master v5.12-rc1 next-20210303]
[cannot apply to hnaz-linux-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Minchan-Kim/mm-disable-LRU-pagevec-during-the-migration-temporarily/20210303-191809
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
config: nios2-randconfig-r032-20210303 (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://github.com/0day-ci/linux/commit/6e669beb75caae92c613a012734b1a2dc9485524
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Minchan-Kim/mm-disable-LRU-pagevec-during-the-migration-temporarily/20210303-191809
        git checkout 6e669beb75caae92c613a012734b1a2dc9485524
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2 

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

All errors (new ones prefixed by >>):

   mm/swap.c:59:6: warning: no previous prototype for 'lru_cache_disabled' [-Wmissing-prototypes]
      59 | bool lru_cache_disabled(void)
         |      ^~~~~~~~~~~~~~~~~~
>> mm/swap.c:871:6: error: conflicting types for 'lru_add_drain_all'
     871 | void lru_add_drain_all(void)
         |      ^~~~~~~~~~~~~~~~~
   In file included from mm/swap.c:20:
   include/linux/swap.h:347:13: note: previous declaration of 'lru_add_drain_all' was here
     347 | extern void lru_add_drain_all(bool force_all_cpus);
         |             ^~~~~~~~~~~~~~~~~

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for SERIAL_CORE_CONSOLE
   Depends on TTY && HAS_IOMEM
   Selected by
   - EARLY_PRINTK


vim +/lru_add_drain_all +871 mm/swap.c

053837fce7aa79 Nick Piggin           2006-01-18  768  
9852a7212324fd Michal Hocko          2018-01-31  769  /*
9852a7212324fd Michal Hocko          2018-01-31  770   * Doesn't need any cpu hotplug locking because we do rely on per-cpu
9852a7212324fd Michal Hocko          2018-01-31  771   * kworkers being shut down before our page_alloc_cpu_dead callback is
9852a7212324fd Michal Hocko          2018-01-31  772   * executed on the offlined cpu.
9852a7212324fd Michal Hocko          2018-01-31  773   * Calling this function with cpu hotplug locks held can actually lead
9852a7212324fd Michal Hocko          2018-01-31  774   * to obscure indirect dependencies via WQ context.
9852a7212324fd Michal Hocko          2018-01-31  775   */
6e669beb75caae Minchan Kim           2021-03-02  776  void lru_add_drain_all(bool force_all_cpus)
053837fce7aa79 Nick Piggin           2006-01-18  777  {
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  778  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  779  	 * lru_drain_gen - Global pages generation number
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  780  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  781  	 * (A) Definition: global lru_drain_gen = x implies that all generations
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  782  	 *     0 < n <= x are already *scheduled* for draining.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  783  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  784  	 * This is an optimization for the highly-contended use case where a
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  785  	 * user space workload keeps constantly generating a flow of pages for
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  786  	 * each CPU.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  787  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  788  	static unsigned int lru_drain_gen;
5fbc461636c32e Chris Metcalf         2013-09-12  789  	static struct cpumask has_work;
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  790  	static DEFINE_MUTEX(lock);
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  791  	unsigned cpu, this_gen;
5fbc461636c32e Chris Metcalf         2013-09-12  792  
ce612879ddc78e Michal Hocko          2017-04-07  793  	/*
ce612879ddc78e Michal Hocko          2017-04-07  794  	 * Make sure nobody triggers this path before mm_percpu_wq is fully
ce612879ddc78e Michal Hocko          2017-04-07  795  	 * initialized.
ce612879ddc78e Michal Hocko          2017-04-07  796  	 */
ce612879ddc78e Michal Hocko          2017-04-07  797  	if (WARN_ON(!mm_percpu_wq))
ce612879ddc78e Michal Hocko          2017-04-07  798  		return;
ce612879ddc78e Michal Hocko          2017-04-07  799  
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  800  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  801  	 * Guarantee pagevec counter stores visible by this CPU are visible to
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  802  	 * other CPUs before loading the current drain generation.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  803  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  804  	smp_mb();
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  805  
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  806  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  807  	 * (B) Locally cache global LRU draining generation number
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  808  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  809  	 * The read barrier ensures that the counter is loaded before the mutex
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  810  	 * is taken. It pairs with smp_mb() inside the mutex critical section
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  811  	 * at (D).
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  812  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  813  	this_gen = smp_load_acquire(&lru_drain_gen);
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  814  
5fbc461636c32e Chris Metcalf         2013-09-12  815  	mutex_lock(&lock);
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  816  
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  817  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  818  	 * (C) Exit the draining operation if a newer generation, from another
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  819  	 * lru_add_drain_all(), was already scheduled for draining. Check (A).
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  820  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  821  	if (unlikely(this_gen != lru_drain_gen))
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  822  		goto done;
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  823  
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  824  	/*
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  825  	 * (D) Increment global generation number
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  826  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  827  	 * Pairs with smp_load_acquire() at (B), outside of the critical
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  828  	 * section. Use a full memory barrier to guarantee that the new global
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  829  	 * drain generation number is stored before loading pagevec counters.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  830  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  831  	 * This pairing must be done here, before the for_each_online_cpu loop
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  832  	 * below which drains the page vectors.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  833  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  834  	 * Let x, y, and z represent some system CPU numbers, where x < y < z.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  835  	 * Assume CPU #z is is in the middle of the for_each_online_cpu loop
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  836  	 * below and has already reached CPU #y's per-cpu data. CPU #x comes
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  837  	 * along, adds some pages to its per-cpu vectors, then calls
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  838  	 * lru_add_drain_all().
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  839  	 *
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  840  	 * If the paired barrier is done at any later step, e.g. after the
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  841  	 * loop, CPU #x will just exit at (C) and miss flushing out all of its
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  842  	 * added pages.
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  843  	 */
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  844  	WRITE_ONCE(lru_drain_gen, lru_drain_gen + 1);
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  845  	smp_mb();
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  846  
5fbc461636c32e Chris Metcalf         2013-09-12  847  	cpumask_clear(&has_work);
5fbc461636c32e Chris Metcalf         2013-09-12  848  	for_each_online_cpu(cpu) {
5fbc461636c32e Chris Metcalf         2013-09-12  849  		struct work_struct *work = &per_cpu(lru_add_drain_work, cpu);
5fbc461636c32e Chris Metcalf         2013-09-12  850  
6e669beb75caae Minchan Kim           2021-03-02  851  		if (force_all_cpus ||
6e669beb75caae Minchan Kim           2021-03-02  852  		    pagevec_count(&per_cpu(lru_pvecs.lru_add, cpu)) ||
7e0cc01ea181c6 Qian Cai              2020-08-14  853  		    data_race(pagevec_count(&per_cpu(lru_rotate.pvec, cpu))) ||
b01b2141999936 Ingo Molnar           2020-05-27  854  		    pagevec_count(&per_cpu(lru_pvecs.lru_deactivate_file, cpu)) ||
b01b2141999936 Ingo Molnar           2020-05-27  855  		    pagevec_count(&per_cpu(lru_pvecs.lru_deactivate, cpu)) ||
b01b2141999936 Ingo Molnar           2020-05-27  856  		    pagevec_count(&per_cpu(lru_pvecs.lru_lazyfree, cpu)) ||
5fbc461636c32e Chris Metcalf         2013-09-12  857  		    need_activate_page_drain(cpu)) {
5fbc461636c32e Chris Metcalf         2013-09-12  858  			INIT_WORK(work, lru_add_drain_per_cpu);
ce612879ddc78e Michal Hocko          2017-04-07  859  			queue_work_on(cpu, mm_percpu_wq, work);
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  860  			__cpumask_set_cpu(cpu, &has_work);
5fbc461636c32e Chris Metcalf         2013-09-12  861  		}
5fbc461636c32e Chris Metcalf         2013-09-12  862  	}
5fbc461636c32e Chris Metcalf         2013-09-12  863  
5fbc461636c32e Chris Metcalf         2013-09-12  864  	for_each_cpu(cpu, &has_work)
5fbc461636c32e Chris Metcalf         2013-09-12  865  		flush_work(&per_cpu(lru_add_drain_work, cpu));
5fbc461636c32e Chris Metcalf         2013-09-12  866  
eef1a429f234f8 Konstantin Khlebnikov 2019-11-30  867  done:
5fbc461636c32e Chris Metcalf         2013-09-12  868  	mutex_unlock(&lock);
053837fce7aa79 Nick Piggin           2006-01-18  869  }
6ea183d60c4695 Michal Hocko          2019-02-20  870  #else
6ea183d60c4695 Michal Hocko          2019-02-20 @871  void lru_add_drain_all(void)
6ea183d60c4695 Michal Hocko          2019-02-20  872  {
6ea183d60c4695 Michal Hocko          2019-02-20  873  	lru_add_drain();
6ea183d60c4695 Michal Hocko          2019-02-20  874  }
6446a5131e24a8 Ahmed S. Darwish      2020-08-27  875  #endif /* CONFIG_SMP */
053837fce7aa79 Nick Piggin           2006-01-18  876  

---
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: 24755 bytes --]

  parent reply	other threads:[~2021-03-03 15:11 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-02 21:09 [PATCH 1/2] mm: disable LRU pagevec during the migration temporarily Minchan Kim
2021-03-02 21:09 ` [PATCH 2/2] mm: fs: Invalidate BH LRU during page migration Minchan Kim
2021-03-03 13:38   ` kernel test robot
2021-03-03 13:38     ` kernel test robot
2021-03-03 15:55   ` kernel test robot
2021-03-03 15:55     ` kernel test robot
2021-03-03 12:49 ` [PATCH 1/2] mm: disable LRU pagevec during the migration temporarily Michal Hocko
2021-03-03 20:23   ` Minchan Kim
2021-03-04  8:07     ` David Hildenbrand
2021-03-04 15:55       ` Minchan Kim
2021-03-05 16:06     ` Michal Hocko
2021-03-05 20:26       ` Minchan Kim
2021-03-03 13:38 ` kernel test robot
2021-03-03 13:38   ` kernel test robot
2021-03-03 15:11 ` kernel test robot [this message]
2021-03-03 15:11   ` kernel test robot
2021-03-03 18:12 ` kernel test robot
2021-03-03 18:12   ` 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=202103032333.bv4y27Ol-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@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.