Message ID | 20220228063536.24911-5-songmuchun@bytedance.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Fix some bugs related to ramp and dax | expand |
Hi Muchun,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on hnaz-mm/master]
[also build test ERROR on next-20220225]
[cannot apply to linus/master v5.17-rc6]
[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/Muchun-Song/Fix-some-bugs-related-to-ramp-and-dax/20220228-143753
base: https://github.com/hnaz/linux-mm master
config: riscv-randconfig-r012-20220227 (https://download.01.org/0day-ci/archive/20220228/202202281913.ZakSkynK-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e)
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 riscv cross compiling tool for clang build
# apt-get install binutils-riscv64-linux-gnu
# https://github.com/0day-ci/linux/commit/4b08af172f30c61ae5f43ec23642e2767371247e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Muchun-Song/Fix-some-bugs-related-to-ramp-and-dax/20220228-143753
git checkout 4b08af172f30c61ae5f43ec23642e2767371247e
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash
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 >>):
>> mm/page_vma_mapped.c:113:13: error: call to __compiletime_assert_258 declared with 'error' attribute: BUILD_BUG failed
if ((pfn + HPAGE_PMD_NR - 1) < pvmw->pfn)
^
include/linux/huge_mm.h:105:26: note: expanded from macro 'HPAGE_PMD_NR'
#define HPAGE_PMD_NR (1<<HPAGE_PMD_ORDER)
^
include/linux/huge_mm.h:104:26: note: expanded from macro 'HPAGE_PMD_ORDER'
#define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT)
^
include/linux/huge_mm.h:307:28: note: expanded from macro 'HPAGE_PMD_SHIFT'
#define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
^
note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:335:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:328:4: note: expanded from macro '__compiletime_assert'
prefix ## suffix(); \
^
<scratch space>:73:1: note: expanded from here
__compiletime_assert_258
^
1 error generated.
vim +/error +113 mm/page_vma_mapped.c
9188af981d385d Andrew Morton 2022-02-25 109
9188af981d385d Andrew Morton 2022-02-25 110 /* Returns true if the two ranges overlap. Careful to not overflow. */
9188af981d385d Andrew Morton 2022-02-25 111 static bool check_pmd(unsigned long pfn, struct page_vma_mapped_walk *pvmw)
9188af981d385d Andrew Morton 2022-02-25 112 {
9188af981d385d Andrew Morton 2022-02-25 @113 if ((pfn + HPAGE_PMD_NR - 1) < pvmw->pfn)
9188af981d385d Andrew Morton 2022-02-25 114 return false;
9188af981d385d Andrew Morton 2022-02-25 115 if (pfn > pvmw->pfn + pvmw->nr_pages - 1)
9188af981d385d Andrew Morton 2022-02-25 116 return false;
9188af981d385d Andrew Morton 2022-02-25 117 return true;
ace71a19cec5eb Kirill A. Shutemov 2017-02-24 118 }
ace71a19cec5eb Kirill A. Shutemov 2017-02-24 119
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
On Mon, 28 Feb 2022 14:35:34 +0800 Muchun Song <songmuchun@bytedance.com> wrote: > The devmap pages can not use page_vma_mapped_walk() to check if a huge > devmap page is mapped into a vma. Add support for walking huge devmap > pages so that DAX can use it in the next patch. > x86_64 allnoconfig: In file included from <command-line>: In function 'check_pmd', inlined from 'page_vma_mapped_walk' at mm/page_vma_mapped.c:219:10: ././include/linux/compiler_types.h:347:45: error: call to '__compiletime_assert_232' declared with attribute error: BUILD_BUG failed 347 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ ././include/linux/compiler_types.h:328:25: note: in definition of macro '__compiletime_assert' 328 | prefix ## suffix(); \ | ^~~~~~ ././include/linux/compiler_types.h:347:9: note: in expansion of macro '_compiletime_assert' 347 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ ./include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^~~~~~~~~~~~~~~~~~ ./include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_BUG_ON_MSG' 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") | ^~~~~~~~~~~~~~~~ ./include/linux/huge_mm.h:307:28: note: in expansion of macro 'BUILD_BUG' 307 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) | ^~~~~~~~~ ./include/linux/huge_mm.h:104:26: note: in expansion of macro 'HPAGE_PMD_SHIFT' 104 | #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT) | ^~~~~~~~~~~~~~~ ./include/linux/huge_mm.h:105:26: note: in expansion of macro 'HPAGE_PMD_ORDER' 105 | #define HPAGE_PMD_NR (1<<HPAGE_PMD_ORDER) | ^~~~~~~~~~~~~~~ mm/page_vma_mapped.c:113:20: note: in expansion of macro 'HPAGE_PMD_NR' 113 | if ((pfn + HPAGE_PMD_NR - 1) < pvmw->pfn) | ^~~~~~~~~~~~ make[1]: *** [scripts/Makefile.build:288: mm/page_vma_mapped.o] Error 1 make: *** [Makefile:1971: mm] Error 2 because check_pmd() uses HPAGE_PMD_NR and #else /* CONFIG_TRANSPARENT_HUGEPAGE */ #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) I don't immediately see why this patch triggers it...
On Tue, Mar 1, 2022 at 5:26 AM Andrew Morton <akpm@linux-foundation.org> wrote: > > On Mon, 28 Feb 2022 14:35:34 +0800 Muchun Song <songmuchun@bytedance.com> wrote: > > > The devmap pages can not use page_vma_mapped_walk() to check if a huge > > devmap page is mapped into a vma. Add support for walking huge devmap > > pages so that DAX can use it in the next patch. > > > > x86_64 allnoconfig: > > In file included from <command-line>: > In function 'check_pmd', > inlined from 'page_vma_mapped_walk' at mm/page_vma_mapped.c:219:10: > ././include/linux/compiler_types.h:347:45: error: call to '__compiletime_assert_232' declared with attribute error: BUILD_BUG failed > 347 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) > | ^ > ././include/linux/compiler_types.h:328:25: note: in definition of macro '__compiletime_assert' > 328 | prefix ## suffix(); \ > | ^~~~~~ > ././include/linux/compiler_types.h:347:9: note: in expansion of macro '_compiletime_assert' > 347 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) > | ^~~~~~~~~~~~~~~~~~~ > ./include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' > 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) > | ^~~~~~~~~~~~~~~~~~ > ./include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_BUG_ON_MSG' > 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") > | ^~~~~~~~~~~~~~~~ > ./include/linux/huge_mm.h:307:28: note: in expansion of macro 'BUILD_BUG' > 307 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) > | ^~~~~~~~~ > ./include/linux/huge_mm.h:104:26: note: in expansion of macro 'HPAGE_PMD_SHIFT' > 104 | #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT) > | ^~~~~~~~~~~~~~~ > ./include/linux/huge_mm.h:105:26: note: in expansion of macro 'HPAGE_PMD_ORDER' > 105 | #define HPAGE_PMD_NR (1<<HPAGE_PMD_ORDER) > | ^~~~~~~~~~~~~~~ > mm/page_vma_mapped.c:113:20: note: in expansion of macro 'HPAGE_PMD_NR' > 113 | if ((pfn + HPAGE_PMD_NR - 1) < pvmw->pfn) > | ^~~~~~~~~~~~ > make[1]: *** [scripts/Makefile.build:288: mm/page_vma_mapped.o] Error 1 > make: *** [Makefile:1971: mm] Error 2 > > > because check_pmd() uses HPAGE_PMD_NR and > > #else /* CONFIG_TRANSPARENT_HUGEPAGE */ > #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) > > I don't immediately see why this patch triggers it... Maybe the reason is as follows. The first check_pmd() is wrapped inside `if (pmd_trans_huge(pmde))` block, since pmd_trans_huge() just returns 0, check_pmd() will be optimized out. There is a `if (!thp_migration_supported()) return;` block before the second check_pmd(), however, thp_migration_supported() returns 0 on riscv. So the second check_pmd() can be optimized out as well. I think I should replace `pmd_leaf` with `pmd_trans_huge() || pmd_devmap()` to fix it. Thanks.
diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c index 1187f9c1ec5b..3f337e4e7f5f 100644 --- a/mm/page_vma_mapped.c +++ b/mm/page_vma_mapped.c @@ -210,10 +210,10 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw) */ pmde = READ_ONCE(*pvmw->pmd); - if (pmd_trans_huge(pmde) || is_pmd_migration_entry(pmde)) { + if (pmd_leaf(pmde) || is_pmd_migration_entry(pmde)) { pvmw->ptl = pmd_lock(mm, pvmw->pmd); pmde = *pvmw->pmd; - if (likely(pmd_trans_huge(pmde))) { + if (likely(pmd_leaf(pmde))) { if (pvmw->flags & PVMW_MIGRATION) return not_found(pvmw); if (!check_pmd(pmd_pfn(pmde), pvmw))
The devmap pages can not use page_vma_mapped_walk() to check if a huge devmap page is mapped into a vma. Add support for walking huge devmap pages so that DAX can use it in the next patch. Signed-off-by: Muchun Song <songmuchun@bytedance.com> --- mm/page_vma_mapped.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)