All of lore.kernel.org
 help / color / mirror / Atom feed
* [gourryinverse:scratch/gourry/managed_nodes/rfc6-numa 35/47] mm/page_alloc.c:4980 __alloc_pages_slowpath() warn: bitwise AND condition is false here
@ 2026-10-19  2:32 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-19  2:32 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

Unfiltered warning: this smatch report is sent as-is and has not been
reviewed for false positives, so please treat it with due skepticism.

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: Gregory Price <gourry@gourry.net>
TO: "Gregory Price (Meta)" <gourry@gourry.net>

tree:   https://github.com/gourryinverse/linux scratch/gourry/managed_nodes/rfc6-numa
head:   ad25e75667a4391ac566927c41f6e88f60ecff50
commit: 0345bc0f314a0e30bc000362e32cb066fd350b9e [35/47] mm/page_alloc: return to common zonelists when relaxing a mask
:::::: branch date: 14 hours ago
:::::: commit date: 14 hours ago
config: x86_64-randconfig-2200-20261019 (https://download.01.org/0day-ci/archive/20261019/202610190433.LHa3WuWV-lkp@intel.com/config)
compiler: clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
rustc: rustc 1.96.0 (ac68faa20 2026-05-25)
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202610190433.LHa3WuWV-lkp@intel.com/

smatch warnings:
mm/page_alloc.c:4980 __alloc_pages_slowpath() warn: bitwise AND condition is false here

vim +4980 mm/page_alloc.c

94e0bcde055ee1 David Rientjes         2026-03-30  4857  
11e33f6a55ed78 Mel Gorman             2009-06-16  4858  static inline struct page *
11e33f6a55ed78 Mel Gorman             2009-06-16  4859  __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
a9263751e11a07 Vlastimil Babka        2015-02-11  4860  						struct alloc_context *ac)
11e33f6a55ed78 Mel Gorman             2009-06-16  4861  {
282722b0d258ec Vlastimil Babka        2017-05-08  4862  	const bool costly_order = order > PAGE_ALLOC_COSTLY_ORDER;
923be74ae013d4 Salvatore Dipietro     2026-10-01  4863  	bool can_direct_reclaim;
923be74ae013d4 Salvatore Dipietro     2026-10-01  4864  	bool can_compact;
923be74ae013d4 Salvatore Dipietro     2026-10-01  4865  	bool nofail;
11e33f6a55ed78 Mel Gorman             2009-06-16  4866  	struct page *page = NULL;
c603844bdcb523 Mel Gorman             2016-05-19  4867  	unsigned int alloc_flags;
11e33f6a55ed78 Mel Gorman             2009-06-16  4868  	unsigned long did_some_progress;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4869  	enum compact_priority compact_priority;
c5d01d0d18e2ab Michal Hocko           2016-05-20  4870  	enum compact_result compact_result;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4871  	int compaction_retries;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4872  	int no_progress_loops;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4873  	unsigned int cpuset_mems_cookie;
3d36424b3b5850 Mel Gorman             2022-08-24  4874  	unsigned int zonelist_iter_cookie;
cd04ae1e2dc8e3 Michal Hocko           2017-09-06  4875  	int reserve_flags;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4876  	bool compact_first = false;
2c4c3e29897d43 Vlastimil Babka        2026-01-06  4877  	bool can_retry_reserves = true;
94e0bcde055ee1 David Rientjes         2026-03-30  4878  	unsigned long alloc_start_time = jiffies;
^1da177e4c3f41 Linus Torvalds         2005-04-16  4879  
923be74ae013d4 Salvatore Dipietro     2026-10-01  4880  	/*
923be74ae013d4 Salvatore Dipietro     2026-10-01  4881  	 * Costly __GFP_NORETRY callers have a cheap fallback, so don't stall
923be74ae013d4 Salvatore Dipietro     2026-10-01  4882  	 * them in reclaim or compaction. __GFP_THISNODE callers are exempt.
923be74ae013d4 Salvatore Dipietro     2026-10-01  4883  	 */
923be74ae013d4 Salvatore Dipietro     2026-10-01  4884  	if (costly_order && (gfp_mask & __GFP_NORETRY) &&
923be74ae013d4 Salvatore Dipietro     2026-10-01  4885  	    !(gfp_mask & __GFP_THISNODE))
923be74ae013d4 Salvatore Dipietro     2026-10-01  4886  		gfp_mask &= ~__GFP_DIRECT_RECLAIM;
923be74ae013d4 Salvatore Dipietro     2026-10-01  4887  
923be74ae013d4 Salvatore Dipietro     2026-10-01  4888  	can_direct_reclaim = gfp_mask & __GFP_DIRECT_RECLAIM;
923be74ae013d4 Salvatore Dipietro     2026-10-01  4889  	can_compact = can_direct_reclaim && gfp_compaction_allowed(gfp_mask);
923be74ae013d4 Salvatore Dipietro     2026-10-01  4890  	nofail = gfp_mask & __GFP_NOFAIL;
923be74ae013d4 Salvatore Dipietro     2026-10-01  4891  
903edea6c53f09 Barry Song             2024-08-31  4892  	if (unlikely(nofail)) {
903edea6c53f09 Barry Song             2024-08-31  4893  		/*
cbbed3c303f9ea Wei Yang               2026-08-29  4894  		 * We don't support __GFP_NOFAIL without __GFP_DIRECT_RECLAIM,
903edea6c53f09 Barry Song             2024-08-31  4895  		 * otherwise, we may result in lockup.
903edea6c53f09 Barry Song             2024-08-31  4896  		 */
903edea6c53f09 Barry Song             2024-08-31  4897  		WARN_ON_ONCE(!can_direct_reclaim);
903edea6c53f09 Barry Song             2024-08-31  4898  		/*
903edea6c53f09 Barry Song             2024-08-31  4899  		 * PF_MEMALLOC request from this context is rather bizarre
903edea6c53f09 Barry Song             2024-08-31  4900  		 * because we cannot reclaim anything and only can loop waiting
903edea6c53f09 Barry Song             2024-08-31  4901  		 * for somebody to do a work for us.
903edea6c53f09 Barry Song             2024-08-31  4902  		 */
903edea6c53f09 Barry Song             2024-08-31  4903  		WARN_ON_ONCE(current->flags & PF_MEMALLOC);
903edea6c53f09 Barry Song             2024-08-31  4904  	}
903edea6c53f09 Barry Song             2024-08-31  4905  
3d36424b3b5850 Mel Gorman             2022-08-24  4906  restart:
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4907  	compaction_retries = 0;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4908  	no_progress_loops = 0;
8fe9ed44dc29fb Hao Zhang              2025-02-27  4909  	compact_result = COMPACT_SKIPPED;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4910  	compact_priority = DEF_COMPACT_PRIORITY;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  4911  	cpuset_mems_cookie = read_mems_allowed_begin();
3d36424b3b5850 Mel Gorman             2022-08-24  4912  	zonelist_iter_cookie = zonelist_iter_begin();
9a67f6488eca92 Michal Hocko           2017-02-22  4913  
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4914  	/*
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4915  	 * For costly allocations, try direct compaction first, as it's likely
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4916  	 * that we have enough base pages and don't need to reclaim. For non-
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4917  	 * movable high-order allocations, do that as well, as compaction will
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4918  	 * try prevent permanent fragmentation by migrating from blocks of the
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4919  	 * same migratetype.
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4920  	 */
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4921  	if (can_compact && (costly_order || (order > 0 &&
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4922  					ac->migratetype != MIGRATE_MOVABLE))) {
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4923  		compact_first = true;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4924  		compact_priority = INIT_COMPACT_PRIORITY;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4925  	}
53a9b4646f67c9 Vlastimil Babka        2026-01-06  4926  
9a67f6488eca92 Michal Hocko           2017-02-22  4927  	/*
9a67f6488eca92 Michal Hocko           2017-02-22  4928  	 * The fast path uses conservative alloc_flags to succeed only until
9a67f6488eca92 Michal Hocko           2017-02-22  4929  	 * kswapd needs to be woken up, and to avoid the cost of setting up
9a67f6488eca92 Michal Hocko           2017-02-22  4930  	 * alloc_flags precisely. So we do that now.
6372aac4d41fcd Brendan Jackman        2026-07-03  4931  	 *
6372aac4d41fcd Brendan Jackman        2026-07-03  4932  	 * Can't just or alloc_flags if it contains WMARK bits, but those flags
6372aac4d41fcd Brendan Jackman        2026-07-03  4933  	 * shouldn't be set in ac->alloc_flags.
9a67f6488eca92 Michal Hocko           2017-02-22  4934  	 */
6372aac4d41fcd Brendan Jackman        2026-07-03  4935  	VM_WARN_ON(ac->alloc_flags & ALLOC_WMARK_MASK);
6372aac4d41fcd Brendan Jackman        2026-07-03  4936  	alloc_flags = ac->alloc_flags | alloc_flags_slowpath(gfp_mask, order);
9a67f6488eca92 Michal Hocko           2017-02-22  4937  
e47483bca2cc59 Vlastimil Babka        2017-01-24  4938  	/*
e47483bca2cc59 Vlastimil Babka        2017-01-24  4939  	 * We need to recalculate the starting point for the zonelist iterator
e47483bca2cc59 Vlastimil Babka        2017-01-24  4940  	 * because we might have used different nodemask in the fast path, or
e47483bca2cc59 Vlastimil Babka        2017-01-24  4941  	 * there was a cpuset modification and we are retrying - otherwise we
e47483bca2cc59 Vlastimil Babka        2017-01-24  4942  	 * could end up iterating over non-eligible zones endlessly.
e47483bca2cc59 Vlastimil Babka        2017-01-24  4943  	 */
e47483bca2cc59 Vlastimil Babka        2017-01-24  4944  	ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
97a225e69a1f88 Joonsoo Kim            2020-06-03  4945  					ac->highest_zoneidx, ac->nodemask);
29943248af0a8a Wei Yang               2024-07-29  4946  	if (!zonelist_zone(ac->preferred_zoneref))
e47483bca2cc59 Vlastimil Babka        2017-01-24  4947  		goto nopage;
e47483bca2cc59 Vlastimil Babka        2017-01-24  4948  
8ca1b5a49885f0 Feng Tang              2021-11-05  4949  	/*
8ca1b5a49885f0 Feng Tang              2021-11-05  4950  	 * Check for insane configurations where the cpuset doesn't contain
8ca1b5a49885f0 Feng Tang              2021-11-05  4951  	 * any suitable zone to satisfy the request - e.g. non-movable
8ca1b5a49885f0 Feng Tang              2021-11-05  4952  	 * GFP_HIGHUSER allocations from MOVABLE nodes only.
8ca1b5a49885f0 Feng Tang              2021-11-05  4953  	 */
8ca1b5a49885f0 Feng Tang              2021-11-05  4954  	if (cpusets_insane_config() && (gfp_mask & __GFP_HARDWALL)) {
8ca1b5a49885f0 Feng Tang              2021-11-05  4955  		struct zoneref *z = first_zones_zonelist(ac->zonelist,
8ca1b5a49885f0 Feng Tang              2021-11-05  4956  					ac->highest_zoneidx,
8ca1b5a49885f0 Feng Tang              2021-11-05  4957  					&cpuset_current_mems_allowed);
29943248af0a8a Wei Yang               2024-07-29  4958  		if (!zonelist_zone(z))
8ca1b5a49885f0 Feng Tang              2021-11-05  4959  			goto nopage;
8ca1b5a49885f0 Feng Tang              2021-11-05  4960  	}
8ca1b5a49885f0 Feng Tang              2021-11-05  4961  
2c4c3e29897d43 Vlastimil Babka        2026-01-06  4962  retry:
2c4c3e29897d43 Vlastimil Babka        2026-01-06  4963  	/* Ensure kswapd doesn't accidentally go to sleep as long as we loop */
0a79cdad5eb213 Mel Gorman             2018-12-28  4964  	if (alloc_flags & ALLOC_KSWAPD)
5ecd9d403ad081 David Rientjes         2018-04-05  4965  		wake_all_kswapds(order, gfp_mask, ac);
23771235bb569c Vlastimil Babka        2016-07-28  4966  
23771235bb569c Vlastimil Babka        2016-07-28  4967  	/*
23771235bb569c Vlastimil Babka        2016-07-28  4968  	 * The adjusted alloc_flags might result in immediate success, so try
23771235bb569c Vlastimil Babka        2016-07-28  4969  	 * that first
23771235bb569c Vlastimil Babka        2016-07-28  4970  	 */
23771235bb569c Vlastimil Babka        2016-07-28  4971  	page = get_page_from_freelist(gfp_mask, order, alloc_flags, ac);
23771235bb569c Vlastimil Babka        2016-07-28  4972  	if (page)
23771235bb569c Vlastimil Babka        2016-07-28  4973  		goto got_pg;
23771235bb569c Vlastimil Babka        2016-07-28  4974  
cd04ae1e2dc8e3 Michal Hocko           2017-09-06  4975  	reserve_flags = __gfp_pfmemalloc_flags(gfp_mask);
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4976) 	if (reserve_flags) {
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4977) 		unsigned int keep = ALLOC_KSWAPD;
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4978) 
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4979) 		/* The cpuset still grants a private binding's node. */
0345bc0f314a0e Gregory Price (Meta    2026-10-13 @4980) 		if (ac->alloc_flags & ALLOC_ZONELIST_PRIVATE)
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4981) 			keep |= ALLOC_CPUSET;
5df11ba0eb5ae3 Brendan Jackman        2026-07-03  4982  		alloc_flags = alloc_flags_cma(gfp_mask) | reserve_flags |
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4983) 				ac->alloc_flags | (alloc_flags & keep);
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4984) 	}
23771235bb569c Vlastimil Babka        2016-07-28  4985  
e46e7b77c9096e Mel Gorman             2016-06-03  4986  	/*
d6a24df00638a0 Vlastimil Babka        2018-08-17  4987  	 * Reset the nodemask and zonelist iterators if memory policies can be
d6a24df00638a0 Vlastimil Babka        2018-08-17  4988  	 * ignored. These allocations are high priority and system rather than
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4989) 	 * user oriented. A private binding keeps its node: private memory has
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4990) 	 * no reserves to grant.
e46e7b77c9096e Mel Gorman             2016-06-03  4991  	 */
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4992) 	if ((!(alloc_flags & ALLOC_CPUSET) || reserve_flags) &&
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4993) 	    !(ac->alloc_flags & ALLOC_ZONELIST_PRIVATE)) {
0345bc0f314a0e Gregory Price (Meta    2026-10-13  4994) 		reset_alloc_policy(gfp_mask, ac);
e46e7b77c9096e Mel Gorman             2016-06-03  4995  		ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
97a225e69a1f88 Joonsoo Kim            2020-06-03  4996  					ac->highest_zoneidx, ac->nodemask);
e46e7b77c9096e Mel Gorman             2016-06-03  4997  
2c4c3e29897d43 Vlastimil Babka        2026-01-06  4998  		/*
2c4c3e29897d43 Vlastimil Babka        2026-01-06  4999  		 * The first time we adjust anything due to being allowed to
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5000  		 * ignore memory policies or watermarks, retry immediately. This
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5001  		 * allows us to keep the first allocation attempt optimistic so
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5002  		 * it can succeed in a zone that is still above watermarks.
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5003  		 */
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5004  		if (can_retry_reserves) {
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5005  			can_retry_reserves = false;
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5006  			goto retry;
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5007  		}
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5008  	}
^1da177e4c3f41 Linus Torvalds         2005-04-16  5009  
d0164adc89f6bb Mel Gorman             2015-11-06  5010  	/* Caller is not willing to reclaim, we can't balance anything */
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5011  	if (!can_direct_reclaim) {
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5012  		/*
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5013  		 * Reclaim/compaction cannot run, so defrag_mode's strategy
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5014  		 * of enforcing ALLOC_NOFRAGMENT cannot be fulfilled. Allow
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5015  		 * fallbacks rather than failing the allocation outright.
923be74ae013d4 Salvatore Dipietro     2026-10-01  5016  		 * Not for __GFP_NORETRY: those have a cheap lower order
923be74ae013d4 Salvatore Dipietro     2026-10-01  5017  		 * fallback, so failing beats fragmenting.
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5018  		 */
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5019  		if (defrag_mode && (alloc_flags & ALLOC_NOFRAGMENT) &&
923be74ae013d4 Salvatore Dipietro     2026-10-01  5020  		    !(gfp_mask & __GFP_NORETRY) &&
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5021  		    (gfp_mask & __GFP_KSWAPD_RECLAIM)) {
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5022  			alloc_flags &= ~ALLOC_NOFRAGMENT;
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5023  			goto retry;
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5024  		}
^1da177e4c3f41 Linus Torvalds         2005-04-16  5025  		goto nopage;
4c0ed883e0516a Dmitry Ilvokhin        2026-05-20  5026  	}
^1da177e4c3f41 Linus Torvalds         2005-04-16  5027  
9a67f6488eca92 Michal Hocko           2017-02-22  5028  	/* Avoid recursion of direct reclaim */
9a67f6488eca92 Michal Hocko           2017-02-22  5029  	if (current->flags & PF_MEMALLOC)
6583bb64fc3708 David Rientjes         2009-07-29  5030  		goto nopage;
6583bb64fc3708 David Rientjes         2009-07-29  5031  
94e0bcde055ee1 David Rientjes         2026-03-30  5032  	/* If allocation has taken excessively long, warn about it */
94e0bcde055ee1 David Rientjes         2026-03-30  5033  	check_alloc_stall_warn(gfp_mask, ac->nodemask, order, alloc_start_time);
94e0bcde055ee1 David Rientjes         2026-03-30  5034  
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5035) 	/*
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5036) 	 * If fallbacks are not permitted (defrag_mode), we either
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5037) 	 * need to reclaim space in a block of matching type, or clear
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5038) 	 * out an entire block to allow __rmqueue_claim() to convert.
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5039) 	 *
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5040) 	 * Reclaim by itself is primarily freeing space in movable
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5041) 	 * blocks, since that's where the LRU pages live. So this
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5042) 	 * works for movable requests, but not for others.
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5043) 	 *
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5044) 	 * For those, promote the order to help make blocks, instead
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5045) 	 * of spinning in reclaim alone unproductively.
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5046) 	 */
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5047) 	ac->reclaim_compact_order = order;
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5048) 	if ((alloc_flags & ALLOC_NOFRAGMENT) && ac->migratetype != MIGRATE_MOVABLE)
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5049) 		ac->reclaim_compact_order = max(order, pageblock_order);
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5050) 
a8161d1ed60985 Vlastimil Babka        2016-07-28  5051  	/* Try direct reclaim and then allocating */
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5052  	if (!compact_first) {
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5053  		page = __alloc_pages_direct_reclaim(gfp_mask, order, alloc_flags,
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5054  							ac, &did_some_progress);
a8161d1ed60985 Vlastimil Babka        2016-07-28  5055  		if (page)
a8161d1ed60985 Vlastimil Babka        2016-07-28  5056  			goto got_pg;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5057  	}
a8161d1ed60985 Vlastimil Babka        2016-07-28  5058  
a8161d1ed60985 Vlastimil Babka        2016-07-28  5059  	/* Try direct compaction and then allocating */
a9263751e11a07 Vlastimil Babka        2015-02-11  5060  	page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags, ac,
a5508cd83f10f6 Vlastimil Babka        2016-07-28  5061  					compact_priority, &compact_result);
56de7263fcf3eb Mel Gorman             2010-05-24  5062  	if (page)
56de7263fcf3eb Mel Gorman             2010-05-24  5063  		goto got_pg;
75f30861a12a6b David Rientjes         2014-06-04  5064  
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5065  	if (compact_first) {
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5066  		/*
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5067  		 * THP page faults may attempt local node only first, but are
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5068  		 * then allowed to only compact, not reclaim, see
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5069  		 * alloc_pages_mpol().
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5070  		 *
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5071  		 * Compaction has failed above and we don't want such THP
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5072  		 * allocations to put reclaim pressure on a single node in a
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5073  		 * situation where other nodes might have plenty of available
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5074  		 * memory.
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5075  		 */
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5076  		if (gfp_has_flags(gfp_mask, __GFP_NORETRY | __GFP_THISNODE))
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5077  			goto nopage;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5078  
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5079  		/*
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5080  		 * For the initial compaction attempt we have lowered its
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5081  		 * priority. Restore it for further retries, if those are
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5082  		 * allowed. With __GFP_NORETRY there will be a single round of
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5083  		 * reclaim and compaction with the lowered priority.
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5084  		 */
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5085  		if (!(gfp_mask & __GFP_NORETRY))
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5086  			compact_priority = DEF_COMPACT_PRIORITY;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5087  
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5088  		compact_first = false;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5089  		goto retry;
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5090  	}
53a9b4646f67c9 Vlastimil Babka        2026-01-06  5091  
9083905a2a13de Johannes Weiner        2015-06-24  5092  	/* Do not loop if specifically requested */
9083905a2a13de Johannes Weiner        2015-06-24  5093  	if (gfp_mask & __GFP_NORETRY)
a8161d1ed60985 Vlastimil Babka        2016-07-28  5094  		goto nopage;
9083905a2a13de Johannes Weiner        2015-06-24  5095  
0a0337e0d1d134 Michal Hocko           2016-05-20  5096  	/*
0a0337e0d1d134 Michal Hocko           2016-05-20  5097  	 * Do not retry costly high order allocations unless they are
803de9000f334b Vlastimil Babka        2024-02-21  5098  	 * __GFP_RETRY_MAYFAIL and we can compact
0a0337e0d1d134 Michal Hocko           2016-05-20  5099  	 */
803de9000f334b Vlastimil Babka        2024-02-21  5100  	if (costly_order && (!can_compact ||
803de9000f334b Vlastimil Babka        2024-02-21  5101  			     !(gfp_mask & __GFP_RETRY_MAYFAIL)))
a8161d1ed60985 Vlastimil Babka        2016-07-28  5102  		goto nopage;
0a0337e0d1d134 Michal Hocko           2016-05-20  5103  
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5104  	/*
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5105  	 * Deal with possible cpuset update races or zonelist updates to avoid
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5106  	 * infinite retries. No "goto retry;" can be placed above this check
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5107  	 * unless it can execute just once.
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5108  	 */
0345bc0f314a0e Gregory Price (Meta    2026-10-13  5109) 	if (check_retry_alloc(gfp_mask, cpuset_mems_cookie,
0345bc0f314a0e Gregory Price (Meta    2026-10-13  5110) 			      zonelist_iter_cookie, ac))
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5111  		goto restart;
2c4c3e29897d43 Vlastimil Babka        2026-01-06  5112  
0a0337e0d1d134 Michal Hocko           2016-05-20  5113  	if (should_reclaim_retry(gfp_mask, order, ac, alloc_flags,
423b452e1553e3 Vlastimil Babka        2016-10-07  5114  				 did_some_progress > 0, &no_progress_loops))
0a0337e0d1d134 Michal Hocko           2016-05-20  5115  		goto retry;
0a0337e0d1d134 Michal Hocko           2016-05-20  5116  
33c2d21438daea Michal Hocko           2016-05-20  5117  	/*
33c2d21438daea Michal Hocko           2016-05-20  5118  	 * It doesn't make any sense to retry for the compaction if the order-0
33c2d21438daea Michal Hocko           2016-05-20  5119  	 * reclaim is not able to make any progress because the current
33c2d21438daea Michal Hocko           2016-05-20  5120  	 * implementation of the compaction depends on the sufficient amount
33c2d21438daea Michal Hocko           2016-05-20  5121  	 * of free memory (see __compaction_suitable)
33c2d21438daea Michal Hocko           2016-05-20  5122  	 */
803de9000f334b Vlastimil Babka        2024-02-21  5123  	if (did_some_progress > 0 && can_compact &&
ed384eb3a3e121 fujunjie               2026-05-26  5124  	    should_compact_retry(gfp_mask, ac, order, alloc_flags,
a5508cd83f10f6 Vlastimil Babka        2016-07-28  5125  				 compact_result, &compact_priority,
d943649831aba0 Vlastimil Babka        2016-10-07  5126  				 &compaction_retries))
33c2d21438daea Michal Hocko           2016-05-20  5127  		goto retry;
33c2d21438daea Michal Hocko           2016-05-20  5128  
e3aa7df331bca0 Johannes Weiner        2025-03-13  5129  	/* Reclaim/compaction failed to prevent the fallback */
7a95a05f15d570 Johannes Weiner        2025-03-22  5130  	if (defrag_mode && (alloc_flags & ALLOC_NOFRAGMENT)) {
7a95a05f15d570 Johannes Weiner        2025-03-22  5131  		alloc_flags &= ~ALLOC_NOFRAGMENT;
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5132) 		/* Retries went into making blocks, start the fallback afresh */
0043c816649132 Kiryl Shutsemau        2026-10-15  5133  		if (order_defrag_promoted(order, ac)) {
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5134) 			no_progress_loops = 0;
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5135) 			compaction_retries = 0;
67acb3c0518ca6 Kiryl Shutsemau (Meta  2026-10-13  5136) 		}
e3aa7df331bca0 Johannes Weiner        2025-03-13  5137  		goto retry;
e3aa7df331bca0 Johannes Weiner        2025-03-13  5138  	}
902b62810a57ba Vlastimil Babka        2017-07-06  5139  
3d36424b3b5850 Mel Gorman             2022-08-24  5140  	/*
3d36424b3b5850 Mel Gorman             2022-08-24  5141  	 * Deal with possible cpuset update races or zonelist updates to avoid
3d36424b3b5850 Mel Gorman             2022-08-24  5142  	 * a unnecessary OOM kill.
3d36424b3b5850 Mel Gorman             2022-08-24  5143  	 */
0345bc0f314a0e Gregory Price (Meta    2026-10-13  5144) 	if (check_retry_alloc(gfp_mask, cpuset_mems_cookie,
0345bc0f314a0e Gregory Price (Meta    2026-10-13  5145) 			      zonelist_iter_cookie, ac))
3d36424b3b5850 Mel Gorman             2022-08-24  5146  		goto restart;
e47483bca2cc59 Vlastimil Babka        2017-01-24  5147  
9083905a2a13de Johannes Weiner        2015-06-24  5148  	/* Reclaim has failed us, start killing things */
9083905a2a13de Johannes Weiner        2015-06-24  5149  	page = __alloc_pages_may_oom(gfp_mask, order, ac, &did_some_progress);
9083905a2a13de Johannes Weiner        2015-06-24  5150  	if (page)
9083905a2a13de Johannes Weiner        2015-06-24  5151  		goto got_pg;
9083905a2a13de Johannes Weiner        2015-06-24  5152  
9a67f6488eca92 Michal Hocko           2017-02-22  5153  	/* Avoid allocations with no watermarks from looping endlessly */
cd04ae1e2dc8e3 Michal Hocko           2017-09-06  5154  	if (tsk_is_oom_victim(current) &&
8510e69c8efef8 Joonsoo Kim            2020-08-06  5155  	    (alloc_flags & ALLOC_OOM ||
c288983dddf714 Tetsuo Handa           2017-06-02  5156  	     (gfp_mask & __GFP_NOMEMALLOC)))
9a67f6488eca92 Michal Hocko           2017-02-22  5157  		goto nopage;
9a67f6488eca92 Michal Hocko           2017-02-22  5158  
9083905a2a13de Johannes Weiner        2015-06-24  5159  	/* Retry as long as the OOM killer is making progress */
0a0337e0d1d134 Michal Hocko           2016-05-20  5160  	if (did_some_progress) {
0a0337e0d1d134 Michal Hocko           2016-05-20  5161  		no_progress_loops = 0;
9083905a2a13de Johannes Weiner        2015-06-24  5162  		goto retry;
0a0337e0d1d134 Michal Hocko           2016-05-20  5163  	}
9083905a2a13de Johannes Weiner        2015-06-24  5164  
^1da177e4c3f41 Linus Torvalds         2005-04-16  5165  nopage:
3d36424b3b5850 Mel Gorman             2022-08-24  5166  	/*
3d36424b3b5850 Mel Gorman             2022-08-24  5167  	 * Deal with possible cpuset update races or zonelist updates to avoid
3d36424b3b5850 Mel Gorman             2022-08-24  5168  	 * a unnecessary OOM kill.
3d36424b3b5850 Mel Gorman             2022-08-24  5169  	 */
0345bc0f314a0e Gregory Price (Meta    2026-10-13  5170) 	if (check_retry_alloc(gfp_mask, cpuset_mems_cookie,
0345bc0f314a0e Gregory Price (Meta    2026-10-13  5171) 			      zonelist_iter_cookie, ac))
3d36424b3b5850 Mel Gorman             2022-08-24  5172  		goto restart;
5ce9bfef1d2794 Vlastimil Babka        2017-01-24  5173  
9a67f6488eca92 Michal Hocko           2017-02-22  5174  	/*
9a67f6488eca92 Michal Hocko           2017-02-22  5175  	 * Make sure that __GFP_NOFAIL request doesn't leak out and make sure
9a67f6488eca92 Michal Hocko           2017-02-22  5176  	 * we always retry
9a67f6488eca92 Michal Hocko           2017-02-22  5177  	 */
903edea6c53f09 Barry Song             2024-08-31  5178  	if (unlikely(nofail)) {
6372aac4d41fcd Brendan Jackman        2026-07-03  5179  		unsigned int alloc_flags = ac->alloc_flags | ALLOC_MIN_RESERVE;
6372aac4d41fcd Brendan Jackman        2026-07-03  5180  
9a67f6488eca92 Michal Hocko           2017-02-22  5181  		/*
903edea6c53f09 Barry Song             2024-08-31  5182  		 * Lacking direct_reclaim we can't do anything to reclaim memory,
903edea6c53f09 Barry Song             2024-08-31  5183  		 * we disregard these unreasonable nofail requests and still
903edea6c53f09 Barry Song             2024-08-31  5184  		 * return NULL
9a67f6488eca92 Michal Hocko           2017-02-22  5185  		 */
903edea6c53f09 Barry Song             2024-08-31  5186  		if (!can_direct_reclaim)
9a67f6488eca92 Michal Hocko           2017-02-22  5187  			goto fail;
9a67f6488eca92 Michal Hocko           2017-02-22  5188  
6c18ba7a18997d Michal Hocko           2017-02-22  5189  		/*
1ebbb21811b76c Mel Gorman             2023-01-13  5190  		 * Help non-failing allocations by giving some access to memory
1ebbb21811b76c Mel Gorman             2023-01-13  5191  		 * reserves normally used for high priority non-blocking
1ebbb21811b76c Mel Gorman             2023-01-13  5192  		 * allocations but do not use ALLOC_NO_WATERMARKS because this
6c18ba7a18997d Michal Hocko           2017-02-22  5193  		 * could deplete whole memory reserves which would just make
1ebbb21811b76c Mel Gorman             2023-01-13  5194  		 * the situation worse.
6c18ba7a18997d Michal Hocko           2017-02-22  5195  		 */
6372aac4d41fcd Brendan Jackman        2026-07-03  5196  		page = __alloc_pages_cpuset_fallback(gfp_mask, order, alloc_flags, ac);
6c18ba7a18997d Michal Hocko           2017-02-22  5197  		if (page)
6c18ba7a18997d Michal Hocko           2017-02-22  5198  			goto got_pg;
6c18ba7a18997d Michal Hocko           2017-02-22  5199  
9a67f6488eca92 Michal Hocko           2017-02-22  5200  		cond_resched();
9a67f6488eca92 Michal Hocko           2017-02-22  5201  		goto retry;
9a67f6488eca92 Michal Hocko           2017-02-22  5202  	}
9a67f6488eca92 Michal Hocko           2017-02-22  5203  fail:
a8e99259e7e32b Michal Hocko           2017-02-22  5204  	warn_alloc(gfp_mask, ac->nodemask,
7877cdcc3893c1 Michal Hocko           2016-10-07  5205  			"page allocation failure: order:%u", order);
^1da177e4c3f41 Linus Torvalds         2005-04-16  5206  got_pg:
072bb0aa5e0629 Mel Gorman             2012-07-31  5207  	return page;
^1da177e4c3f41 Linus Torvalds         2005-04-16  5208  }
11e33f6a55ed78 Mel Gorman             2009-06-16  5209  

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

only message in thread, other threads:[~2026-10-19  2:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-19  2:32 [gourryinverse:scratch/gourry/managed_nodes/rfc6-numa 35/47] mm/page_alloc.c:4980 __alloc_pages_slowpath() warn: bitwise AND condition is false here kernel test robot

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.