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>] [day] [month] [year] [list]
Message-ID: <202107041200.6rddW8Mw-lkp@intel.com>
Date:   Sun, 4 Jul 2021 12:04:07 +0800
From:   kernel test robot <lkp@...el.com>
To:     Muchun Song <songmuchun@...edance.com>
Cc:     clang-built-linux@...glegroups.com, kbuild-all@...ts.01.org,
        linux-kernel@...r.kernel.org, Shakeel Butt <shakeelb@...gle.com>,
        Miaohe Lin <linmiaohe@...wei.com>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Linux Memory Management List <linux-mm@...ck.org>
Subject: mm/compaction.c:799:1: warning: stack frame size (2080) exceeds
 limit (2048) in function 'isolate_migratepages_block'

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   303392fd5c160822bf778270b28ec5ea50cab2b4
commit: b4e0b68fbd9d1fd7e31cbe8adca3ad6cf556e2ee mm: memcontrol: use obj_cgroup APIs to charge kmem pages
date:   9 weeks ago
config: powerpc64-randconfig-r031-20210704 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project cb5de7c813f976dd458bd2a7f40702ba648bf650)
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 powerpc64 cross compiling tool for clang build
        # apt-get install binutils-powerpc64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b4e0b68fbd9d1fd7e31cbe8adca3ad6cf556e2ee
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout b4e0b68fbd9d1fd7e31cbe8adca3ad6cf556e2ee
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64 

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

All warnings (new ones prefixed by >>):

   In file included from mm/compaction.c:11:
   In file included from include/linux/cpu.h:17:
   In file included from include/linux/node.h:18:
   In file included from include/linux/device.h:15:
   In file included from include/linux/dev_printk.h:16:
   In file included from include/linux/ratelimit.h:6:
   In file included from include/linux/sched.h:12:
   In file included from arch/powerpc/include/asm/current.h:13:
   In file included from arch/powerpc/include/asm/paca.h:17:
   In file included from arch/powerpc/include/asm/lppaca.h:46:
   In file included from arch/powerpc/include/asm/mmu.h:147:
   In file included from include/linux/bug.h:5:
   In file included from arch/powerpc/include/asm/bug.h:109:
   In file included from include/asm-generic/bug.h:20:
   In file included from include/linux/kernel.h:11:
   In file included from include/linux/bitops.h:32:
   In file included from arch/powerpc/include/asm/bitops.h:62:
   arch/powerpc/include/asm/barrier.h:49:9: warning: '__lwsync' macro redefined [-Wmacro-redefined]
   #define __lwsync()      __asm__ __volatile__ (stringify_in_c(LWSYNC) : : :"memory")
           ^
   <built-in>:309:9: note: previous definition is here
   #define __lwsync __builtin_ppc_lwsync
           ^
>> mm/compaction.c:799:1: warning: stack frame size (2080) exceeds limit (2048) in function 'isolate_migratepages_block' [-Wframe-larger-than]
   isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
   ^
   2 warnings generated.


vim +/isolate_migratepages_block +799 mm/compaction.c

748446bb6b5a93 Mel Gorman              2010-05-24   779  
2fe86e00040761 Michal Nazarewicz       2012-01-30   780  /**
edc2ca61249679 Vlastimil Babka         2014-10-09   781   * isolate_migratepages_block() - isolate all migrate-able pages within
edc2ca61249679 Vlastimil Babka         2014-10-09   782   *				  a single pageblock
2fe86e00040761 Michal Nazarewicz       2012-01-30   783   * @cc:		Compaction control structure.
edc2ca61249679 Vlastimil Babka         2014-10-09   784   * @low_pfn:	The first PFN to isolate
edc2ca61249679 Vlastimil Babka         2014-10-09   785   * @end_pfn:	The one-past-the-last PFN to isolate, within same pageblock
edc2ca61249679 Vlastimil Babka         2014-10-09   786   * @isolate_mode: Isolation mode to be used.
2fe86e00040761 Michal Nazarewicz       2012-01-30   787   *
2fe86e00040761 Michal Nazarewicz       2012-01-30   788   * Isolate all pages that can be migrated from the range specified by
edc2ca61249679 Vlastimil Babka         2014-10-09   789   * [low_pfn, end_pfn). The range is expected to be within same pageblock.
edc2ca61249679 Vlastimil Babka         2014-10-09   790   * Returns zero if there is a fatal signal pending, otherwise PFN of the
edc2ca61249679 Vlastimil Babka         2014-10-09   791   * first page that was not scanned (which may be both less, equal to or more
edc2ca61249679 Vlastimil Babka         2014-10-09   792   * than end_pfn).
2fe86e00040761 Michal Nazarewicz       2012-01-30   793   *
edc2ca61249679 Vlastimil Babka         2014-10-09   794   * The pages are isolated on cc->migratepages list (not required to be empty),
edc2ca61249679 Vlastimil Babka         2014-10-09   795   * and cc->nr_migratepages is updated accordingly. The cc->migrate_pfn field
edc2ca61249679 Vlastimil Babka         2014-10-09   796   * is neither read nor updated.
748446bb6b5a93 Mel Gorman              2010-05-24   797   */
edc2ca61249679 Vlastimil Babka         2014-10-09   798  static unsigned long
edc2ca61249679 Vlastimil Babka         2014-10-09  @799  isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
edc2ca61249679 Vlastimil Babka         2014-10-09   800  			unsigned long end_pfn, isolate_mode_t isolate_mode)
748446bb6b5a93 Mel Gorman              2010-05-24   801  {
5f438eee8f2e97 Andrey Ryabinin         2019-03-05   802  	pg_data_t *pgdat = cc->zone->zone_pgdat;
b7aba6984dc048 Mel Gorman              2011-01-13   803  	unsigned long nr_scanned = 0, nr_isolated = 0;
fa9add641b1b1c Hugh Dickins            2012-05-29   804  	struct lruvec *lruvec;
b8b2d825323633 Xiubo Li                2014-10-09   805  	unsigned long flags = 0;
6168d0da2b479c Alex Shi                2020-12-15   806  	struct lruvec *locked = NULL;
bb13ffeb9f6bfe Mel Gorman              2012-10-08   807  	struct page *page = NULL, *valid_page = NULL;
e34d85f0e3c60f Joonsoo Kim             2015-02-11   808  	unsigned long start_pfn = low_pfn;
fdd048e12c9a46 Vlastimil Babka         2016-05-19   809  	bool skip_on_failure = false;
fdd048e12c9a46 Vlastimil Babka         2016-05-19   810  	unsigned long next_skip_pfn = 0;
e380bebe477154 Mel Gorman              2019-03-05   811  	bool skip_updated = false;
748446bb6b5a93 Mel Gorman              2010-05-24   812  
748446bb6b5a93 Mel Gorman              2010-05-24   813  	/*
748446bb6b5a93 Mel Gorman              2010-05-24   814  	 * Ensure that there are not too many pages isolated from the LRU
748446bb6b5a93 Mel Gorman              2010-05-24   815  	 * list by either parallel reclaimers or compaction. If there are,
748446bb6b5a93 Mel Gorman              2010-05-24   816  	 * delay for some time until fewer pages are isolated
748446bb6b5a93 Mel Gorman              2010-05-24   817  	 */
5f438eee8f2e97 Andrey Ryabinin         2019-03-05   818  	while (unlikely(too_many_isolated(pgdat))) {
d20bdd571ee5c9 Zi Yan                  2020-11-13   819  		/* stop isolation if there are still pages not migrated */
d20bdd571ee5c9 Zi Yan                  2020-11-13   820  		if (cc->nr_migratepages)
d20bdd571ee5c9 Zi Yan                  2020-11-13   821  			return 0;
d20bdd571ee5c9 Zi Yan                  2020-11-13   822  
f9e35b3b41f47c Mel Gorman              2011-06-15   823  		/* async migration should just abort */
e0b9daeb453e60 David Rientjes          2014-06-04   824  		if (cc->mode == MIGRATE_ASYNC)
2fe86e00040761 Michal Nazarewicz       2012-01-30   825  			return 0;
f9e35b3b41f47c Mel Gorman              2011-06-15   826  
748446bb6b5a93 Mel Gorman              2010-05-24   827  		congestion_wait(BLK_RW_ASYNC, HZ/10);
748446bb6b5a93 Mel Gorman              2010-05-24   828  
748446bb6b5a93 Mel Gorman              2010-05-24   829  		if (fatal_signal_pending(current))
2fe86e00040761 Michal Nazarewicz       2012-01-30   830  			return 0;
748446bb6b5a93 Mel Gorman              2010-05-24   831  	}
748446bb6b5a93 Mel Gorman              2010-05-24   832  
cf66f0700c8f1d Mel Gorman              2019-03-05   833  	cond_resched();
aeef4b83806f49 David Rientjes          2014-06-04   834  
fdd048e12c9a46 Vlastimil Babka         2016-05-19   835  	if (cc->direct_compaction && (cc->mode == MIGRATE_ASYNC)) {
fdd048e12c9a46 Vlastimil Babka         2016-05-19   836  		skip_on_failure = true;
fdd048e12c9a46 Vlastimil Babka         2016-05-19   837  		next_skip_pfn = block_end_pfn(low_pfn, cc->order);
fdd048e12c9a46 Vlastimil Babka         2016-05-19   838  	}
fdd048e12c9a46 Vlastimil Babka         2016-05-19   839  
748446bb6b5a93 Mel Gorman              2010-05-24   840  	/* Time to isolate some pages for migration */
748446bb6b5a93 Mel Gorman              2010-05-24   841  	for (; low_pfn < end_pfn; low_pfn++) {
29c0dde830f8c0 Vlastimil Babka         2015-09-08   842  
fdd048e12c9a46 Vlastimil Babka         2016-05-19   843  		if (skip_on_failure && low_pfn >= next_skip_pfn) {
fdd048e12c9a46 Vlastimil Babka         2016-05-19   844  			/*
fdd048e12c9a46 Vlastimil Babka         2016-05-19   845  			 * We have isolated all migration candidates in the
fdd048e12c9a46 Vlastimil Babka         2016-05-19   846  			 * previous order-aligned block, and did not skip it due
fdd048e12c9a46 Vlastimil Babka         2016-05-19   847  			 * to failure. We should migrate the pages now and
fdd048e12c9a46 Vlastimil Babka         2016-05-19   848  			 * hopefully succeed compaction.
fdd048e12c9a46 Vlastimil Babka         2016-05-19   849  			 */
fdd048e12c9a46 Vlastimil Babka         2016-05-19   850  			if (nr_isolated)
fdd048e12c9a46 Vlastimil Babka         2016-05-19   851  				break;
fdd048e12c9a46 Vlastimil Babka         2016-05-19   852  
fdd048e12c9a46 Vlastimil Babka         2016-05-19   853  			/*
fdd048e12c9a46 Vlastimil Babka         2016-05-19   854  			 * We failed to isolate in the previous order-aligned
fdd048e12c9a46 Vlastimil Babka         2016-05-19   855  			 * block. Set the new boundary to the end of the
fdd048e12c9a46 Vlastimil Babka         2016-05-19   856  			 * current block. Note we can't simply increase
fdd048e12c9a46 Vlastimil Babka         2016-05-19   857  			 * next_skip_pfn by 1 << order, as low_pfn might have
fdd048e12c9a46 Vlastimil Babka         2016-05-19   858  			 * been incremented by a higher number due to skipping
fdd048e12c9a46 Vlastimil Babka         2016-05-19   859  			 * a compound or a high-order buddy page in the
fdd048e12c9a46 Vlastimil Babka         2016-05-19   860  			 * previous loop iteration.
fdd048e12c9a46 Vlastimil Babka         2016-05-19   861  			 */
fdd048e12c9a46 Vlastimil Babka         2016-05-19   862  			next_skip_pfn = block_end_pfn(low_pfn, cc->order);
fdd048e12c9a46 Vlastimil Babka         2016-05-19   863  		}
fdd048e12c9a46 Vlastimil Babka         2016-05-19   864  
8b44d2791f9125 Vlastimil Babka         2014-10-09   865  		/*
8b44d2791f9125 Vlastimil Babka         2014-10-09   866  		 * Periodically drop the lock (if held) regardless of its
670105a25608af Mel Gorman              2019-08-02   867  		 * contention, to give chance to IRQs. Abort completely if
670105a25608af Mel Gorman              2019-08-02   868  		 * a fatal signal is pending.
8b44d2791f9125 Vlastimil Babka         2014-10-09   869  		 */
6168d0da2b479c Alex Shi                2020-12-15   870  		if (!(low_pfn % SWAP_CLUSTER_MAX)) {
6168d0da2b479c Alex Shi                2020-12-15   871  			if (locked) {
6168d0da2b479c Alex Shi                2020-12-15   872  				unlock_page_lruvec_irqrestore(locked, flags);
6168d0da2b479c Alex Shi                2020-12-15   873  				locked = NULL;
6168d0da2b479c Alex Shi                2020-12-15   874  			}
6168d0da2b479c Alex Shi                2020-12-15   875  
6168d0da2b479c Alex Shi                2020-12-15   876  			if (fatal_signal_pending(current)) {
6168d0da2b479c Alex Shi                2020-12-15   877  				cc->contended = true;
6168d0da2b479c Alex Shi                2020-12-15   878  
670105a25608af Mel Gorman              2019-08-02   879  				low_pfn = 0;
670105a25608af Mel Gorman              2019-08-02   880  				goto fatal_pending;
670105a25608af Mel Gorman              2019-08-02   881  			}
b2eef8c0d09101 Andrea Arcangeli        2011-03-22   882  
6168d0da2b479c Alex Shi                2020-12-15   883  			cond_resched();
6168d0da2b479c Alex Shi                2020-12-15   884  		}
6168d0da2b479c Alex Shi                2020-12-15   885  
748446bb6b5a93 Mel Gorman              2010-05-24   886  		if (!pfn_valid_within(low_pfn))
fdd048e12c9a46 Vlastimil Babka         2016-05-19   887  			goto isolate_fail;
b7aba6984dc048 Mel Gorman              2011-01-13   888  		nr_scanned++;
748446bb6b5a93 Mel Gorman              2010-05-24   889  
748446bb6b5a93 Mel Gorman              2010-05-24   890  		page = pfn_to_page(low_pfn);
dc9086004b3d5d Mel Gorman              2012-02-08   891  
e380bebe477154 Mel Gorman              2019-03-05   892  		/*
e380bebe477154 Mel Gorman              2019-03-05   893  		 * Check if the pageblock has already been marked skipped.
e380bebe477154 Mel Gorman              2019-03-05   894  		 * Only the aligned PFN is checked as the caller isolates
e380bebe477154 Mel Gorman              2019-03-05   895  		 * COMPACT_CLUSTER_MAX at a time so the second call must
e380bebe477154 Mel Gorman              2019-03-05   896  		 * not falsely conclude that the block should be skipped.
e380bebe477154 Mel Gorman              2019-03-05   897  		 */
e380bebe477154 Mel Gorman              2019-03-05   898  		if (!valid_page && IS_ALIGNED(low_pfn, pageblock_nr_pages)) {
e380bebe477154 Mel Gorman              2019-03-05   899  			if (!cc->ignore_skip_hint && get_pageblock_skip(page)) {
e380bebe477154 Mel Gorman              2019-03-05   900  				low_pfn = end_pfn;
9df41314390b81 Alex Shi                2020-12-15   901  				page = NULL;
e380bebe477154 Mel Gorman              2019-03-05   902  				goto isolate_abort;
e380bebe477154 Mel Gorman              2019-03-05   903  			}
bb13ffeb9f6bfe Mel Gorman              2012-10-08   904  			valid_page = page;
e380bebe477154 Mel Gorman              2019-03-05   905  		}
bb13ffeb9f6bfe Mel Gorman              2012-10-08   906  
c122b2087ab941 Joonsoo Kim             2014-04-07   907  		/*
99c0fd5e51c447 Vlastimil Babka         2014-10-09   908  		 * Skip if free. We read page order here without zone lock
99c0fd5e51c447 Vlastimil Babka         2014-10-09   909  		 * which is generally unsafe, but the race window is small and
99c0fd5e51c447 Vlastimil Babka         2014-10-09   910  		 * the worst thing that can happen is that we skip some
99c0fd5e51c447 Vlastimil Babka         2014-10-09   911  		 * potential isolation targets.
99c0fd5e51c447 Vlastimil Babka         2014-10-09   912  		 */
99c0fd5e51c447 Vlastimil Babka         2014-10-09   913  		if (PageBuddy(page)) {
ab130f9108dcf2 Matthew Wilcox (Oracle  2020-10-15   914) 			unsigned long freepage_order = buddy_order_unsafe(page);
99c0fd5e51c447 Vlastimil Babka         2014-10-09   915  
99c0fd5e51c447 Vlastimil Babka         2014-10-09   916  			/*
99c0fd5e51c447 Vlastimil Babka         2014-10-09   917  			 * Without lock, we cannot be sure that what we got is
99c0fd5e51c447 Vlastimil Babka         2014-10-09   918  			 * a valid page order. Consider only values in the
99c0fd5e51c447 Vlastimil Babka         2014-10-09   919  			 * valid order range to prevent low_pfn overflow.
c122b2087ab941 Joonsoo Kim             2014-04-07   920  			 */
99c0fd5e51c447 Vlastimil Babka         2014-10-09   921  			if (freepage_order > 0 && freepage_order < MAX_ORDER)
99c0fd5e51c447 Vlastimil Babka         2014-10-09   922  				low_pfn += (1UL << freepage_order) - 1;
c122b2087ab941 Joonsoo Kim             2014-04-07   923  			continue;
99c0fd5e51c447 Vlastimil Babka         2014-10-09   924  		}
9927af740b1b9b Mel Gorman              2011-01-13   925  
bc835011afbea3 Andrea Arcangeli        2011-01-13   926  		/*
29c0dde830f8c0 Vlastimil Babka         2015-09-08   927  		 * Regardless of being on LRU, compound pages such as THP and
1da2f328fa643b Rik van Riel            2020-04-01   928  		 * hugetlbfs are not to be compacted unless we are attempting
1da2f328fa643b Rik van Riel            2020-04-01   929  		 * an allocation much larger than the huge page size (eg CMA).
1da2f328fa643b Rik van Riel            2020-04-01   930  		 * We can potentially save a lot of iterations if we skip them
1da2f328fa643b Rik van Riel            2020-04-01   931  		 * at once. The check is racy, but we can consider only valid
1da2f328fa643b Rik van Riel            2020-04-01   932  		 * values and the only danger is skipping too much.
bc835011afbea3 Andrea Arcangeli        2011-01-13   933  		 */
1da2f328fa643b Rik van Riel            2020-04-01   934  		if (PageCompound(page) && !cc->alloc_contig) {
21dc7e023611fb David Rientjes          2017-11-17   935  			const unsigned int order = compound_order(page);
edc2ca61249679 Vlastimil Babka         2014-10-09   936  
d3c85bad89b915 Vlastimil Babka         2017-11-17   937  			if (likely(order < MAX_ORDER))
21dc7e023611fb David Rientjes          2017-11-17   938  				low_pfn += (1UL << order) - 1;
fdd048e12c9a46 Vlastimil Babka         2016-05-19   939  			goto isolate_fail;
2a1402aa044b55 Mel Gorman              2012-10-08   940  		}
2a1402aa044b55 Mel Gorman              2012-10-08   941  
bda807d4445414 Minchan Kim             2016-07-26   942  		/*
bda807d4445414 Minchan Kim             2016-07-26   943  		 * Check may be lockless but that's ok as we recheck later.
bda807d4445414 Minchan Kim             2016-07-26   944  		 * It's possible to migrate LRU and non-lru movable pages.
bda807d4445414 Minchan Kim             2016-07-26   945  		 * Skip any other type of page
bda807d4445414 Minchan Kim             2016-07-26   946  		 */
bda807d4445414 Minchan Kim             2016-07-26   947  		if (!PageLRU(page)) {
bda807d4445414 Minchan Kim             2016-07-26   948  			/*
bda807d4445414 Minchan Kim             2016-07-26   949  			 * __PageMovable can return false positive so we need
bda807d4445414 Minchan Kim             2016-07-26   950  			 * to verify it under page_lock.
bda807d4445414 Minchan Kim             2016-07-26   951  			 */
bda807d4445414 Minchan Kim             2016-07-26   952  			if (unlikely(__PageMovable(page)) &&
bda807d4445414 Minchan Kim             2016-07-26   953  					!PageIsolated(page)) {
bda807d4445414 Minchan Kim             2016-07-26   954  				if (locked) {
6168d0da2b479c Alex Shi                2020-12-15   955  					unlock_page_lruvec_irqrestore(locked, flags);
6168d0da2b479c Alex Shi                2020-12-15   956  					locked = NULL;
bda807d4445414 Minchan Kim             2016-07-26   957  				}
bda807d4445414 Minchan Kim             2016-07-26   958  
9e5bcd610ffced Yisheng Xie             2017-02-24   959  				if (!isolate_movable_page(page, isolate_mode))
bda807d4445414 Minchan Kim             2016-07-26   960  					goto isolate_success;
bda807d4445414 Minchan Kim             2016-07-26   961  			}
bda807d4445414 Minchan Kim             2016-07-26   962  
fdd048e12c9a46 Vlastimil Babka         2016-05-19   963  			goto isolate_fail;
bda807d4445414 Minchan Kim             2016-07-26   964  		}
29c0dde830f8c0 Vlastimil Babka         2015-09-08   965  
119d6d59dcc098 David Rientjes          2014-04-03   966  		/*
119d6d59dcc098 David Rientjes          2014-04-03   967  		 * Migration will fail if an anonymous page is pinned in memory,
119d6d59dcc098 David Rientjes          2014-04-03   968  		 * so avoid taking lru_lock and isolating it unnecessarily in an
119d6d59dcc098 David Rientjes          2014-04-03   969  		 * admittedly racy check.
119d6d59dcc098 David Rientjes          2014-04-03   970  		 */
119d6d59dcc098 David Rientjes          2014-04-03   971  		if (!page_mapping(page) &&
119d6d59dcc098 David Rientjes          2014-04-03   972  		    page_count(page) > page_mapcount(page))
fdd048e12c9a46 Vlastimil Babka         2016-05-19   973  			goto isolate_fail;
119d6d59dcc098 David Rientjes          2014-04-03   974  
73e64c51afc56d Michal Hocko            2016-12-14   975  		/*
73e64c51afc56d Michal Hocko            2016-12-14   976  		 * Only allow to migrate anonymous pages in GFP_NOFS context
73e64c51afc56d Michal Hocko            2016-12-14   977  		 * because those do not depend on fs locks.
73e64c51afc56d Michal Hocko            2016-12-14   978  		 */
73e64c51afc56d Michal Hocko            2016-12-14   979  		if (!(cc->gfp_mask & __GFP_FS) && page_mapping(page))
73e64c51afc56d Michal Hocko            2016-12-14   980  			goto isolate_fail;
73e64c51afc56d Michal Hocko            2016-12-14   981  
9df41314390b81 Alex Shi                2020-12-15   982  		/*
9df41314390b81 Alex Shi                2020-12-15   983  		 * Be careful not to clear PageLRU until after we're
9df41314390b81 Alex Shi                2020-12-15   984  		 * sure the page is not being freed elsewhere -- the
9df41314390b81 Alex Shi                2020-12-15   985  		 * page release code relies on it.
9df41314390b81 Alex Shi                2020-12-15   986  		 */
9df41314390b81 Alex Shi                2020-12-15   987  		if (unlikely(!get_page_unless_zero(page)))
9df41314390b81 Alex Shi                2020-12-15   988  			goto isolate_fail;
9df41314390b81 Alex Shi                2020-12-15   989  
c2135f7c570bc2 Alex Shi                2021-02-24   990  		if (!__isolate_lru_page_prepare(page, isolate_mode))
9df41314390b81 Alex Shi                2020-12-15   991  			goto isolate_fail_put;
9df41314390b81 Alex Shi                2020-12-15   992  
9df41314390b81 Alex Shi                2020-12-15   993  		/* Try isolate the page */
9df41314390b81 Alex Shi                2020-12-15   994  		if (!TestClearPageLRU(page))
9df41314390b81 Alex Shi                2020-12-15   995  			goto isolate_fail_put;
9df41314390b81 Alex Shi                2020-12-15   996  
6168d0da2b479c Alex Shi                2020-12-15   997  		lruvec = mem_cgroup_page_lruvec(page, pgdat);
6168d0da2b479c Alex Shi                2020-12-15   998  
69b7189f12e006 Vlastimil Babka         2014-10-09   999  		/* If we already hold the lock, we can skip some rechecking */
6168d0da2b479c Alex Shi                2020-12-15  1000  		if (lruvec != locked) {
6168d0da2b479c Alex Shi                2020-12-15  1001  			if (locked)
6168d0da2b479c Alex Shi                2020-12-15  1002  				unlock_page_lruvec_irqrestore(locked, flags);
6168d0da2b479c Alex Shi                2020-12-15  1003  
6168d0da2b479c Alex Shi                2020-12-15  1004  			compact_lock_irqsave(&lruvec->lru_lock, &flags, cc);
6168d0da2b479c Alex Shi                2020-12-15  1005  			locked = lruvec;
6168d0da2b479c Alex Shi                2020-12-15  1006  
6168d0da2b479c Alex Shi                2020-12-15  1007  			lruvec_memcg_debug(lruvec, page);
e380bebe477154 Mel Gorman              2019-03-05  1008  
e380bebe477154 Mel Gorman              2019-03-05  1009  			/* Try get exclusive access under lock */
e380bebe477154 Mel Gorman              2019-03-05  1010  			if (!skip_updated) {
e380bebe477154 Mel Gorman              2019-03-05  1011  				skip_updated = true;
e380bebe477154 Mel Gorman              2019-03-05  1012  				if (test_and_set_skip(cc, page, low_pfn))
e380bebe477154 Mel Gorman              2019-03-05  1013  					goto isolate_abort;
e380bebe477154 Mel Gorman              2019-03-05  1014  			}
2a1402aa044b55 Mel Gorman              2012-10-08  1015  
29c0dde830f8c0 Vlastimil Babka         2015-09-08  1016  			/*
29c0dde830f8c0 Vlastimil Babka         2015-09-08  1017  			 * Page become compound since the non-locked check,
29c0dde830f8c0 Vlastimil Babka         2015-09-08  1018  			 * and it's on LRU. It can only be a THP so the order
29c0dde830f8c0 Vlastimil Babka         2015-09-08  1019  			 * is safe to read and it's 0 for tail pages.
29c0dde830f8c0 Vlastimil Babka         2015-09-08  1020  			 */
1da2f328fa643b Rik van Riel            2020-04-01  1021  			if (unlikely(PageCompound(page) && !cc->alloc_contig)) {
d8c6546b1aea84 Matthew Wilcox (Oracle  2019-09-23  1022) 				low_pfn += compound_nr(page) - 1;
9df41314390b81 Alex Shi                2020-12-15  1023  				SetPageLRU(page);
9df41314390b81 Alex Shi                2020-12-15  1024  				goto isolate_fail_put;
bc835011afbea3 Andrea Arcangeli        2011-01-13  1025  			}
d99fd5feb0ac1d Alex Shi                2021-02-24  1026  		}
fa9add641b1b1c Hugh Dickins            2012-05-29  1027  
1da2f328fa643b Rik van Riel            2020-04-01  1028  		/* The whole page is taken off the LRU; skip the tail pages. */
1da2f328fa643b Rik van Riel            2020-04-01  1029  		if (PageCompound(page))
1da2f328fa643b Rik van Riel            2020-04-01  1030  			low_pfn += compound_nr(page) - 1;
bc835011afbea3 Andrea Arcangeli        2011-01-13  1031  
748446bb6b5a93 Mel Gorman              2010-05-24  1032  		/* Successfully isolated */
46ae6b2cc2a479 Yu Zhao                 2021-02-24  1033  		del_page_from_lru_list(page, lruvec);
1da2f328fa643b Rik van Riel            2020-04-01  1034  		mod_node_page_state(page_pgdat(page),
9de4f22a60f731 Huang Ying              2020-04-06  1035  				NR_ISOLATED_ANON + page_is_file_lru(page),
6c357848b44b40 Matthew Wilcox (Oracle  2020-08-14  1036) 				thp_nr_pages(page));
b6c750163c0d13 Joonsoo Kim             2014-04-07  1037  
b6c750163c0d13 Joonsoo Kim             2014-04-07  1038  isolate_success:
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1039  		list_add(&page->lru, &cc->migratepages);
38935861d85a4d Zi Yan                  2020-11-13  1040  		cc->nr_migratepages += compound_nr(page);
38935861d85a4d Zi Yan                  2020-11-13  1041  		nr_isolated += compound_nr(page);
748446bb6b5a93 Mel Gorman              2010-05-24  1042  
804d3121ba5f03 Mel Gorman              2019-03-05  1043  		/*
804d3121ba5f03 Mel Gorman              2019-03-05  1044  		 * Avoid isolating too much unless this block is being
cb2dcaf023c2cf Mel Gorman              2019-03-05  1045  		 * rescanned (e.g. dirty/writeback pages, parallel allocation)
cb2dcaf023c2cf Mel Gorman              2019-03-05  1046  		 * or a lock is contended. For contention, isolate quickly to
cb2dcaf023c2cf Mel Gorman              2019-03-05  1047  		 * potentially remove one source of contention.
804d3121ba5f03 Mel Gorman              2019-03-05  1048  		 */
38935861d85a4d Zi Yan                  2020-11-13  1049  		if (cc->nr_migratepages >= COMPACT_CLUSTER_MAX &&
cb2dcaf023c2cf Mel Gorman              2019-03-05  1050  		    !cc->rescan && !cc->contended) {
31b8384a555d94 Hillf Danton            2012-01-10  1051  			++low_pfn;
748446bb6b5a93 Mel Gorman              2010-05-24  1052  			break;
748446bb6b5a93 Mel Gorman              2010-05-24  1053  		}
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1054  
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1055  		continue;
9df41314390b81 Alex Shi                2020-12-15  1056  
9df41314390b81 Alex Shi                2020-12-15  1057  isolate_fail_put:
9df41314390b81 Alex Shi                2020-12-15  1058  		/* Avoid potential deadlock in freeing page under lru_lock */
9df41314390b81 Alex Shi                2020-12-15  1059  		if (locked) {
6168d0da2b479c Alex Shi                2020-12-15  1060  			unlock_page_lruvec_irqrestore(locked, flags);
6168d0da2b479c Alex Shi                2020-12-15  1061  			locked = NULL;
9df41314390b81 Alex Shi                2020-12-15  1062  		}
9df41314390b81 Alex Shi                2020-12-15  1063  		put_page(page);
9df41314390b81 Alex Shi                2020-12-15  1064  
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1065  isolate_fail:
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1066  		if (!skip_on_failure)
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1067  			continue;
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1068  
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1069  		/*
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1070  		 * We have isolated some pages, but then failed. Release them
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1071  		 * instead of migrating, as we cannot form the cc->order buddy
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1072  		 * page anyway.
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1073  		 */
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1074  		if (nr_isolated) {
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1075  			if (locked) {
6168d0da2b479c Alex Shi                2020-12-15  1076  				unlock_page_lruvec_irqrestore(locked, flags);
6168d0da2b479c Alex Shi                2020-12-15  1077  				locked = NULL;
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1078  			}
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1079  			putback_movable_pages(&cc->migratepages);
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1080  			cc->nr_migratepages = 0;
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1081  			nr_isolated = 0;
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1082  		}
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1083  
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1084  		if (low_pfn < next_skip_pfn) {
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1085  			low_pfn = next_skip_pfn - 1;
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1086  			/*
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1087  			 * The check near the loop beginning would have updated
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1088  			 * next_skip_pfn too, but this is a bit simpler.
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1089  			 */
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1090  			next_skip_pfn += 1UL << cc->order;
fdd048e12c9a46 Vlastimil Babka         2016-05-19  1091  		}
31b8384a555d94 Hillf Danton            2012-01-10  1092  	}
748446bb6b5a93 Mel Gorman              2010-05-24  1093  
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1094  	/*
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1095  	 * The PageBuddy() check could have potentially brought us outside
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1096  	 * the range to be scanned.
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1097  	 */
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1098  	if (unlikely(low_pfn > end_pfn))
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1099  		low_pfn = end_pfn;
99c0fd5e51c447 Vlastimil Babka         2014-10-09  1100  
9df41314390b81 Alex Shi                2020-12-15  1101  	page = NULL;
9df41314390b81 Alex Shi                2020-12-15  1102  
e380bebe477154 Mel Gorman              2019-03-05  1103  isolate_abort:
c67fe3752abe6a Mel Gorman              2012-08-21  1104  	if (locked)
6168d0da2b479c Alex Shi                2020-12-15  1105  		unlock_page_lruvec_irqrestore(locked, flags);
9df41314390b81 Alex Shi                2020-12-15  1106  	if (page) {
9df41314390b81 Alex Shi                2020-12-15  1107  		SetPageLRU(page);
9df41314390b81 Alex Shi                2020-12-15  1108  		put_page(page);
9df41314390b81 Alex Shi                2020-12-15  1109  	}
748446bb6b5a93 Mel Gorman              2010-05-24  1110  
50b5b094e683f8 Vlastimil Babka         2014-01-21  1111  	/*
804d3121ba5f03 Mel Gorman              2019-03-05  1112  	 * Updated the cached scanner pfn once the pageblock has been scanned
804d3121ba5f03 Mel Gorman              2019-03-05  1113  	 * Pages will either be migrated in which case there is no point
804d3121ba5f03 Mel Gorman              2019-03-05  1114  	 * scanning in the near future or migration failed in which case the
804d3121ba5f03 Mel Gorman              2019-03-05  1115  	 * failure reason may persist. The block is marked for skipping if
804d3121ba5f03 Mel Gorman              2019-03-05  1116  	 * there were no pages isolated in the block or if the block is
804d3121ba5f03 Mel Gorman              2019-03-05  1117  	 * rescanned twice in a row.
50b5b094e683f8 Vlastimil Babka         2014-01-21  1118  	 */
804d3121ba5f03 Mel Gorman              2019-03-05  1119  	if (low_pfn == end_pfn && (!nr_isolated || cc->rescan)) {
e380bebe477154 Mel Gorman              2019-03-05  1120  		if (valid_page && !skip_updated)
e380bebe477154 Mel Gorman              2019-03-05  1121  			set_pageblock_skip(valid_page);
e380bebe477154 Mel Gorman              2019-03-05  1122  		update_cached_migrate(cc, low_pfn);
e380bebe477154 Mel Gorman              2019-03-05  1123  	}
bb13ffeb9f6bfe Mel Gorman              2012-10-08  1124  
e34d85f0e3c60f Joonsoo Kim             2015-02-11  1125  	trace_mm_compaction_isolate_migratepages(start_pfn, low_pfn,
e34d85f0e3c60f Joonsoo Kim             2015-02-11  1126  						nr_scanned, nr_isolated);
b7aba6984dc048 Mel Gorman              2011-01-13  1127  
670105a25608af Mel Gorman              2019-08-02  1128  fatal_pending:
7f354a548d1cb6 David Rientjes          2017-02-22  1129  	cc->total_migrate_scanned += nr_scanned;
397487db696cae Mel Gorman              2012-10-19  1130  	if (nr_isolated)
010fc29a45a2e8 Minchan Kim             2012-12-20  1131  		count_compact_events(COMPACTISOLATED, nr_isolated);
397487db696cae Mel Gorman              2012-10-19  1132  
2fe86e00040761 Michal Nazarewicz       2012-01-30  1133  	return low_pfn;
2fe86e00040761 Michal Nazarewicz       2012-01-30  1134  }
2fe86e00040761 Michal Nazarewicz       2012-01-30  1135  

:::::: The code at line 799 was first introduced by commit
:::::: edc2ca61249679298c1f343cd9c549964b8df4b4 mm, compaction: move pageblock checks up from isolate_migratepages_range()

:::::: TO: Vlastimil Babka <vbabka@...e.cz>
:::::: CC: Linus Torvalds <torvalds@...ux-foundation.org>

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

Download attachment ".config.gz" of type "application/gzip" (27843 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ