On Sat, Nov 07, 2026 at 12:31:20PM +0800, Muchun Song wrote: >LoongArch selects ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP but not >ARCH_WANT_OPTIMIZE_DAX_VMEMMAP. Its vmemmap_free() implementation is also >empty, so it cannot tear down optimized Device DAX mappings. > >A later change removes the generic Device DAX architecture gate and lets >vmemmap_populate() decide whether a section can use optimization. Clear the >section compound order in the LoongArch path so Device DAX keeps using >unoptimized mappings. > >This does not affect HugeTLB HVO: LoongArch does not support gigantic >pages, so HugeTLB does not use section-based vmemmap optimization there. > >Signed-off-by: Muchun Song <[email protected]> >--- >v2: >- New patch using section_vmemmap_optimization_disable() to keep Device > DAX vmemmap optimization disabled on LoongArch (reported by Sashiko) >--- > arch/loongarch/mm/init.c | 2 ++ > 1 file changed, 2 insertions(+) > >diff --git a/arch/loongarch/mm/init.c b/arch/loongarch/mm/init.c >index f801f7097f03..ea769e479241 100644 >--- a/arch/loongarch/mm/init.c >+++ b/arch/loongarch/mm/init.c >@@ -15,6 +15,7 @@ > #include <linux/memblock.h> > #include <linux/memremap.h> > #include <linux/mm.h> >+#include <linux/vmemmap-optimization.h> > #include <linux/mman.h> > #include <linux/highmem.h> > #include <linux/swap.h> >@@ -143,6 +144,7 @@ void __meminit vmemmap_set_pmd(pmd_t *pmd, void *p, int >node, > int __meminit vmemmap_populate(unsigned long start, unsigned long end, > int node, struct vmem_altmap *altmap) > { >+ section_vmemmap_optimization_disable(start, end);
Yeah, clearing the order here keeps Device DAX optimization disabled once the generic gate goes away ;) Nothing jumped out at me, feel free to add: Reviewed-by: Lance Yang <[email protected]>
