* [linux-next:master 2981/3989] mm/page_table_check.c:154:6: error: too many arguments to function 'pte_user_accessible_page'
@ 2026-03-05 0:45 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-03-05 0:45 UTC (permalink / raw)
To: Tobias Huschle
Cc: oe-kbuild-all, Vasily Gorbik, Gerald Schaefer, Alexander Gordeev,
Andrew Morton, Linux Memory Management List
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: fc7b1a72c6cd5cbbd989c6c32a6486e3e4e3594d
commit: fba4fd7b84a5f96d12c9153b7eedb4807b9d96c5 [2981/3989] mm/page_table_check: Pass mm_struct to pxx_user_accessible_page()
config: powerpc-randconfig-002-20260305 (https://download.01.org/0day-ci/archive/20260305/202603050830.LXQcUa5Z-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260305/202603050830.LXQcUa5Z-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603050830.LXQcUa5Z-lkp@intel.com/
All errors (new ones prefixed by >>):
mm/page_table_check.c: In function '__page_table_check_pte_clear':
mm/page_table_check.c:154:31: warning: passing argument 1 of 'pte_user_accessible_page' makes integer from pointer without a cast [-Wint-conversion]
if (pte_user_accessible_page(mm, addr, pte))
^~
In file included from arch/powerpc/include/asm/book3s/pgtable.h:8,
from arch/powerpc/include/asm/pgtable.h:18,
from include/linux/pgtable.h:6,
from include/linux/mm.h:32,
from mm/page_table_check.c:8:
arch/powerpc/include/asm/book3s/32/pgtable.h:441:51: note: expected 'pte_t' {aka 'long unsigned int'} but argument is of type 'struct mm_struct *'
static inline bool pte_user_accessible_page(pte_t pte, unsigned long addr)
~~~~~~^~~
>> mm/page_table_check.c:154:6: error: too many arguments to function 'pte_user_accessible_page'
if (pte_user_accessible_page(mm, addr, pte))
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from arch/powerpc/include/asm/book3s/pgtable.h:8,
from arch/powerpc/include/asm/pgtable.h:18,
from include/linux/pgtable.h:6,
from include/linux/mm.h:32,
from mm/page_table_check.c:8:
arch/powerpc/include/asm/book3s/32/pgtable.h:441:20: note: declared here
static inline bool pte_user_accessible_page(pte_t pte, unsigned long addr)
^~~~~~~~~~~~~~~~~~~~~~~~
mm/page_table_check.c: In function '__page_table_check_pmd_clear':
>> mm/page_table_check.c:165:44: error: macro "pmd_user_accessible_page" passed 3 arguments, but takes just 2
if (pmd_user_accessible_page(mm, addr, pmd))
^
>> mm/page_table_check.c:165:6: error: 'pmd_user_accessible_page' undeclared (first use in this function); did you mean 'pte_user_accessible_page'?
if (pmd_user_accessible_page(mm, addr, pmd))
^~~~~~~~~~~~~~~~~~~~~~~~
pte_user_accessible_page
mm/page_table_check.c:165:6: note: each undeclared identifier is reported only once for each function it appears in
mm/page_table_check.c: In function '__page_table_check_pud_clear':
>> mm/page_table_check.c:176:44: error: macro "pud_user_accessible_page" passed 3 arguments, but takes just 2
if (pud_user_accessible_page(mm, addr, pud))
^
>> mm/page_table_check.c:176:6: error: 'pud_user_accessible_page' undeclared (first use in this function); did you mean 'pte_user_accessible_page'?
if (pud_user_accessible_page(mm, addr, pud))
^~~~~~~~~~~~~~~~~~~~~~~~
pte_user_accessible_page
mm/page_table_check.c: In function '__page_table_check_ptes_set':
mm/page_table_check.c:211:31: warning: passing argument 1 of 'pte_user_accessible_page' makes integer from pointer without a cast [-Wint-conversion]
if (pte_user_accessible_page(mm, addr, pte))
^~
In file included from arch/powerpc/include/asm/book3s/pgtable.h:8,
from arch/powerpc/include/asm/pgtable.h:18,
from include/linux/pgtable.h:6,
from include/linux/mm.h:32,
from mm/page_table_check.c:8:
arch/powerpc/include/asm/book3s/32/pgtable.h:441:51: note: expected 'pte_t' {aka 'long unsigned int'} but argument is of type 'struct mm_struct *'
static inline bool pte_user_accessible_page(pte_t pte, unsigned long addr)
~~~~~~^~~
mm/page_table_check.c:211:6: error: too many arguments to function 'pte_user_accessible_page'
if (pte_user_accessible_page(mm, addr, pte))
^~~~~~~~~~~~~~~~~~~~~~~~
In file included from arch/powerpc/include/asm/book3s/pgtable.h:8,
from arch/powerpc/include/asm/pgtable.h:18,
from include/linux/pgtable.h:6,
from include/linux/mm.h:32,
from mm/page_table_check.c:8:
arch/powerpc/include/asm/book3s/32/pgtable.h:441:20: note: declared here
static inline bool pte_user_accessible_page(pte_t pte, unsigned long addr)
^~~~~~~~~~~~~~~~~~~~~~~~
mm/page_table_check.c: In function '__page_table_check_pmds_set':
mm/page_table_check.c:241:44: error: macro "pmd_user_accessible_page" passed 3 arguments, but takes just 2
if (pmd_user_accessible_page(mm, addr, pmd))
^
mm/page_table_check.c:241:6: error: 'pmd_user_accessible_page' undeclared (first use in this function); did you mean 'pte_user_accessible_page'?
if (pmd_user_accessible_page(mm, addr, pmd))
^~~~~~~~~~~~~~~~~~~~~~~~
pte_user_accessible_page
mm/page_table_check.c: In function '__page_table_check_puds_set':
mm/page_table_check.c:257:44: error: macro "pud_user_accessible_page" passed 3 arguments, but takes just 2
if (pud_user_accessible_page(mm, addr, pud))
^
mm/page_table_check.c:257:6: error: 'pud_user_accessible_page' undeclared (first use in this function); did you mean 'pte_user_accessible_page'?
if (pud_user_accessible_page(mm, addr, pud))
^~~~~~~~~~~~~~~~~~~~~~~~
pte_user_accessible_page
vim +/pte_user_accessible_page +154 mm/page_table_check.c
2
3 /*
4 * Copyright (c) 2021, Google LLC.
5 * Pasha Tatashin <pasha.tatashin@soleen.com>
6 */
7 #include <linux/kstrtox.h>
> 8 #include <linux/mm.h>
9 #include <linux/page_table_check.h>
10 #include <linux/swap.h>
11 #include <linux/leafops.h>
12
13 #undef pr_fmt
14 #define pr_fmt(fmt) "page_table_check: " fmt
15
16 struct page_table_check {
17 atomic_t anon_map_count;
18 atomic_t file_map_count;
19 };
20
21 static bool __page_table_check_enabled __initdata =
22 IS_ENABLED(CONFIG_PAGE_TABLE_CHECK_ENFORCED);
23
24 DEFINE_STATIC_KEY_TRUE(page_table_check_disabled);
25 EXPORT_SYMBOL(page_table_check_disabled);
26
27 static int __init early_page_table_check_param(char *buf)
28 {
29 return kstrtobool(buf, &__page_table_check_enabled);
30 }
31
32 early_param("page_table_check", early_page_table_check_param);
33
34 static bool __init need_page_table_check(void)
35 {
36 return __page_table_check_enabled;
37 }
38
39 static void __init init_page_table_check(void)
40 {
41 if (!__page_table_check_enabled)
42 return;
43 static_branch_disable(&page_table_check_disabled);
44 }
45
46 struct page_ext_operations page_table_check_ops = {
47 .size = sizeof(struct page_table_check),
48 .need = need_page_table_check,
49 .init = init_page_table_check,
50 .need_shared_flags = false,
51 };
52
53 static struct page_table_check *get_page_table_check(struct page_ext *page_ext)
54 {
55 BUG_ON(!page_ext);
56 return page_ext_data(page_ext, &page_table_check_ops);
57 }
58
59 /*
60 * An entry is removed from the page table, decrement the counters for that page
61 * verify that it is of correct type and counters do not become negative.
62 */
63 static void page_table_check_clear(unsigned long pfn, unsigned long pgcnt)
64 {
65 struct page_ext_iter iter;
66 struct page_ext *page_ext;
67 struct page *page;
68 bool anon;
69
70 if (!pfn_valid(pfn))
71 return;
72
73 page = pfn_to_page(pfn);
74 BUG_ON(PageSlab(page));
75 anon = PageAnon(page);
76
77 rcu_read_lock();
78 for_each_page_ext(page, pgcnt, page_ext, iter) {
79 struct page_table_check *ptc = get_page_table_check(page_ext);
80
81 if (anon) {
82 BUG_ON(atomic_read(&ptc->file_map_count));
83 BUG_ON(atomic_dec_return(&ptc->anon_map_count) < 0);
84 } else {
85 BUG_ON(atomic_read(&ptc->anon_map_count));
86 BUG_ON(atomic_dec_return(&ptc->file_map_count) < 0);
87 }
88 }
89 rcu_read_unlock();
90 }
91
92 /*
93 * A new entry is added to the page table, increment the counters for that page
94 * verify that it is of correct type and is not being mapped with a different
95 * type to a different process.
96 */
97 static void page_table_check_set(unsigned long pfn, unsigned long pgcnt,
98 bool rw)
99 {
100 struct page_ext_iter iter;
101 struct page_ext *page_ext;
102 struct page *page;
103 bool anon;
104
105 if (!pfn_valid(pfn))
106 return;
107
108 page = pfn_to_page(pfn);
109 BUG_ON(PageSlab(page));
110 anon = PageAnon(page);
111
112 rcu_read_lock();
113 for_each_page_ext(page, pgcnt, page_ext, iter) {
114 struct page_table_check *ptc = get_page_table_check(page_ext);
115
116 if (anon) {
117 BUG_ON(atomic_read(&ptc->file_map_count));
118 BUG_ON(atomic_inc_return(&ptc->anon_map_count) > 1 && rw);
119 } else {
120 BUG_ON(atomic_read(&ptc->anon_map_count));
121 BUG_ON(atomic_inc_return(&ptc->file_map_count) < 0);
122 }
123 }
124 rcu_read_unlock();
125 }
126
127 /*
128 * page is on free list, or is being allocated, verify that counters are zeroes
129 * crash if they are not.
130 */
131 void __page_table_check_zero(struct page *page, unsigned int order)
132 {
133 struct page_ext_iter iter;
134 struct page_ext *page_ext;
135
136 BUG_ON(PageSlab(page));
137
138 rcu_read_lock();
139 for_each_page_ext(page, 1 << order, page_ext, iter) {
140 struct page_table_check *ptc = get_page_table_check(page_ext);
141
142 BUG_ON(atomic_read(&ptc->anon_map_count));
143 BUG_ON(atomic_read(&ptc->file_map_count));
144 }
145 rcu_read_unlock();
146 }
147
148 void __page_table_check_pte_clear(struct mm_struct *mm, unsigned long addr,
149 pte_t pte)
150 {
151 if (&init_mm == mm)
152 return;
153
> 154 if (pte_user_accessible_page(mm, addr, pte))
155 page_table_check_clear(pte_pfn(pte), PAGE_SIZE >> PAGE_SHIFT);
156 }
157 EXPORT_SYMBOL(__page_table_check_pte_clear);
158
159 void __page_table_check_pmd_clear(struct mm_struct *mm, unsigned long addr,
160 pmd_t pmd)
161 {
162 if (&init_mm == mm)
163 return;
164
> 165 if (pmd_user_accessible_page(mm, addr, pmd))
166 page_table_check_clear(pmd_pfn(pmd), PMD_SIZE >> PAGE_SHIFT);
167 }
168 EXPORT_SYMBOL(__page_table_check_pmd_clear);
169
170 void __page_table_check_pud_clear(struct mm_struct *mm, unsigned long addr,
171 pud_t pud)
172 {
173 if (&init_mm == mm)
174 return;
175
> 176 if (pud_user_accessible_page(mm, addr, pud))
177 page_table_check_clear(pud_pfn(pud), PUD_SIZE >> PAGE_SHIFT);
178 }
179 EXPORT_SYMBOL(__page_table_check_pud_clear);
180
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-03-05 0:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-05 0:45 [linux-next:master 2981/3989] mm/page_table_check.c:154:6: error: too many arguments to function 'pte_user_accessible_page' kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox