Message ID | 20210414085915.301189-9-aneesh.kumar@linux.ibm.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | Speedup mremap on ppc64 | expand |
Related | show |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (d02429becbe77bc4d27a7357afaf28f9294945bb) |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 50 lines checked |
snowpatch_ozlabs/needsstable | success | Patch has no Fixes tags |
"Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> writes: > Architectures like ppc64 support faster mremap only with radix > translation. Hence allow a runtime check w.r.t support for fast mremap. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > arch/powerpc/include/asm/tlb.h | 6 ++++++ > mm/mremap.c | 15 ++++++++++++++- > 2 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h > index 160422a439aa..058918a7cd3c 100644 > --- a/arch/powerpc/include/asm/tlb.h > +++ b/arch/powerpc/include/asm/tlb.h > @@ -83,5 +83,11 @@ static inline int mm_is_thread_local(struct mm_struct *mm) > } > #endif > > +#define arch_supports_page_tables_move arch_supports_page_tables_move > +static inline bool arch_supports_page_tables_move(void) > +{ > + return radix_enabled(); > +} Not sure it's worth a respin on its own, but page table*s* move is slightly strange phrasing. arch_supports_move_page_tables() or arch_supports_page_table_move() would be more typical. cheers
On 4/20/21 9:22 AM, Michael Ellerman wrote: > "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> writes: >> Architectures like ppc64 support faster mremap only with radix >> translation. Hence allow a runtime check w.r.t support for fast mremap. >> >> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> >> --- >> arch/powerpc/include/asm/tlb.h | 6 ++++++ >> mm/mremap.c | 15 ++++++++++++++- >> 2 files changed, 20 insertions(+), 1 deletion(-) >> >> diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h >> index 160422a439aa..058918a7cd3c 100644 >> --- a/arch/powerpc/include/asm/tlb.h >> +++ b/arch/powerpc/include/asm/tlb.h >> @@ -83,5 +83,11 @@ static inline int mm_is_thread_local(struct mm_struct *mm) >> } >> #endif >> >> +#define arch_supports_page_tables_move arch_supports_page_tables_move >> +static inline bool arch_supports_page_tables_move(void) >> +{ >> + return radix_enabled(); >> +} > > Not sure it's worth a respin on its own, but page table*s* move is > slightly strange phrasing. > > arch_supports_move_page_tables() or arch_supports_page_table_move() > would be more typical. > I will switch to arch_supports_page_table_move() -aneesh
diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h index 160422a439aa..058918a7cd3c 100644 --- a/arch/powerpc/include/asm/tlb.h +++ b/arch/powerpc/include/asm/tlb.h @@ -83,5 +83,11 @@ static inline int mm_is_thread_local(struct mm_struct *mm) } #endif +#define arch_supports_page_tables_move arch_supports_page_tables_move +static inline bool arch_supports_page_tables_move(void) +{ + return radix_enabled(); +} + #endif /* __KERNEL__ */ #endif /* __ASM_POWERPC_TLB_H */ diff --git a/mm/mremap.c b/mm/mremap.c index 7ac1df8e6d51..6922e161928c 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -25,7 +25,7 @@ #include <linux/userfaultfd_k.h> #include <asm/cacheflush.h> -#include <asm/tlbflush.h> +#include <asm/tlb.h> #include <asm/pgalloc.h> #include "internal.h" @@ -221,6 +221,15 @@ static inline void flush_pte_tlb_pwc_range(struct vm_area_struct *vma, } #endif +#ifndef arch_supports_page_tables_move +#define arch_supports_page_tables_move arch_supports_page_tables_move +static inline bool arch_supports_page_tables_move(void) +{ + return IS_ENABLED(CONFIG_HAVE_MOVE_PMD) || + IS_ENABLED(CONFIG_HAVE_MOVE_PUD); +} +#endif + #ifdef CONFIG_HAVE_MOVE_PMD static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr, unsigned long new_addr, pmd_t *old_pmd, pmd_t *new_pmd) @@ -229,6 +238,8 @@ static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr, struct mm_struct *mm = vma->vm_mm; pmd_t pmd; + if (!arch_supports_page_tables_move()) + return false; /* * The destination pmd shouldn't be established, free_pgtables() * should have released it. @@ -295,6 +306,8 @@ static bool move_normal_pud(struct vm_area_struct *vma, unsigned long old_addr, struct mm_struct *mm = vma->vm_mm; pud_t pud; + if (!arch_supports_page_tables_move()) + return false; /* * The destination pud shouldn't be established, free_pgtables() * should have released it.
Architectures like ppc64 support faster mremap only with radix translation. Hence allow a runtime check w.r.t support for fast mremap. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> --- arch/powerpc/include/asm/tlb.h | 6 ++++++ mm/mremap.c | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-)