[PATCH v2 5/5] arm64: Add HAVE_IOREMAP_PROT support

Anshuman Khandual anshuman.khandual at arm.com
Wed May 18 22:06:33 PDT 2022


On 4/29/22 16:02, Kefeng Wang wrote:
> With ioremap_prot() defination from generic ioremap, also move

s/defination/definition  ^^^^

> pte_pgprot() from hugetlbpage.c into pgtable.h, then arm64 could
> have HAVE_IOREMAP_PROT, which will enable generic_access_phys()
> code.
> 
> Signed-off-by: Kefeng Wang <wangkefeng.wang at huawei.com>

Reviewed-by: Anshuman Khandual <anshuman.khandual at arm.com>

> ---
>  .../features/vm/ioremap_prot/arch-support.txt          |  2 +-
>  arch/arm64/Kconfig                                     |  1 +
>  arch/arm64/include/asm/pgtable.h                       | 10 ++++++++++
>  arch/arm64/mm/hugetlbpage.c                            | 10 ----------
>  4 files changed, 12 insertions(+), 11 deletions(-)
> 
> diff --git a/Documentation/features/vm/ioremap_prot/arch-support.txt b/Documentation/features/vm/ioremap_prot/arch-support.txt
> index a6dcbe5f47b6..b39ad5d61216 100644
> --- a/Documentation/features/vm/ioremap_prot/arch-support.txt
> +++ b/Documentation/features/vm/ioremap_prot/arch-support.txt
> @@ -9,7 +9,7 @@
>      |       alpha: | TODO |
>      |         arc: |  ok  |
>      |         arm: | TODO |
> -    |       arm64: | TODO |
> +    |       arm64: |  ok  |
>      |        csky: | TODO |
>      |       h8300: | TODO |
>      |     hexagon: | TODO |
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 56673209fdb9..5e5889049af0 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -186,6 +186,7 @@ config ARM64
>  	select HAVE_FUNCTION_GRAPH_TRACER
>  	select HAVE_GCC_PLUGINS
>  	select HAVE_HW_BREAKPOINT if PERF_EVENTS
> +	select HAVE_IOREMAP_PROT
>  	select HAVE_IRQ_TIME_ACCOUNTING
>  	select HAVE_KVM
>  	select HAVE_NMI
> diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> index dff2b483ea50..1402a2739024 100644
> --- a/arch/arm64/include/asm/pgtable.h
> +++ b/arch/arm64/include/asm/pgtable.h
> @@ -402,6 +402,16 @@ static inline pgprot_t mk_pmd_sect_prot(pgprot_t prot)
>  	return __pgprot((pgprot_val(prot) & ~PMD_TABLE_BIT) | PMD_TYPE_SECT);
>  }
>  
> +/*
> + * Select all bits except the pfn
> + */
> +static inline pgprot_t pte_pgprot(pte_t pte)
> +{
> +	unsigned long pfn = pte_pfn(pte);
> +
> +	return __pgprot(pte_val(pfn_pte(pfn, __pgprot(0))) ^ pte_val(pte));
> +}
> +
>  #ifdef CONFIG_NUMA_BALANCING
>  /*
>   * See the comment in include/linux/pgtable.h
> diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
> index cbace1c9e137..38d03406f6aa 100644
> --- a/arch/arm64/mm/hugetlbpage.c
> +++ b/arch/arm64/mm/hugetlbpage.c
> @@ -100,16 +100,6 @@ int pud_huge(pud_t pud)
>  #endif
>  }
>  
> -/*
> - * Select all bits except the pfn
> - */
> -static inline pgprot_t pte_pgprot(pte_t pte)
> -{
> -	unsigned long pfn = pte_pfn(pte);
> -
> -	return __pgprot(pte_val(pfn_pte(pfn, __pgprot(0))) ^ pte_val(pte));
> -}
> -
>  static int find_num_contig(struct mm_struct *mm, unsigned long addr,
>  			   pte_t *ptep, size_t *pgsize)
>  {



More information about the linux-arm-kernel mailing list