Message ID | 20210729062417.157133-1-wangkefeng.wang@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | riscv: Add support to allocate gigantic hugepages using CMA | expand |
Hi Kefeng, Le 29/07/2021 à 08:24, Kefeng Wang a écrit : > The RV32 only has at most 1GB memory(MAXPHYSMEM_1GB), so let's > disable HUGETLBFS on RV32. There is only one size of hugepages for RV32 which is 4MB, there isn't any gigantic hugepage of 1GB: there are only 2 levels of page table, a PGDIR represents 4MB and this is the only way to have a hugepage on RV32. So I think we should leave hugetlbfs available on RV32. Thanks, Alex > And add support to allocate gigantic > hugepages using CMA by specifying the hugetlb_cma= kernel parameter. > > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > --- > arch/riscv/Kconfig | 2 +- > arch/riscv/mm/init.c | 2 ++ > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index 8fcceb8eda07..20a589605307 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -33,7 +33,7 @@ config RISCV > select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX > select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT > - select ARCH_SUPPORTS_HUGETLBFS if MMU > + select ARCH_SUPPORTS_HUGETLBFS if MMU && 64BIT > select ARCH_USE_MEMTEST > select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU > select ARCH_WANT_FRAME_POINTERS > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index a14bf3910eec..f2268402894b 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -19,6 +19,7 @@ > #include <linux/set_memory.h> > #include <linux/dma-map-ops.h> > #include <linux/crash_dump.h> > +#include <linux/hugetlb.h> > > #include <asm/fixmap.h> > #include <asm/tlbflush.h> > @@ -216,6 +217,7 @@ static void __init setup_bootmem(void) > > early_init_fdt_scan_reserved_mem(); > dma_contiguous_reserve(dma32_phys_limit); > + hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT); > memblock_allow_resize(); > } > >
On 2021/7/29 22:32, Alex Ghiti wrote: > Hi Kefeng, > > Le 29/07/2021 à 08:24, Kefeng Wang a écrit : >> The RV32 only has at most 1GB memory(MAXPHYSMEM_1GB), so let's >> disable HUGETLBFS on RV32. > > There is only one size of hugepages for RV32 which is 4MB, there isn't > any gigantic hugepage of 1GB: there are only 2 levels of page table, a > PGDIR represents 4MB and this is the only way to have a hugepage on > RV32. So I think we should leave hugetlbfs available on RV32. OK, will update, thanks. > > Thanks, > > Alex > >> And add support to allocate gigantic >> hugepages using CMA by specifying the hugetlb_cma= kernel parameter. >> >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> >> --- >> arch/riscv/Kconfig | 2 +- >> arch/riscv/mm/init.c | 2 ++ >> 2 files changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig >> index 8fcceb8eda07..20a589605307 100644 >> --- a/arch/riscv/Kconfig >> +++ b/arch/riscv/Kconfig >> @@ -33,7 +33,7 @@ config RISCV >> select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST >> select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX >> select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT >> - select ARCH_SUPPORTS_HUGETLBFS if MMU >> + select ARCH_SUPPORTS_HUGETLBFS if MMU && 64BIT >> select ARCH_USE_MEMTEST >> select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU >> select ARCH_WANT_FRAME_POINTERS >> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c >> index a14bf3910eec..f2268402894b 100644 >> --- a/arch/riscv/mm/init.c >> +++ b/arch/riscv/mm/init.c >> @@ -19,6 +19,7 @@ >> #include <linux/set_memory.h> >> #include <linux/dma-map-ops.h> >> #include <linux/crash_dump.h> >> +#include <linux/hugetlb.h> >> #include <asm/fixmap.h> >> #include <asm/tlbflush.h> >> @@ -216,6 +217,7 @@ static void __init setup_bootmem(void) >> early_init_fdt_scan_reserved_mem(); >> dma_contiguous_reserve(dma32_phys_limit); >> + hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT); >> memblock_allow_resize(); >> } >> > . >
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 8fcceb8eda07..20a589605307 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -33,7 +33,7 @@ config RISCV select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT - select ARCH_SUPPORTS_HUGETLBFS if MMU + select ARCH_SUPPORTS_HUGETLBFS if MMU && 64BIT select ARCH_USE_MEMTEST select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU select ARCH_WANT_FRAME_POINTERS diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index a14bf3910eec..f2268402894b 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -19,6 +19,7 @@ #include <linux/set_memory.h> #include <linux/dma-map-ops.h> #include <linux/crash_dump.h> +#include <linux/hugetlb.h> #include <asm/fixmap.h> #include <asm/tlbflush.h> @@ -216,6 +217,7 @@ static void __init setup_bootmem(void) early_init_fdt_scan_reserved_mem(); dma_contiguous_reserve(dma32_phys_limit); + hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT); memblock_allow_resize(); }
The RV32 only has at most 1GB memory(MAXPHYSMEM_1GB), so let's disable HUGETLBFS on RV32. And add support to allocate gigantic hugepages using CMA by specifying the hugetlb_cma= kernel parameter. Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> --- arch/riscv/Kconfig | 2 +- arch/riscv/mm/init.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)