Skip to contentSkip to conversation

FAILED: patch "[PATCH] mm/page_alloc: fix memory accept before watermarks gets" failed to apply to 6.6-stable tree

PATCH In review [email protected] 3 participants 4 messages Mar 24, 2025 – Mar 26, 2025

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

To reproduce the conflict and resubmit, you may use the following commands:

git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 800f1059c99e2b39899bdc67a7593a7bea6375d8
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025032417-prior-uncooked-bf1f@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..

Possible dependencies:

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 800f1059c99e2b39899bdc67a7593a7bea6375d8 Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <[email protected]>
Date: Mon, 10 Mar 2025 10:28:55 +0200
Subject: [PATCH] mm/page_alloc: fix memory accept before watermarks gets
initialized

Watermarks are initialized during the postcore initcall. Until then, all watermarks are set to zero. This causes cond_accept_memory() to incorrectly skip memory acceptance because a watermark of 0 is always met.

This can lead to a premature OOM on boot.

To ensure progress, accept one MAX_ORDER page if the watermark is zero.

Fixes dcdfdd40fa82 ("mm: Add support for unaccepted memory")
Cc Ashish Kalra <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc "Edgecombe, Rick P" <[email protected]>
Cc Mel Gorman <[email protected]>
Cc "Mike Rapoport (IBM)" <[email protected]>
Cc Thomas Lendacky <[email protected]>
Cc <[email protected]> [6.5+]
mm/page_alloc.c +12 -2
index 94917c729120..542d25f77be8 100644
@@ -7004,7 +7004,7 @@ static inline bool has_unaccepted_memory(void)
 
 static bool cond_accept_memory(struct zone *zone, unsigned int order)
 {
-	long to_accept;
+	long to_accept, wmark;
 	bool ret = false;
 
 	if (!has_unaccepted_memory())
@@ -7013,8 +7013,18 @@ static bool cond_accept_memory(struct zone *zone, unsigned int order)
 	if (list_empty(&zone->unaccepted_pages))
 		return false;
 
+	wmark = promo_wmark_pages(zone);
+
+	/*
+	 * Watermarks have not been initialized yet.
+	 *
+	 * Accepting one MAX_ORDER page to ensure progress.
+	 */
+	if (!wmark)
+		return try_to_accept_memory_one(zone);
+
 	/* How much to accept to get to promo watermark? */
-	to_accept = promo_wmark_pages(zone) -
+	to_accept = wmark -
 		    (zone_page_state(zone, NR_FREE_PAGES) -
 		    __zone_watermark_unusable_free(zone, order, 0) -
 		    zone_page_state(zone, NR_UNACCEPTED));
#1 lore raw

PATCH 1/1 mm/page_alloc: fix memory accept before watermarks gets initialized

Watermarks are initialized during the postcore initcall. Until then, all watermarks are set to zero. This causes cond_accept_memory() to incorrectly skip memory acceptance because a watermark of 0 is always met.

This can lead to a premature OOM on boot.

To ensure progress, accept one MAX_ORDER page if the watermark is zero.

Fixes dcdfdd40fa82 ("mm: Add support for unaccepted memory")
Cc Ashish Kalra <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc "Edgecombe, Rick P" <[email protected]>
Cc Mel Gorman <[email protected]>
Cc "Mike Rapoport (IBM)" <[email protected]>
Cc Thomas Lendacky <[email protected]>
Cc <[email protected]> [6.5+]
(cherry picked from commit 800f1059c99e2b39899bdc67a7593a7bea6375d8)
---
 mm/page_alloc.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
mm/page_alloc.c +12 -2
index 191f0f95d3ed..bc62bb2a3b13 100644
@@ -6653,7 +6653,7 @@ static bool try_to_accept_memory_one(struct zone *zone)
 
 static bool cond_accept_memory(struct zone *zone, unsigned int order)
 {
-	long to_accept;
+	long to_accept, wmark;
 	bool ret = false;
 
 	if (!has_unaccepted_memory())
@@ -6662,8 +6662,18 @@ static bool cond_accept_memory(struct zone *zone, unsigned int order)
 	if (list_empty(&zone->unaccepted_pages))
 		return false;
 
+	wmark = high_wmark_pages(zone);
+
+	/*
+	 * Watermarks have not been initialized yet.
+	 *
+	 * Accepting one MAX_ORDER page to ensure progress.
+	 */
+	if (!wmark)
+		return try_to_accept_memory_one(zone);
+
 	/* How much to accept to get to high watermark? */
-	to_accept = high_wmark_pages(zone) -
+	to_accept = wmark -
 		    (zone_page_state(zone, NR_FREE_PAGES) -
 		    __zone_watermark_unusable_free(zone, order, 0) -
 		    zone_page_state(zone, NR_UNACCEPTED));
Signature · 1 line
2.47.2
maintainer
#2 lore raw

Re: [PATCH 6.6.y] mm/page_alloc: fix memory accept before watermarks gets initialized

[ Sasha's backport helper bot ]

Hi,

Summary of potential issues:
⚠️ Found matching upstream commit but patch is missing proper reference to it

Found matching upstream commit: 800f1059c99e2b39899bdc67a7593a7bea6375d8

Status in newer kernel trees:
6.13.y | Present (different SHA1: 18c31f7ee240)
6.12.y | Present (different SHA1: f4bc2f91e6f5)

Note: The patch differs from the upstream commit:
---
1: 800f1059c99e2 ! 1: 48ab092457a25 mm/page_alloc: fix memory accept before watermarks gets initialized
@@ Commit message

Cc Thomas Lendacky <[email protected]>
Cc <[email protected]> [6.5+]

+ (cherry picked from commit 800f1059c99e2b39899bdc67a7593a7bea6375d8)
+ Signed-off-by: Kirill A. Shutemov <[email protected]>

## mm/page_alloc.c ##
-@@ mm/page_alloc.c: static inline bool has_unaccepted_memory(void) +@@ mm/page_alloc.c: static bool try_to_accept_memory_one(struct zone *zone)

static bool cond_accept_memory(struct zone *zone, unsigned int order) {
@@ mm/page_alloc.c: static bool cond_accept_memory(struct zone *zone, unsigned int
if (list_empty(&zone->unaccepted_pages))
return false;

-+ wmark = promo_wmark_pages(zone);
++ wmark = high_wmark_pages(zone);
+
+ /*
+ * Watermarks have not been initialized yet.
@@ mm/page_alloc.c: static bool cond_accept_memory(struct zone *zone, unsigned int
+ if (!wmark)
+ return try_to_accept_memory_one(zone);
+
- /* How much to accept to get to promo watermark? */
-- to_accept = promo_wmark_pages(zone) -
+ /* How much to accept to get to high watermark? */
+- to_accept = high_wmark_pages(zone) -
+ to_accept = wmark -
(zone_page_state(zone, NR_FREE_PAGES) - __zone_watermark_unusable_free(zone, order, 0) -
---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.6.y        |  Success    |  Success   |
#3 lore raw

Re: [PATCH 6.6.y] mm/page_alloc: fix memory accept before watermarks gets initialized

Quoted 7 lines · Sasha Levin

[ Sasha's backport helper bot ]

Hi,

Summary of potential issues:
⚠️ Found matching upstream commit but patch is missing proper reference to it

Quoted 7 lines

Found matching upstream commit: 800f1059c99e2b39899bdc67a7593a7bea6375d8

Status in newer kernel trees:
6.13.y | Present (different SHA1: 18c31f7ee240)
6.12.y | Present (different SHA1: f4bc2f91e6f5)

Note: The patch differs from the upstream commit:

That's okay. Stable tree doesn't include 59149bf8cea9 ("mm: accept to promo watermark")

Signature · 1 line
  Kiryl Shutsemau / Kirill A. Shutemov