Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions arch/riscv/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1385,6 +1385,12 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
*/
return vmemmap_populate_hugepages(start, end, node, altmap);
}

void __meminit vmemmap_populate_finalize(void)
{
/* Avoid faults on cached non-present TLB entries. */
mark_new_valid_map();
}
#endif

#if defined(CONFIG_MMU) && defined(CONFIG_64BIT)
Expand Down
1 change: 1 addition & 0 deletions include/linux/mm.h
Original file line number Diff line number Diff line change
Expand Up @@ -4882,6 +4882,7 @@ int vmemmap_populate_hugepages(unsigned long start, unsigned long end,
int node, struct vmem_altmap *altmap);
int vmemmap_populate(unsigned long start, unsigned long end, int node,
struct vmem_altmap *altmap);
void vmemmap_populate_finalize(void);
int vmemmap_populate_hvo(unsigned long start, unsigned long end,
unsigned int order, struct zone *zone,
unsigned long headsize);
Expand Down
6 changes: 6 additions & 0 deletions mm/sparse-vmemmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,10 @@ static int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn,

#endif

void __weak __meminit vmemmap_populate_finalize(void)
{
}

struct page * __meminit __populate_section_memmap(unsigned long pfn,
unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
struct dev_pagemap *pgmap)
Expand All @@ -561,6 +565,8 @@ struct page * __meminit __populate_section_memmap(unsigned long pfn,
else
r = vmemmap_populate(start, end, nid, altmap);

vmemmap_populate_finalize();

if (r < 0)
return NULL;

Expand Down
Loading