Re: [PATCH v13 12/22] mm: pagewalk: Allow walking without vma

From: kbuild test robot
Date: Sun Oct 27 2019 - 04:00:46 EST


Hi Steven,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.4-rc4 next-20191025]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url: https://github.com/0day-ci/linux/commits/Steven-Price/Generic-page-walk-and-ptdump/20191027-140322
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 5a1e843c66fa6438f389045981c37e4073917641
config: arc-defconfig (attached as .config)
compiler: arc-elf-gcc (GCC) 7.4.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=arc

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All error/warnings (new ones prefixed by >>):

In file included from arch/arc/include/asm/thread_info.h:16:0,
from include/linux/thread_info.h:38,
from include/asm-generic/preempt.h:5,
from ./arch/arc/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:51,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:10,
from include/linux/pagewalk.h:5,
from mm/pagewalk.c:2:
mm/pagewalk.c: In function 'walk_pmd_range':
>> include/asm-generic/pgtable-nopmd.h:49:35: error: 'pmd' is a pointer; did you mean to use '->'?
#define pmd_val(x) (pud_val((x).pud))
^
arch/arc/include/asm/page.h:65:21: note: in definition of macro 'pgd_val'
#define pgd_val(x) (x)
^
include/asm-generic/pgtable-nopmd.h:49:24: note: in expansion of macro 'pud_val'
#define pmd_val(x) (pud_val((x).pud))
^~~~~~~
>> arch/arc/include/asm/pgtable.h:277:24: note: in expansion of macro 'pmd_val'
#define pmd_leaf(x) (pmd_val(pmd) & _PAGE_HW_SZ)
^~~~~~~
>> mm/pagewalk.c:68:14: note: in expansion of macro 'pmd_leaf'
} else if (pmd_leaf(*pmd)) {
^~~~~~~~

vim +/pmd_leaf +68 mm/pagewalk.c

28
29 static int walk_pmd_range(pud_t *pud, unsigned long addr, unsigned long end,
30 struct mm_walk *walk)
31 {
32 pmd_t *pmd;
33 unsigned long next;
34 const struct mm_walk_ops *ops = walk->ops;
35 int err = 0;
36
37 pmd = pmd_offset(pud, addr);
38 do {
39 again:
40 next = pmd_addr_end(addr, end);
41 if (pmd_none(*pmd)) {
42 if (ops->pte_hole)
43 err = ops->pte_hole(addr, next, walk);
44 if (err)
45 break;
46 continue;
47 }
48 /*
49 * This implies that each ->pmd_entry() handler
50 * needs to know about pmd_trans_huge() pmds
51 */
52 if (ops->pmd_entry)
53 err = ops->pmd_entry(pmd, addr, next, walk);
54 if (err)
55 break;
56
57 /*
58 * Check this here so we only break down trans_huge
59 * pages when we _need_ to
60 */
61 if (!ops->pte_entry)
62 continue;
63
64 if (walk->vma) {
65 split_huge_pmd(walk->vma, pmd, addr);
66 if (pmd_trans_unstable(pmd))
67 goto again;
> 68 } else if (pmd_leaf(*pmd)) {
69 continue;
70 }
71
72 err = walk_pte_range(pmd, addr, next, walk);
73 if (err)
74 break;
75 } while (pmd++, addr = next, addr != end);
76
77 return err;
78 }
79

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip