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

From: Anshuman Khandual
Date: Thu May 19 2022 - 01:16:43 EST



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@xxxxxxxxxx>

Reviewed-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>

> ---
> .../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)
> {