Message ID | 7256dbe078d7231f45b0f47c2c52a3bd3aa10da7.1655350193.git.baolin.wang@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64/hugetlb: Implement arm64 specific hugetlb_mask_last_hp | expand |
Hi Baolin, I love your patch! Perhaps something to improve: [auto build test WARNING on arm64/for-next/core] [also build test WARNING on linus/master] [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/intel-lab-lkp/linux/commits/Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core config: arm64-allyesconfig (https://download.01.org/0day-ci/archive/20220616/202206161633.yB7NR9sh-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 11.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/intel-lab-lkp/linux/commit/f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 git checkout f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/mm/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> arch/arm64/mm/hugetlbpage.c:371:15: warning: no previous prototype for 'hugetlb_mask_last_hp' [-Wmissing-prototypes] 371 | unsigned long hugetlb_mask_last_hp(struct hstate *h) | ^~~~~~~~~~~~~~~~~~~~ vim +/hugetlb_mask_last_hp +371 arch/arm64/mm/hugetlbpage.c 370 > 371 unsigned long hugetlb_mask_last_hp(struct hstate *h) 372 { 373 unsigned long hp_size = huge_page_size(h); 374 375 switch (hp_size) { 376 case PUD_SIZE: 377 return PGDIR_SIZE - PUD_SIZE; 378 case CONT_PMD_SIZE: 379 return PUD_SIZE - CONT_PMD_SIZE; 380 case PMD_SIZE: 381 return PUD_SIZE - PMD_SIZE; 382 case CONT_PTE_SIZE: 383 return PMD_SIZE - CONT_PTE_SIZE; 384 default: 385 break; 386 } 387 388 return ~0UL; 389 } 390
Hi Baolin, I love your patch! Yet something to improve: [auto build test ERROR on arm64/for-next/core] [also build test ERROR on linus/master v5.19-rc2 next-20220616] [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/intel-lab-lkp/linux/commits/Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core config: arm64-buildonly-randconfig-r001-20220616 (https://download.01.org/0day-ci/archive/20220616/202206161848.w1bWqr7O-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 11.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/intel-lab-lkp/linux/commit/f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 git checkout f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/mm/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): arch/arm64/mm/hugetlbpage.c:371:15: warning: no previous prototype for 'hugetlb_mask_last_hp' [-Wmissing-prototypes] 371 | unsigned long hugetlb_mask_last_hp(struct hstate *h) | ^~~~~~~~~~~~~~~~~~~~ arch/arm64/mm/hugetlbpage.c: In function 'hugetlb_mask_last_hp': >> arch/arm64/mm/hugetlbpage.c:380:9: error: duplicate case value 380 | case PMD_SIZE: | ^~~~ arch/arm64/mm/hugetlbpage.c:376:9: note: previously used here 376 | case PUD_SIZE: | ^~~~ vim +380 arch/arm64/mm/hugetlbpage.c 370 371 unsigned long hugetlb_mask_last_hp(struct hstate *h) 372 { 373 unsigned long hp_size = huge_page_size(h); 374 375 switch (hp_size) { 376 case PUD_SIZE: 377 return PGDIR_SIZE - PUD_SIZE; 378 case CONT_PMD_SIZE: 379 return PUD_SIZE - CONT_PMD_SIZE; > 380 case PMD_SIZE: 381 return PUD_SIZE - PMD_SIZE; 382 case CONT_PTE_SIZE: 383 return PMD_SIZE - CONT_PTE_SIZE; 384 default: 385 break; 386 } 387 388 return ~0UL; 389 } 390
On 06/16/22 at 11:34am, Baolin Wang wrote: > The HugeTLB address ranges are linearly scanned during fork, unmap and > remap operations, and the linear scan can skip to the end of range mapped > by the page table page if hitting a non-present entry, which can help > to speed linear scanning of the HugeTLB address ranges. > > So hugetlb_mask_last_hp() is introduced to help to update the address in > the loop of HugeTLB linear scanning with getting the last huge page mapped > by the associated page table page[1], when a non-present entry is encountered. > > Considering ARM64 specific cont-pte/pmd size HugeTLB, this patch implemented > an ARM64 specific hugetlb_mask_last_hp() to help this case. > > [1] https://lore.kernel.org/linux-mm/20220527225849.284839-1-mike.kravetz@oracle.com/ > > Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com> > --- > Note: this patch is based on the series: "hugetlb: speed up linear > address scanning" from Mike. Mike, please fold it into your series. > Thanks. > --- > arch/arm64/mm/hugetlbpage.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c > index e2a5ec9..958935c 100644 > --- a/arch/arm64/mm/hugetlbpage.c > +++ b/arch/arm64/mm/hugetlbpage.c > @@ -368,6 +368,26 @@ pte_t *huge_pte_offset(struct mm_struct *mm, > return NULL; > } > > +unsigned long hugetlb_mask_last_hp(struct hstate *h) > +{ > + unsigned long hp_size = huge_page_size(h); hp_size may not be a good name, it reminds me of hotplug. I would name it hpage_size even though a little more characters are added. > + > + switch (hp_size) { > + case PUD_SIZE: > + return PGDIR_SIZE - PUD_SIZE; > + case CONT_PMD_SIZE: > + return PUD_SIZE - CONT_PMD_SIZE; > + case PMD_SIZE: > + return PUD_SIZE - PMD_SIZE; > + case CONT_PTE_SIZE: > + return PMD_SIZE - CONT_PTE_SIZE; > + default: > + break; > + } > + > + return ~0UL; > +} > + > pte_t arch_make_huge_pte(pte_t entry, unsigned int shift, vm_flags_t flags) > { > size_t pagesize = 1UL << shift; > -- > 1.8.3.1 > >
On 06/16/22 20:05, Baoquan He wrote: > On 06/16/22 at 11:34am, Baolin Wang wrote: > > The HugeTLB address ranges are linearly scanned during fork, unmap and > > remap operations, and the linear scan can skip to the end of range mapped > > by the page table page if hitting a non-present entry, which can help > > to speed linear scanning of the HugeTLB address ranges. > > > > So hugetlb_mask_last_hp() is introduced to help to update the address in > > the loop of HugeTLB linear scanning with getting the last huge page mapped > > by the associated page table page[1], when a non-present entry is encountered. > > > > Considering ARM64 specific cont-pte/pmd size HugeTLB, this patch implemented > > an ARM64 specific hugetlb_mask_last_hp() to help this case. > > > > [1] https://lore.kernel.org/linux-mm/20220527225849.284839-1-mike.kravetz@oracle.com/ > > > > Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com> > > --- > > Note: this patch is based on the series: "hugetlb: speed up linear > > address scanning" from Mike. Mike, please fold it into your series. > > Thanks. > > --- > > arch/arm64/mm/hugetlbpage.c | 20 ++++++++++++++++++++ > > 1 file changed, 20 insertions(+) > > > > diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c > > index e2a5ec9..958935c 100644 > > --- a/arch/arm64/mm/hugetlbpage.c > > +++ b/arch/arm64/mm/hugetlbpage.c > > @@ -368,6 +368,26 @@ pte_t *huge_pte_offset(struct mm_struct *mm, > > return NULL; > > } > > > > +unsigned long hugetlb_mask_last_hp(struct hstate *h) > > +{ > > + unsigned long hp_size = huge_page_size(h); > > hp_size may not be a good name, it reminds me of hotplug. I would name > it hpage_size even though a little more characters are added. > How about just hugetlb_mask_last_page? Since the routine is prefixed with 'hugetlb' and we are passing in a pointer to a hstate, I think there is enough context to know we are talking about a huge page mask as opposed to a base page mask. If OK, I will change the name in my patches and here.
On 06/16/22 at 10:35am, Mike Kravetz wrote: > On 06/16/22 20:05, Baoquan He wrote: > > On 06/16/22 at 11:34am, Baolin Wang wrote: > > > The HugeTLB address ranges are linearly scanned during fork, unmap and > > > remap operations, and the linear scan can skip to the end of range mapped > > > by the page table page if hitting a non-present entry, which can help > > > to speed linear scanning of the HugeTLB address ranges. > > > > > > So hugetlb_mask_last_hp() is introduced to help to update the address in > > > the loop of HugeTLB linear scanning with getting the last huge page mapped > > > by the associated page table page[1], when a non-present entry is encountered. > > > > > > Considering ARM64 specific cont-pte/pmd size HugeTLB, this patch implemented > > > an ARM64 specific hugetlb_mask_last_hp() to help this case. > > > > > > [1] https://lore.kernel.org/linux-mm/20220527225849.284839-1-mike.kravetz@oracle.com/ > > > > > > Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com> > > > --- > > > Note: this patch is based on the series: "hugetlb: speed up linear > > > address scanning" from Mike. Mike, please fold it into your series. > > > Thanks. > > > --- > > > arch/arm64/mm/hugetlbpage.c | 20 ++++++++++++++++++++ > > > 1 file changed, 20 insertions(+) > > > > > > diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c > > > index e2a5ec9..958935c 100644 > > > --- a/arch/arm64/mm/hugetlbpage.c > > > +++ b/arch/arm64/mm/hugetlbpage.c > > > @@ -368,6 +368,26 @@ pte_t *huge_pte_offset(struct mm_struct *mm, > > > return NULL; > > > } > > > > > > +unsigned long hugetlb_mask_last_hp(struct hstate *h) > > > +{ > > > + unsigned long hp_size = huge_page_size(h); > > > > hp_size may not be a good name, it reminds me of hotplug. I would name > > it hpage_size even though a little more characters are added. > > > > How about just hugetlb_mask_last_page? Since the routine is prefixed > with 'hugetlb' and we are passing in a pointer to a hstate, I think there > is enough context to know we are talking about a huge page mask as > opposed to a base page mask. Agree, hugetlb_mask_last_page looks good to me regarding the function name, thx.
Hi Baolin, I love your patch! Perhaps something to improve: [auto build test WARNING on arm64/for-next/core] [also build test WARNING on linus/master v5.19-rc2 next-20220617] [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/intel-lab-lkp/linux/commits/Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core config: arm64-randconfig-r011-20220616 (https://download.01.org/0day-ci/archive/20220617/202206172000.6Fwmo99P-lkp@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f0e608de27b3d568000046eebf3712ab542979d6) 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 # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # https://github.com/intel-lab-lkp/linux/commit/f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 git checkout f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/mm/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> arch/arm64/mm/hugetlbpage.c:371:15: warning: no previous prototype for function 'hugetlb_mask_last_hp' [-Wmissing-prototypes] unsigned long hugetlb_mask_last_hp(struct hstate *h) ^ arch/arm64/mm/hugetlbpage.c:371:1: note: declare 'static' if the function is not intended to be used outside of this translation unit unsigned long hugetlb_mask_last_hp(struct hstate *h) ^ static 1 warning generated. vim +/hugetlb_mask_last_hp +371 arch/arm64/mm/hugetlbpage.c 370 > 371 unsigned long hugetlb_mask_last_hp(struct hstate *h) 372 { 373 unsigned long hp_size = huge_page_size(h); 374 375 switch (hp_size) { 376 case PUD_SIZE: 377 return PGDIR_SIZE - PUD_SIZE; 378 case CONT_PMD_SIZE: 379 return PUD_SIZE - CONT_PMD_SIZE; 380 case PMD_SIZE: 381 return PUD_SIZE - PMD_SIZE; 382 case CONT_PTE_SIZE: 383 return PMD_SIZE - CONT_PTE_SIZE; 384 default: 385 break; 386 } 387 388 return ~0UL; 389 } 390
Hi, On 6/17/2022 8:17 PM, kernel test robot wrote: > Hi Baolin, > > I love your patch! Perhaps something to improve: > > [auto build test WARNING on arm64/for-next/core] > [also build test WARNING on linus/master v5.19-rc2 next-20220617] > [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/intel-lab-lkp/linux/commits/Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 > base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core > config: arm64-randconfig-r011-20220616 (https://download.01.org/0day-ci/archive/20220617/202206172000.6Fwmo99P-lkp@intel.com/config) > compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f0e608de27b3d568000046eebf3712ab542979d6) > 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 > # install arm64 cross compiling tool for clang build > # apt-get install binutils-aarch64-linux-gnu > # https://github.com/intel-lab-lkp/linux/commit/f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Baolin-Wang/arm64-hugetlb-Implement-arm64-specific-hugetlb_mask_last_hp/20220616-113640 > git checkout f1309dfbc2b70ec5dd72ac38e95a49b7be42b9b6 > # save the config file > mkdir build_dir && cp config build_dir/.config > COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/mm/ > > If you fix the issue, kindly add following tag where applicable > Reported-by: kernel test robot <lkp@intel.com> Thanks for your reporting. However this patch is based on the Mike's series [1] and has been folded into this series. So just skip testing this patch separately. Thanks. https://lore.kernel.org/all/20220616210518.125287-1-mike.kravetz@oracle.com/
diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c index e2a5ec9..958935c 100644 --- a/arch/arm64/mm/hugetlbpage.c +++ b/arch/arm64/mm/hugetlbpage.c @@ -368,6 +368,26 @@ pte_t *huge_pte_offset(struct mm_struct *mm, return NULL; } +unsigned long hugetlb_mask_last_hp(struct hstate *h) +{ + unsigned long hp_size = huge_page_size(h); + + switch (hp_size) { + case PUD_SIZE: + return PGDIR_SIZE - PUD_SIZE; + case CONT_PMD_SIZE: + return PUD_SIZE - CONT_PMD_SIZE; + case PMD_SIZE: + return PUD_SIZE - PMD_SIZE; + case CONT_PTE_SIZE: + return PMD_SIZE - CONT_PTE_SIZE; + default: + break; + } + + return ~0UL; +} + pte_t arch_make_huge_pte(pte_t entry, unsigned int shift, vm_flags_t flags) { size_t pagesize = 1UL << shift;
The HugeTLB address ranges are linearly scanned during fork, unmap and remap operations, and the linear scan can skip to the end of range mapped by the page table page if hitting a non-present entry, which can help to speed linear scanning of the HugeTLB address ranges. So hugetlb_mask_last_hp() is introduced to help to update the address in the loop of HugeTLB linear scanning with getting the last huge page mapped by the associated page table page[1], when a non-present entry is encountered. Considering ARM64 specific cont-pte/pmd size HugeTLB, this patch implemented an ARM64 specific hugetlb_mask_last_hp() to help this case. [1] https://lore.kernel.org/linux-mm/20220527225849.284839-1-mike.kravetz@oracle.com/ Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com> --- Note: this patch is based on the series: "hugetlb: speed up linear address scanning" from Mike. Mike, please fold it into your series. Thanks. --- arch/arm64/mm/hugetlbpage.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)