From: kernel test robot <lkp@intel.com>
To: Yeoreum Yun <yeoreum.yun@arm.com>
Cc: oe-kbuild-all@lists.linux.dev,
"David Hildenbrand (Arm)" <david@kernel.org>
Subject: [davidhildenbrand:folded_pgtable 17/28] arch/nios2/mm/fault.c:231:39: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'p4d_k'
Date: Wed, 08 Jul 2026 10:37:50 +0800 [thread overview]
Message-ID: <202607081001.D20Pg1h9-lkp@intel.com> (raw)
tree: https://github.com/davidhildenbrand/linux folded_pgtable
head: 710c0f29eb829f67c4c0d1c2a3f764b286282229
commit: bdd0e7f6c7062ca47a16ca208ab1de07161ec049 [17/28] nios2: mm: use proper set_pXd() for folded patable in vmalloc_fault path
config: nios2-allnoconfig (https://download.01.org/0day-ci/archive/20260708/202607081001.D20Pg1h9-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260708/202607081001.D20Pg1h9-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/202607081001.D20Pg1h9-lkp@intel.com/
All errors (new ones prefixed by >>):
arch/nios2/mm/fault.c: In function 'do_page_fault':
>> arch/nios2/mm/fault.c:231:39: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'p4d_k'
231 | p4d_t *p4dp, *p4dp_k p4d_k;
| ^~~~~
>> arch/nios2/mm/fault.c:245:17: error: 'p4dp_k' undeclared (first use in this function); did you mean 'pmdp_k'?
245 | p4dp_k = p4d_offset(pgdp_k, address);
| ^~~~~~
| pmdp_k
arch/nios2/mm/fault.c:245:17: note: each undeclared identifier is reported only once for each function it appears in
>> arch/nios2/mm/fault.c:246:17: error: 'p4d_k' undeclared (first use in this function); did you mean 'pmd_k'?
246 | p4d_k = p4dp_get(p4dp_k);
| ^~~~~
| pmd_k
>> arch/nios2/mm/fault.c:252:17: error: 'pud' undeclared (first use in this function); did you mean 'pudp'?
252 | pud = pud_offset(p4dp, address);
| ^~~
| pudp
In file included from arch/nios2/include/asm/pgtable.h:25,
from include/linux/pgtable.h:6,
from include/linux/mm.h:31,
from include/linux/pid_namespace.h:7,
from include/linux/ptrace.h:10,
from arch/nios2/mm/fault.c:22:
arch/nios2/mm/fault.c:258:39: error: incompatible types when initializing type 'long unsigned int' using type 'pud_t'
258 | set_p4d(pudp, pud_k);
| ^~~~~
include/asm-generic/pgtable-nopmd.h:45:86: note: in definition of macro 'set_pud'
45 | #define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval })
| ^~~~~~
arch/nios2/mm/fault.c:258:25: note: in expansion of macro 'set_p4d'
258 | set_p4d(pudp, pud_k);
| ^~~~~~~
arch/nios2/mm/fault.c:261:37: error: incompatible type for argument 1 of 'pmd_offset'
261 | pmdp_k = pmd_offset(pud_k, address);
| ^~~~~
| |
| pud_t
In file included from arch/nios2/include/asm/pgtable.h:25,
from include/linux/pgtable.h:6,
from include/linux/mm.h:31,
from include/linux/pid_namespace.h:7,
from include/linux/ptrace.h:10,
from arch/nios2/mm/fault.c:22:
include/asm-generic/pgtable-nopmd.h:47:42: note: expected 'pud_t *' but argument is of type 'pud_t'
47 | static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
| ~~~~~~~~^~~
vim +231 arch/nios2/mm/fault.c
37
38 /*
39 * This routine handles page faults. It determines the address,
40 * and the problem, and then passes it off to one of the appropriate
41 * routines.
42 */
43 asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long cause,
44 unsigned long address)
45 {
46 struct vm_area_struct *vma = NULL;
47 struct task_struct *tsk = current;
48 struct mm_struct *mm = tsk->mm;
49 int code = SEGV_MAPERR;
50 vm_fault_t fault;
51 unsigned int flags = FAULT_FLAG_DEFAULT;
52
53 cause >>= 2;
54
55 /* Restart the instruction */
56 regs->ea -= 4;
57
58 /*
59 * We fault-in kernel-space virtual memory on-demand. The
60 * 'reference' page table is init_mm.pgd.
61 *
62 * NOTE! We MUST NOT take any locks for this case. We may
63 * be in an interrupt or a critical region, and should
64 * only copy the information from the master page table,
65 * nothing more.
66 */
67 if (unlikely(address >= VMALLOC_START && address <= VMALLOC_END)) {
68 if (user_mode(regs))
69 goto bad_area_nosemaphore;
70 else
71 goto vmalloc_fault;
72 }
73
74 if (unlikely(address >= TASK_SIZE))
75 goto bad_area_nosemaphore;
76
77 /*
78 * If we're in an interrupt or have no user
79 * context, we must not take the fault..
80 */
81 if (faulthandler_disabled() || !mm)
82 goto bad_area_nosemaphore;
83
84 if (user_mode(regs))
85 flags |= FAULT_FLAG_USER;
86
87 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
88
89 retry:
90 vma = lock_mm_and_find_vma(mm, address, regs);
91 if (!vma)
92 goto bad_area_nosemaphore;
93 /*
94 * Ok, we have a good vm_area for this memory access, so
95 * we can handle it..
96 */
97 code = SEGV_ACCERR;
98
99 switch (cause) {
100 case EXC_SUPERV_INSN_ACCESS:
101 goto bad_area;
102 case EXC_SUPERV_DATA_ACCESS:
103 goto bad_area;
104 case EXC_X_PROTECTION_FAULT:
105 if (!(vma->vm_flags & VM_EXEC))
106 goto bad_area;
107 break;
108 case EXC_R_PROTECTION_FAULT:
109 if (!(vma->vm_flags & VM_READ))
110 goto bad_area;
111 break;
112 case EXC_W_PROTECTION_FAULT:
113 if (!(vma->vm_flags & VM_WRITE))
114 goto bad_area;
115 flags = FAULT_FLAG_WRITE;
116 break;
117 }
118
119 /*
120 * If for any reason at all we couldn't handle the fault,
121 * make sure we exit gracefully rather than endlessly redo
122 * the fault.
123 */
124 fault = handle_mm_fault(vma, address, flags, regs);
125
126 if (fault_signal_pending(fault, regs)) {
127 if (!user_mode(regs))
128 goto no_context;
129 return;
130 }
131
132 /* The fault is fully completed (including releasing mmap lock) */
133 if (fault & VM_FAULT_COMPLETED)
134 return;
135
136 if (unlikely(fault & VM_FAULT_ERROR)) {
137 if (fault & VM_FAULT_OOM)
138 goto out_of_memory;
139 else if (fault & VM_FAULT_SIGSEGV)
140 goto bad_area;
141 else if (fault & VM_FAULT_SIGBUS)
142 goto do_sigbus;
143 BUG();
144 }
145
146 if (fault & VM_FAULT_RETRY) {
147 flags |= FAULT_FLAG_TRIED;
148
149 /*
150 * No need to mmap_read_unlock(mm) as we would
151 * have already released it in __lock_page_or_retry
152 * in mm/filemap.c.
153 */
154
155 goto retry;
156 }
157
158 mmap_read_unlock(mm);
159 return;
160
161 /*
162 * Something tried to access memory that isn't in our memory map..
163 * Fix it, but check if it's kernel or user first..
164 */
165 bad_area:
166 mmap_read_unlock(mm);
167
168 bad_area_nosemaphore:
169 /* User mode accesses just cause a SIGSEGV */
170 if (user_mode(regs)) {
171 if (unhandled_signal(current, SIGSEGV) && printk_ratelimit()) {
172 pr_info("%s: unhandled page fault (%d) at 0x%08lx, "
173 "cause %ld\n", current->comm, SIGSEGV, address, cause);
174 show_regs(regs);
175 }
176 _exception(SIGSEGV, regs, code, address);
177 return;
178 }
179
180 no_context:
181 /* Are we prepared to handle this kernel fault? */
182 if (fixup_exception(regs))
183 return;
184
185 /*
186 * Oops. The kernel tried to access some bad page. We'll have to
187 * terminate things with extreme prejudice.
188 */
189 bust_spinlocks(1);
190
191 pr_alert("Unable to handle kernel %s at virtual address %08lx",
192 address < PAGE_SIZE ? "NULL pointer dereference" :
193 "paging request", address);
194 pr_alert("ea = %08lx, ra = %08lx, cause = %ld\n", regs->ea, regs->ra,
195 cause);
196 panic("Oops");
197 return;
198
199 /*
200 * We ran out of memory, or some other thing happened to us that made
201 * us unable to handle the page fault gracefully.
202 */
203 out_of_memory:
204 mmap_read_unlock(mm);
205 if (!user_mode(regs))
206 goto no_context;
207 pagefault_out_of_memory();
208 return;
209
210 do_sigbus:
211 mmap_read_unlock(mm);
212
213 /* Kernel mode? Handle exceptions or die */
214 if (!user_mode(regs))
215 goto no_context;
216
217 _exception(SIGBUS, regs, BUS_ADRERR, address);
218 return;
219
220 vmalloc_fault:
221 {
222 /*
223 * Synchronize this task's top level page-table
224 * with the 'reference' page table.
225 *
226 * Do _not_ use "tsk" here. We might be inside
227 * an interrupt in the middle of a task switch..
228 */
229 int offset = pgd_index(address);
230 pgd_t *pgdp, *pgdp_k, pgd_k;
> 231 p4d_t *p4dp, *p4dp_k p4d_k;
232 pud_t *pudp, *pudp_k, pud_k;
233 pmd_t *pmdp, *pmdp_k, pmd_k;
234 pte_t *ptep_k;
235
236 pgdp = pgd_current + offset;
237 pgdp_k = init_mm.pgd + offset;
238 pgd_k = pgdp_get(pgdp_k);
239 if (!pgd_present(pgd_k))
240 goto no_context;
241 if (!pgd_present(pgdp_get(pgdp)))
242 set_pgd(pgdp, pgd_k);
243
244 p4dp = p4d_offset(pgdp, address);
> 245 p4dp_k = p4d_offset(pgdp_k, address);
> 246 p4d_k = p4dp_get(p4dp_k);
247 if (!p4d_present(p4d_k))
248 goto no_context;
249 if (!p4d_present(p4dp_get(p4dp)))
250 set_p4d(p4dp, p4d_k);
251
> 252 pud = pud_offset(p4dp, address);
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-07-08 2:38 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202607081001.D20Pg1h9-lkp@intel.com \
--to=lkp@intel.com \
--cc=david@kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=yeoreum.yun@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.