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