[rt] Refresh "Split IRQ-off and zone->lock while freeing pages from PCP list #1" for context changes in 4.19.142

This commit is contained in:
Salvatore Bonaccorso 2020-08-28 12:51:20 +02:00
parent 2f6b3a464a
commit 510a9081a9
2 changed files with 11 additions and 14 deletions

2
debian/changelog vendored
View File

@ -618,6 +618,8 @@ linux (4.19.142-1) UNRELEASED; urgency=medium
context changes in 4.19.141
* Refresh "net: ena: fix crash during ena_remove()" for context changes in
4.19.142
* [rt] Refresh "Split IRQ-off and zone->lock while freeing pages from PCP
list #1" for context changes in 4.19.142
-- Salvatore Bonaccorso <carnil@debian.org> Tue, 04 Aug 2020 16:33:40 +0200

View File

@ -20,11 +20,9 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
mm/page_alloc.c | 82 +++++++++++++++++++++++++++++++------------------
1 file changed, 52 insertions(+), 30 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 7181dfe76440..bab65ef53eda 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1095,7 +1095,7 @@ static inline void prefetch_buddy(struct page *page)
@@ -1095,7 +1095,7 @@
}
/*
@ -33,7 +31,7 @@ index 7181dfe76440..bab65ef53eda 100644
* Assumes all pages on list are in same zone, and of same order.
* count is the number of pages to free.
*
@@ -1106,14 +1106,41 @@ static inline void prefetch_buddy(struct page *page)
@@ -1106,14 +1106,41 @@
* pinned" detection logic.
*/
static void free_pcppages_bulk(struct zone *zone, int count,
@ -77,9 +75,9 @@ index 7181dfe76440..bab65ef53eda 100644
- LIST_HEAD(head);
+ struct page *page;
while (count) {
struct list_head *list;
@@ -1145,7 +1172,7 @@ static void free_pcppages_bulk(struct zone *zone, int count,
/*
* Ensure proper count is passed which otherwise would stuck in the
@@ -1150,7 +1177,7 @@
if (bulkfree_pcp_prepare(page))
continue;
@ -88,7 +86,7 @@ index 7181dfe76440..bab65ef53eda 100644
/*
* We are going to put the page back to the global
@@ -1160,26 +1187,6 @@ static void free_pcppages_bulk(struct zone *zone, int count,
@@ -1165,26 +1192,6 @@
prefetch_buddy(page);
} while (--count && --batch_free && !list_empty(list));
}
@ -115,7 +113,7 @@ index 7181dfe76440..bab65ef53eda 100644
}
static void free_one_page(struct zone *zone,
@@ -2540,13 +2547,18 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
@@ -2545,13 +2552,18 @@
{
unsigned long flags;
int to_drain, batch;
@ -135,7 +133,7 @@ index 7181dfe76440..bab65ef53eda 100644
}
#endif
@@ -2562,14 +2574,21 @@ static void drain_pages_zone(unsigned int cpu, struct zone *zone)
@@ -2567,14 +2579,21 @@
unsigned long flags;
struct per_cpu_pageset *pset;
struct per_cpu_pages *pcp;
@ -159,7 +157,7 @@ index 7181dfe76440..bab65ef53eda 100644
}
/*
@@ -2791,7 +2810,10 @@ static void free_unref_page_commit(struct page *page, unsigned long pfn)
@@ -2796,7 +2815,10 @@
pcp->count++;
if (pcp->count >= pcp->high) {
unsigned long batch = READ_ONCE(pcp->batch);
@ -171,6 +169,3 @@ index 7181dfe76440..bab65ef53eda 100644
}
}
--
2.17.1