[PATCH] riscv: mm: Enable PMD split page table lock for RV64

Alex Ghiti alex at ghiti.fr
Thu Aug 5 04:51:20 PDT 2021


Hi Kefeng,

On 30/07/2021 15:11, Kefeng Wang wrote:
> After commit 1355c31eeb7e ("asm-generic: pgalloc: provide generic
> pmd_alloc_one() and pmd_free_one()"), it is easy to enable
> ARCH_ENABLE_SPLIT_PMD_PTLOCK for RV64.
> 
> Signed-off-by: Kefeng Wang <wangkefeng.wang at huawei.com>
> ---
>   arch/riscv/Kconfig   | 1 +
>   arch/riscv/mm/init.c | 3 ++-
>   2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 8fcceb8eda07..c3e456fc7108 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -12,6 +12,7 @@ config 32BIT
>   
>   config RISCV
>   	def_bool y
> +	select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
>   	select ARCH_CLOCKSOURCE_INIT
>   	select ARCH_SUPPORTS_ATOMIC_RMW
>   	select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU
> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
> index e547e53cddd2..ce12905a0224 100644
> --- a/arch/riscv/mm/init.c
> +++ b/arch/riscv/mm/init.c
> @@ -361,7 +361,8 @@ static phys_addr_t __init alloc_pmd_late(uintptr_t va)
>   	unsigned long vaddr;
>   
>   	vaddr = __get_free_page(GFP_KERNEL);
> -	BUG_ON(!vaddr);
> +	BUG_ON(!vaddr || !pgtable_pmd_page_ctor(virt_to_page(vaddr)));
> +
>   	return __pa(vaddr);
>   }
>   
> 

I took the time to check how the page table lock works, and indeed, the 
commit you mention makes it easy to enable this feature since the 
initialization of the lock for the general case is done there and your 
patch seems correct as this is the only place we allocate a PMD page, 
and the PTE page allocation already calls pgtable_pte_page_ctor.

Maybe your commit message would need some of the explanation I gave 
above, or something similar, but this is up to you.

You can add:

Reviewed-by: Alexandre Ghiti <alex at ghiti.fr>

Thanks,

Alex



More information about the linux-riscv mailing list