arch/riscv/mm/init.c | 2 ++ 1 file changed, 2 insertions(+)
Commit ff172d4818ad ("riscv: Use hugepage mappings for vmemmap") broke XIP
kernel, because huge pages are not supported on XIP kernel.
Only use hugepage mapping if it is supported.
Fixes: ff172d4818ad ("riscv: Use hugepage mappings for vmemmap")
Signed-off-by: Nam Cao <namcao@linutronix.de>
Cc: Alexandre Ghiti <alexghiti@rivosinc.com>
Cc: <stable@vger.kernel.org>
---
arch/riscv/mm/init.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index 968761843203..c081e7d349b1 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -1414,6 +1414,8 @@ int __meminit vmemmap_check_pmd(pmd_t *pmdp, int node,
int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
struct vmem_altmap *altmap)
{
+ if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP))
+ return vmemmap_populate_basepages(start, end, node, NULL);
/*
* Note that SPARSEMEM_VMEMMAP is only selected for rv64 and that we
* can't use hugepage mappings for 2-level page table because in case of
--
2.39.2
Hi Nam, On 08/05/2024 19:31, Nam Cao wrote: > Commit ff172d4818ad ("riscv: Use hugepage mappings for vmemmap") broke XIP > kernel, because huge pages are not supported on XIP kernel. I don't understand why XIP kernels can't support huge vmalloc mappings, so I think the right fix would be to enable such mappings on XIP. WDYT? Thanks, Alex > > Only use hugepage mapping if it is supported. > > Fixes: ff172d4818ad ("riscv: Use hugepage mappings for vmemmap") > Signed-off-by: Nam Cao <namcao@linutronix.de> > Cc: Alexandre Ghiti <alexghiti@rivosinc.com> > Cc: <stable@vger.kernel.org> > --- > arch/riscv/mm/init.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index 968761843203..c081e7d349b1 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -1414,6 +1414,8 @@ int __meminit vmemmap_check_pmd(pmd_t *pmdp, int node, > int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, > struct vmem_altmap *altmap) > { > + if (!IS_ENABLED(CONFIG_HAVE_ARCH_HUGE_VMAP)) > + return vmemmap_populate_basepages(start, end, node, NULL); > /* > * Note that SPARSEMEM_VMEMMAP is only selected for rv64 and that we > * can't use hugepage mappings for 2-level page table because in case of
On Wed, May 08, 2024 at 08:22:43PM +0200, Alexandre Ghiti wrote: > Hi Nam, Hi Alex, > > Commit ff172d4818ad ("riscv: Use hugepage mappings for vmemmap") broke XIP > > kernel, because huge pages are not supported on XIP kernel. > > I don't understand why XIP kernels can't support huge vmalloc mappings, Me neither. > so I > think the right fix would be to enable such mappings on XIP. WDYT? I agree that is the ideal solution. But I don't want to send any new feature to the stable trees (stable folks may even reject such patch). So I intend that to be in another patch. Best regards, Nam
© 2016 - 2024 Red Hat, Inc.