Hi all,
Today's linux-next merge of the mm-nonmm-unstable tree got a conflict in:
mm/sparse-vmemmap.c
between commit:
4edd70ee6a7d0 ("mm/sparse-vmemmap: flush_cache_vmap() after hotplugging vmemmap")
from the risc-v-fixes tree and commit:
7605044cea4d2 ("riscv: mm: avoid spurious fault after hotplugging vmemmap")
from the mm-nonmm-unstable tree. These appear to be two versions of the
same fix, it looks like one needs to be chosen - I did the conflict
resolution picking based on taste but left the non-conflicting bits of
both changes.
I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging. You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.
diff --combined mm/sparse-vmemmap.c
index 5a2469fb1838c,290cafcfd7230..0000000000000
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@@ -41,8 -41,6 +41,8 @@@
#define VMEMMAP_POPULATE_PAGEREF 0x0001
#include "internal.h"
+#include "mm_init.h"
+#include "sparse.h"
/*
* Allocate a block of memory to be used to back the virtual memory map
@@@ -344,8 -342,8 +344,8 @@@ static __meminit struct page *vmemmap_g
*
* Any initialization done here will be overwritten by memmap_init().
*
- * hugetlb_vmemmap_init() will take care of initialization after
- * memmap_init().
+ * hugetlb_bootmem_struct_page_init() will take care of initialization
+ * after memmap_init().
*/
p = vmemmap_alloc_block_zero(PAGE_SIZE, node);
@@@ -546,6 -544,12 +546,12 @@@ static int __meminit vmemmap_populate_c
#endif
+ #ifndef vmemmap_populate_finalize
+ static void __meminit vmemmap_populate_finalize(void)
+ {
+ }
+ #endif
+
struct page * __meminit __populate_section_memmap(unsigned long pfn,
unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
struct dev_pagemap *pgmap)
@@@ -566,7 -570,7 +572,7 @@@
if (r < 0)
return NULL;
- flush_cache_vmap(start, end);
+ vmemmap_populate_finalize();
return pfn_to_page(pfn);
}
@@@ -583,6 -587,17 +589,6 @@@ void __init sparse_vmemmap_init_nid_ear
{
hugetlb_vmemmap_init_early(nid);
}
-
-/*
- * This is called just before the initialization of page structures
- * through memmap_init. Zones are now initialized, so any work that
- * needs to be done that needs zone information can be done from
- * here.
- */
-void __init sparse_vmemmap_init_nid_late(int nid)
-{
- hugetlb_vmemmap_init_late(nid);
-}
#endif
static void subsection_mask_set(unsigned long *map, unsigned long pfn,
@@@ -594,7 -609,7 +600,7 @@@
bitmap_set(map, idx, end - idx + 1);
}
-void __init sparse_init_subsection_map(unsigned long pfn, unsigned long nr_pages)
+static void __init sparse_init_subsection_map_range(unsigned long pfn, unsigned long nr_pages)
{
int end_sec_nr = pfn_to_section_nr(pfn + nr_pages - 1);
unsigned long nr, start_sec_nr = pfn_to_section_nr(pfn);
@@@ -617,15 -632,6 +623,15 @@@
}
}
+void __init sparse_init_subsection_map(void)
+{
+ int i, nid;
+ unsigned long start, end;
+
+ for_each_mem_pfn_range(i, MAX_NUMNODES, &start, &end, &nid)
+ sparse_init_subsection_map_range(start, end - start);
+}
+
#ifdef CONFIG_MEMORY_HOTPLUG
/* Mark all memory sections within the pfn range as online */
On Tue, 14 Jul 2026 12:47:57 +0100 Mark Brown <broonie@kernel.org> wrote:
> Today's linux-next merge of the mm-nonmm-unstable tree got a conflict in:
>
> mm/sparse-vmemmap.c
>
> between commit:
>
> 4edd70ee6a7d0 ("mm/sparse-vmemmap: flush_cache_vmap() after hotplugging vmemmap")
>
> from the risc-v-fixes tree and commit:
>
> 7605044cea4d2 ("riscv: mm: avoid spurious fault after hotplugging vmemmap")
>
> from the mm-nonmm-unstable tree. These appear to be two versions of the
> same fix, it looks like one needs to be chosen - I did the conflict
> resolution picking based on taste but left the non-conflicting bits of
> both changes.
OK, thanks. I'll remove "riscv: mm: avoid spurious fault after
hotplugging vmemmap" from mm.git.
© 2016 - 2026 Red Hat, Inc.