powernv/memtrace: use __GFP_ZERO with alloc_contig_pages()
alloc_contig_pages()->alloc_contig_range() now supports __GFP_ZERO, so let's use that instead to resolve our TODO. Link: https://lkml.kernel.org/r/20241203094732.200195-7-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Vlastimil Babka <vbabka@suse.cz> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Naveen N Rao <naveen@kernel.org> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
7b75557006
commit
1fb4315b0c
@@ -88,26 +88,6 @@ static void flush_dcache_range_chunked(unsigned long start, unsigned long stop,
|
||||
}
|
||||
}
|
||||
|
||||
static void memtrace_clear_range(unsigned long start_pfn,
|
||||
unsigned long nr_pages)
|
||||
{
|
||||
unsigned long pfn;
|
||||
|
||||
/* As HIGHMEM does not apply, use clear_page() directly. */
|
||||
for (pfn = start_pfn; pfn < start_pfn + nr_pages; pfn++) {
|
||||
if (IS_ALIGNED(pfn, PAGES_PER_SECTION))
|
||||
cond_resched();
|
||||
clear_page(__va(PFN_PHYS(pfn)));
|
||||
}
|
||||
/*
|
||||
* Before we go ahead and use this range as cache inhibited range
|
||||
* flush the cache.
|
||||
*/
|
||||
flush_dcache_range_chunked((unsigned long)pfn_to_kaddr(start_pfn),
|
||||
(unsigned long)pfn_to_kaddr(start_pfn + nr_pages),
|
||||
FLUSH_CHUNK_SIZE);
|
||||
}
|
||||
|
||||
static u64 memtrace_alloc_node(u32 nid, u64 size)
|
||||
{
|
||||
const unsigned long nr_pages = PHYS_PFN(size);
|
||||
@@ -119,17 +99,18 @@ static u64 memtrace_alloc_node(u32 nid, u64 size)
|
||||
* by alloc_contig_pages().
|
||||
*/
|
||||
page = alloc_contig_pages(nr_pages, GFP_KERNEL | __GFP_THISNODE |
|
||||
__GFP_NOWARN, nid, NULL);
|
||||
__GFP_NOWARN | __GFP_ZERO, nid, NULL);
|
||||
if (!page)
|
||||
return 0;
|
||||
start_pfn = page_to_pfn(page);
|
||||
|
||||
/*
|
||||
* Clear the range while we still have a linear mapping.
|
||||
*
|
||||
* TODO: use __GFP_ZERO with alloc_contig_pages() once supported.
|
||||
* Before we go ahead and use this range as cache inhibited range
|
||||
* flush the cache.
|
||||
*/
|
||||
memtrace_clear_range(start_pfn, nr_pages);
|
||||
flush_dcache_range_chunked((unsigned long)pfn_to_kaddr(start_pfn),
|
||||
(unsigned long)pfn_to_kaddr(start_pfn + nr_pages),
|
||||
FLUSH_CHUNK_SIZE);
|
||||
|
||||
/*
|
||||
* Set pages PageOffline(), to indicate that nobody (e.g., hibernation,
|
||||
|
||||
Reference in New Issue
Block a user