diff mbox series

riscv: Add support to allocate gigantic hugepages using CMA

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

Commit Message

Kefeng Wang July 29, 2021, 6:24 a.m. UTC
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(-)

Comments

Alexandre Ghiti July 29, 2021, 2:32 p.m. UTC | #1
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();
>   }
>   
>
Kefeng Wang July 30, 2021, 12:58 a.m. UTC | #2
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 mbox series

Patch

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();
 }