Message ID | 20200624094741.9918-2-david@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | [v3,1/3] mm/shuffle: don't move pages between zones and don't read garbage memmaps | expand |
On 01.07.20 21:33, Sasha Levin wrote: > Hi > > [This is an automated email] > > This commit has been processed because it contains a "Fixes:" tag > fixing commit: e900a918b098 ("mm: shuffle initial free memory to improve memory-side-cache utilization"). > > The bot has tested the following trees: v5.7.6, v5.4.49. > > v5.7.6: Build OK! > v5.4.49: Failed to apply! Possible dependencies: > e03d1f78341e8 ("mm/sparse: rename pfn_present() to pfn_in_present_section()") > > > NOTE: The patch will not be queued to stable trees until it is upstream. > > How should we proceed with this patch? > It contains Cc: <stable@vger.kernel.org> [5.2+] so a stable backport is desired once upstream. The v5.4.49 backport should be fairly easy. -- Thanks, David / dhildenb
Hi [This is an automated email] This commit has been processed because it contains a "Fixes:" tag fixing commit: e900a918b098 ("mm: shuffle initial free memory to improve memory-side-cache utilization"). The bot has tested the following trees: v5.7.6, v5.4.49. v5.7.6: Build OK! v5.4.49: Failed to apply! Possible dependencies: e03d1f78341e8 ("mm/sparse: rename pfn_present() to pfn_in_present_section()") NOTE: The patch will not be queued to stable trees until it is upstream. How should we proceed with this patch? -- Thanks Sasha
diff --git a/mm/shuffle.c b/mm/shuffle.c index 44406d9977c77..dd13ab851b3ee 100644 --- a/mm/shuffle.c +++ b/mm/shuffle.c @@ -58,25 +58,25 @@ module_param_call(shuffle, shuffle_store, shuffle_show, &shuffle_param, 0400); * For two pages to be swapped in the shuffle, they must be free (on a * 'free_area' lru), have the same order, and have the same migratetype. */ -static struct page * __meminit shuffle_valid_page(unsigned long pfn, int order) +static struct page * __meminit shuffle_valid_page(struct zone *zone, + unsigned long pfn, int order) { - struct page *page; + struct page *page = pfn_to_online_page(pfn); /* * Given we're dealing with randomly selected pfns in a zone we * need to ask questions like... */ - /* ...is the pfn even in the memmap? */ - if (!pfn_valid_within(pfn)) + /* ... is the page managed by the buddy? */ + if (!page) return NULL; - /* ...is the pfn in a present section or a hole? */ - if (!pfn_in_present_section(pfn)) + /* ... is the page assigned to the same zone? */ + if (page_zone(page) != zone) return NULL; /* ...is the page free and currently on a free_area list? */ - page = pfn_to_page(pfn); if (!PageBuddy(page)) return NULL; @@ -123,7 +123,7 @@ void __meminit __shuffle_zone(struct zone *z) * page_j randomly selected in the span @zone_start_pfn to * @spanned_pages. */ - page_i = shuffle_valid_page(i, order); + page_i = shuffle_valid_page(z, i, order); if (!page_i) continue; @@ -137,7 +137,7 @@ void __meminit __shuffle_zone(struct zone *z) j = z->zone_start_pfn + ALIGN_DOWN(get_random_long() % z->spanned_pages, order_pages); - page_j = shuffle_valid_page(j, order); + page_j = shuffle_valid_page(z, j, order); if (page_j && page_j != page_i) break; }