Message ID | 20210330060752.592769-6-aneesh.kumar@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Speedup mremap on ppc64 | expand |
Hi "Aneesh,
I love your patch! Yet something to improve:
[auto build test ERROR on powerpc/next]
[also build test ERROR on kselftest/next v5.12-rc5 next-20210330]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Aneesh-Kumar-K-V/Speedup-mremap-on-ppc64/20210330-141025
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: powerpc-ps3_defconfig (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/ae3b5c3343e8fd4ca3ef4e3c606d83f017d05588
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Aneesh-Kumar-K-V/Speedup-mremap-on-ppc64/20210330-141025
git checkout ae3b5c3343e8fd4ca3ef4e3c606d83f017d05588
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> arch/powerpc/mm/book3s64/radix_tlb.c:1252:6: error: no previous prototype for 'radix__flush_tlb_range_psize' [-Werror=missing-prototypes]
1252 | void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
vim +/radix__flush_tlb_range_psize +1252 arch/powerpc/mm/book3s64/radix_tlb.c
8cb8140c4c9397 arch/powerpc/mm/tlb-radix.c Aneesh Kumar K.V 2016-07-13 1251
0b2f5a8a792755 arch/powerpc/mm/tlb-radix.c Nicholas Piggin 2017-11-07 @1252 void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start,
0b2f5a8a792755 arch/powerpc/mm/tlb-radix.c Nicholas Piggin 2017-11-07 1253 unsigned long end, int psize)
0b2f5a8a792755 arch/powerpc/mm/tlb-radix.c Nicholas Piggin 2017-11-07 1254 {
0b2f5a8a792755 arch/powerpc/mm/tlb-radix.c Nicholas Piggin 2017-11-07 1255 return __radix__flush_tlb_range_psize(mm, start, end, psize, false);
0b2f5a8a792755 arch/powerpc/mm/tlb-radix.c Nicholas Piggin 2017-11-07 1256 }
0b2f5a8a792755 arch/powerpc/mm/tlb-radix.c Nicholas Piggin 2017-11-07 1257
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Le 30/03/2021 à 08:07, Aneesh Kumar K.V a écrit : > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > .../include/asm/book3s/64/tlbflush-radix.h | 19 ++++++++------- > arch/powerpc/include/asm/book3s/64/tlbflush.h | 23 +++++++++++++++---- > arch/powerpc/mm/book3s64/radix_hugetlbpage.c | 4 ++-- > arch/powerpc/mm/book3s64/radix_tlb.c | 23 ++++++++----------- > 4 files changed, 42 insertions(+), 27 deletions(-) > > diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > index 8b33601cdb9d..90c91f7b526f 100644 > --- a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > +++ b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > @@ -56,15 +56,18 @@ static inline void radix__flush_all_lpid_guest(unsigned int lpid) > } > #endif > > -extern void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, > - unsigned long start, unsigned long end); > -extern void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start, > - unsigned long end, int psize); > -extern void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, > - unsigned long start, unsigned long end); > -extern void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, > +void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, > + unsigned long start, unsigned long end, > + bool also_pwc); No sure 'also_pwc' is a nice name. What about 'flush_pwc' ? > +void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, > + unsigned long start, unsigned long end, > + bool also_pwc); > +void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, > + unsigned long end, int psize, bool also_pwc); > +void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, > unsigned long end); > -extern void radix__flush_tlb_kernel_range(unsigned long start, unsigned long end); > +void radix__flush_tlb_kernel_range(unsigned long start, unsigned long end); > + > > extern void radix__local_flush_tlb_mm(struct mm_struct *mm); > extern void radix__local_flush_all_mm(struct mm_struct *mm); > diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush.h b/arch/powerpc/include/asm/book3s/64/tlbflush.h > index 215973b4cb26..efe5336e2b6f 100644 > --- a/arch/powerpc/include/asm/book3s/64/tlbflush.h > +++ b/arch/powerpc/include/asm/book3s/64/tlbflush.h > @@ -45,13 +45,30 @@ static inline void tlbiel_all_lpid(bool radix) > hash__tlbiel_all(TLB_INVAL_SCOPE_LPID); > } > > +static inline void flush_pmd_tlb_pwc_range(struct vm_area_struct *vma, > + unsigned long start, > + unsigned long end, > + bool also_pwc) > +{ > + if (radix_enabled()) > + return radix__flush_pmd_tlb_range(vma, start, end, also_pwc); > + return hash__flush_tlb_range(vma, start, end); > +} > > #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE > static inline void flush_pmd_tlb_range(struct vm_area_struct *vma, > unsigned long start, unsigned long end) > +{ > + return flush_pmd_tlb_pwc_range(vma, start, end, false); > +} > + > +static inline void flush_hugetlb_tlb_pwc_range(struct vm_area_struct *vma, > + unsigned long start, > + unsigned long end, > + bool also_pwc) > { > if (radix_enabled()) > - return radix__flush_pmd_tlb_range(vma, start, end); > + return radix__flush_hugetlb_tlb_range(vma, start, end, also_pwc); > return hash__flush_tlb_range(vma, start, end); > } > > @@ -60,9 +77,7 @@ static inline void flush_hugetlb_tlb_range(struct vm_area_struct *vma, > unsigned long start, > unsigned long end) > { > - if (radix_enabled()) > - return radix__flush_hugetlb_tlb_range(vma, start, end); > - return hash__flush_tlb_range(vma, start, end); > + return flush_hugetlb_tlb_pwc_range(vma, start, end, false); > } > > static inline void flush_tlb_range(struct vm_area_struct *vma, > diff --git a/arch/powerpc/mm/book3s64/radix_hugetlbpage.c b/arch/powerpc/mm/book3s64/radix_hugetlbpage.c > index cb91071eef52..55c5c9c39ae2 100644 > --- a/arch/powerpc/mm/book3s64/radix_hugetlbpage.c > +++ b/arch/powerpc/mm/book3s64/radix_hugetlbpage.c > @@ -26,13 +26,13 @@ void radix__local_flush_hugetlb_page(struct vm_area_struct *vma, unsigned long v > } > > void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, unsigned long start, > - unsigned long end) > + unsigned long end, bool also_pwc) > { > int psize; > struct hstate *hstate = hstate_file(vma->vm_file); > > psize = hstate_get_psize(hstate); > - radix__flush_tlb_range_psize(vma->vm_mm, start, end, psize); > + radix__flush_tlb_pwc_range_psize(vma->vm_mm, start, end, psize, also_pwc); > } > > /* > diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c > index 817a02ef6032..416fe9b48e14 100644 > --- a/arch/powerpc/mm/book3s64/radix_tlb.c > +++ b/arch/powerpc/mm/book3s64/radix_tlb.c > @@ -1090,7 +1090,7 @@ void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, > { > #ifdef CONFIG_HUGETLB_PAGE > if (is_vm_hugetlb_page(vma)) > - return radix__flush_hugetlb_tlb_range(vma, start, end); > + return radix__flush_hugetlb_tlb_range(vma, start, end, false); > #endif > > __radix__flush_tlb_range(vma->vm_mm, start, end); > @@ -1151,9 +1151,6 @@ void radix__flush_all_lpid_guest(unsigned int lpid) > _tlbie_lpid_guest(lpid, RIC_FLUSH_ALL); > } > > -static void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, > - unsigned long end, int psize); > - > void radix__tlb_flush(struct mmu_gather *tlb) > { > int psize = 0; > @@ -1177,10 +1174,8 @@ void radix__tlb_flush(struct mmu_gather *tlb) > else > radix__flush_all_mm(mm); > } else { > - if (!tlb->freed_tables) > - radix__flush_tlb_range_psize(mm, start, end, psize); > - else > - radix__flush_tlb_pwc_range_psize(mm, start, end, psize); > + radix__flush_tlb_pwc_range_psize(mm, start, > + end, psize, tlb->freed_tables); > } > } > > @@ -1260,10 +1255,10 @@ void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start, > return __radix__flush_tlb_range_psize(mm, start, end, psize, false); > } > > -static void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, > - unsigned long end, int psize) > +void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, > + unsigned long end, int psize, bool also_pwc) > { > - __radix__flush_tlb_range_psize(mm, start, end, psize, true); > + __radix__flush_tlb_range_psize(mm, start, end, psize, also_pwc); > } > > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > @@ -1315,9 +1310,11 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, unsigned long addr) > #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > > void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, > - unsigned long start, unsigned long end) > + unsigned long start, unsigned long end, > + bool also_pwc) > { > - radix__flush_tlb_range_psize(vma->vm_mm, start, end, MMU_PAGE_2M); > + __radix__flush_tlb_range_psize(vma->vm_mm, start, > + end, MMU_PAGE_2M, also_pwc); > } > EXPORT_SYMBOL(radix__flush_pmd_tlb_range); > >
diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h index 8b33601cdb9d..90c91f7b526f 100644 --- a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h +++ b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h @@ -56,15 +56,18 @@ static inline void radix__flush_all_lpid_guest(unsigned int lpid) } #endif -extern void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, - unsigned long start, unsigned long end); -extern void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start, - unsigned long end, int psize); -extern void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, - unsigned long start, unsigned long end); -extern void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, +void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, + unsigned long start, unsigned long end, + bool also_pwc); +void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, + unsigned long start, unsigned long end, + bool also_pwc); +void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, + unsigned long end, int psize, bool also_pwc); +void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); -extern void radix__flush_tlb_kernel_range(unsigned long start, unsigned long end); +void radix__flush_tlb_kernel_range(unsigned long start, unsigned long end); + extern void radix__local_flush_tlb_mm(struct mm_struct *mm); extern void radix__local_flush_all_mm(struct mm_struct *mm); diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush.h b/arch/powerpc/include/asm/book3s/64/tlbflush.h index 215973b4cb26..efe5336e2b6f 100644 --- a/arch/powerpc/include/asm/book3s/64/tlbflush.h +++ b/arch/powerpc/include/asm/book3s/64/tlbflush.h @@ -45,13 +45,30 @@ static inline void tlbiel_all_lpid(bool radix) hash__tlbiel_all(TLB_INVAL_SCOPE_LPID); } +static inline void flush_pmd_tlb_pwc_range(struct vm_area_struct *vma, + unsigned long start, + unsigned long end, + bool also_pwc) +{ + if (radix_enabled()) + return radix__flush_pmd_tlb_range(vma, start, end, also_pwc); + return hash__flush_tlb_range(vma, start, end); +} #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE static inline void flush_pmd_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) +{ + return flush_pmd_tlb_pwc_range(vma, start, end, false); +} + +static inline void flush_hugetlb_tlb_pwc_range(struct vm_area_struct *vma, + unsigned long start, + unsigned long end, + bool also_pwc) { if (radix_enabled()) - return radix__flush_pmd_tlb_range(vma, start, end); + return radix__flush_hugetlb_tlb_range(vma, start, end, also_pwc); return hash__flush_tlb_range(vma, start, end); } @@ -60,9 +77,7 @@ static inline void flush_hugetlb_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { - if (radix_enabled()) - return radix__flush_hugetlb_tlb_range(vma, start, end); - return hash__flush_tlb_range(vma, start, end); + return flush_hugetlb_tlb_pwc_range(vma, start, end, false); } static inline void flush_tlb_range(struct vm_area_struct *vma, diff --git a/arch/powerpc/mm/book3s64/radix_hugetlbpage.c b/arch/powerpc/mm/book3s64/radix_hugetlbpage.c index cb91071eef52..55c5c9c39ae2 100644 --- a/arch/powerpc/mm/book3s64/radix_hugetlbpage.c +++ b/arch/powerpc/mm/book3s64/radix_hugetlbpage.c @@ -26,13 +26,13 @@ void radix__local_flush_hugetlb_page(struct vm_area_struct *vma, unsigned long v } void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, unsigned long start, - unsigned long end) + unsigned long end, bool also_pwc) { int psize; struct hstate *hstate = hstate_file(vma->vm_file); psize = hstate_get_psize(hstate); - radix__flush_tlb_range_psize(vma->vm_mm, start, end, psize); + radix__flush_tlb_pwc_range_psize(vma->vm_mm, start, end, psize, also_pwc); } /* diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c index 817a02ef6032..416fe9b48e14 100644 --- a/arch/powerpc/mm/book3s64/radix_tlb.c +++ b/arch/powerpc/mm/book3s64/radix_tlb.c @@ -1090,7 +1090,7 @@ void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long start, { #ifdef CONFIG_HUGETLB_PAGE if (is_vm_hugetlb_page(vma)) - return radix__flush_hugetlb_tlb_range(vma, start, end); + return radix__flush_hugetlb_tlb_range(vma, start, end, false); #endif __radix__flush_tlb_range(vma->vm_mm, start, end); @@ -1151,9 +1151,6 @@ void radix__flush_all_lpid_guest(unsigned int lpid) _tlbie_lpid_guest(lpid, RIC_FLUSH_ALL); } -static void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, - unsigned long end, int psize); - void radix__tlb_flush(struct mmu_gather *tlb) { int psize = 0; @@ -1177,10 +1174,8 @@ void radix__tlb_flush(struct mmu_gather *tlb) else radix__flush_all_mm(mm); } else { - if (!tlb->freed_tables) - radix__flush_tlb_range_psize(mm, start, end, psize); - else - radix__flush_tlb_pwc_range_psize(mm, start, end, psize); + radix__flush_tlb_pwc_range_psize(mm, start, + end, psize, tlb->freed_tables); } } @@ -1260,10 +1255,10 @@ void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start, return __radix__flush_tlb_range_psize(mm, start, end, psize, false); } -static void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, - unsigned long end, int psize) +void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned long start, + unsigned long end, int psize, bool also_pwc) { - __radix__flush_tlb_range_psize(mm, start, end, psize, true); + __radix__flush_tlb_range_psize(mm, start, end, psize, also_pwc); } #ifdef CONFIG_TRANSPARENT_HUGEPAGE @@ -1315,9 +1310,11 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, unsigned long addr) #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, - unsigned long start, unsigned long end) + unsigned long start, unsigned long end, + bool also_pwc) { - radix__flush_tlb_range_psize(vma->vm_mm, start, end, MMU_PAGE_2M); + __radix__flush_tlb_range_psize(vma->vm_mm, start, + end, MMU_PAGE_2M, also_pwc); } EXPORT_SYMBOL(radix__flush_pmd_tlb_range);
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> --- .../include/asm/book3s/64/tlbflush-radix.h | 19 ++++++++------- arch/powerpc/include/asm/book3s/64/tlbflush.h | 23 +++++++++++++++---- arch/powerpc/mm/book3s64/radix_hugetlbpage.c | 4 ++-- arch/powerpc/mm/book3s64/radix_tlb.c | 23 ++++++++----------- 4 files changed, 42 insertions(+), 27 deletions(-)