From 510a9081a92960b55905952878c91ecc3f652598 Mon Sep 17 00:00:00 2001 From: Salvatore Bonaccorso Date: Fri, 28 Aug 2020 12:51:20 +0200 Subject: [PATCH] [rt] Refresh "Split IRQ-off and zone->lock while freeing pages from PCP list #1" for context changes in 4.19.142 --- debian/changelog | 2 ++ ...d-zone-lock-while-freeing-pages-from.patch | 23 ++++++++----------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7fa6a48ca..e7a83b196 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Tue, 04 Aug 2020 16:33:40 +0200 diff --git a/debian/patches-rt/0072-Split-IRQ-off-and-zone-lock-while-freeing-pages-from.patch b/debian/patches-rt/0072-Split-IRQ-off-and-zone-lock-while-freeing-pages-from.patch index 14a17288c..0070a2d2b 100644 --- a/debian/patches-rt/0072-Split-IRQ-off-and-zone-lock-while-freeing-pages-from.patch +++ b/debian/patches-rt/0072-Split-IRQ-off-and-zone-lock-while-freeing-pages-from.patch @@ -20,11 +20,9 @@ Signed-off-by: Sebastian Andrzej Siewior 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 -