Hi all, On Fri, 31 Oct 2025 12:18:12 +1100 Stephen Rothwell wrote: > > On Fri, 31 Oct 2025 12:02:43 +1100 Stephen Rothwell wrote: > > > > After merging the tip tree, today's linux-next build (arm64 defconfig) > > failed like this: > > > > arch/arm64/kernel/entry-common.c: In function 'arm64_exit_to_user_mode': > > arch/arm64/kernel/entry-common.c:103:9: error: implicit declaration of function 'exit_to_user_mode_prepare'; did you mean 'arch_exit_to_user_mode_prepare'? [-Wimplicit-function-declaration] > > 103 | exit_to_user_mode_prepare(regs); > > | ^~~~~~~~~~~~~~~~~~~~~~~~~ > > | arch_exit_to_user_mode_prepare > > In file included from arch/arm64/include/asm/current.h:5, > > from include/linux/sched.h:12, > > from include/linux/context_tracking.h:5, > > from include/linux/irq-entry-common.h:5, > > from kernel/entry/common.c:3: > > kernel/entry/common.c: In function 'exit_to_user_mode_loop': > > kernel/entry/common.c:77:29: error: implicit declaration of function 'rseq_exit_to_user_mode_restart'; did you mean 'arch_exit_to_user_mode_prepare'? [-Wimplicit-function-declaration] > > 77 | if (likely(!rseq_exit_to_user_mode_restart(regs, ti_work))) > > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > include/linux/compiler.h:76:45: note: in definition of macro 'likely' > > 76 | # define likely(x) __builtin_expect(!!(x), 1) > > | ^ > > > > Caused by commit > > > > d58930640310 ("entry: Split up exit_to_user_mode_prepare()") > > > > and maybe following ones. > > > > I have reverted these commits for today: > > > > 69c8e3d16105 ("rseq: Switch to TIF_RSEQ if supported") > > 1b3dd1c538a8 ("rseq: Split up rseq_exit_to_user_mode()") > > d58930640310 ("entry: Split up exit_to_user_mode_prepare()") > > I also had to revert > > 84eeeb002035 ("rseq: Switch to fast path processing on exit to user") And then the sparc64 defconfig build failed like this: In file included from io_uring/io_uring.h:6, from io_uring/notif.c:8: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/notif.c:8: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/notif.c:8: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/notif.c:8: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/notif.o] Error 1 make[4]: *** Waiting for unfinished jobs.... In file included from io_uring/io_uring.h:6, from io_uring/opdef.c:12: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/opdef.c:12: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/opdef.c:12: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/opdef.c:12: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/opdef.o] Error 1 In file included from io_uring/io_uring.h:6, from io_uring/filetable.c:12: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/filetable.c:12: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/filetable.c:12: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/filetable.c:12: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/filetable.o] Error 1 arch/sparc/vdso/vclock_gettime.c:274:1: warning: no previous prototype for '__vdso_clock_gettime' [-Wmissing-prototypes] 274 | __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts) | ^~~~~~~~~~~~~~~~~~~~ arch/sparc/vdso/vclock_gettime.c:302:1: warning: no previous prototype for '__vdso_clock_gettime_stick' [-Wmissing-prototypes] 302 | __vdso_clock_gettime_stick(clockid_t clock, struct __kernel_old_timespec *ts) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ arch/sparc/vdso/vclock_gettime.c:327:1: warning: no previous prototype for '__vdso_gettimeofday' [-Wmissing-prototypes] 327 | __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) | ^~~~~~~~~~~~~~~~~~~ arch/sparc/vdso/vclock_gettime.c:363:1: warning: no previous prototype for '__vdso_gettimeofday_stick' [-Wmissing-prototypes] 363 | __vdso_gettimeofday_stick(struct __kernel_old_timeval *tv, struct timezone *tz) | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from io_uring/io_uring.h:6, from io_uring/tctx.c:12: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/tctx.c:12: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/tctx.c:12: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/tctx.c:12: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/tctx.o] Error 1 In file included from io_uring/io_uring.h:6, from io_uring/kbuf.c:15: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/kbuf.c:15: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/kbuf.c:15: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/kbuf.c:15: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/kbuf.o] Error 1 In file included from io_uring/io_uring.h:6, from io_uring/rw.c:19: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/rw.c:19: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/rw.c:19: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/rw.c:19: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/rw.o] Error 1 In file included from io_uring/io_uring.h:6, from io_uring/rsrc.c:17: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/rsrc.c:17: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/rsrc.c:17: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/rsrc.c:17: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/rsrc.o] Error 1 In file included from arch/sparc/vdso/vdso32/vclock_gettime.c:22: arch/sparc/vdso/vdso32/../vclock_gettime.c:274:1: warning: no previous prototype for '__vdso_clock_gettime' [-Wmissing-prototypes] 274 | __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts) | ^~~~~~~~~~~~~~~~~~~~ arch/sparc/vdso/vdso32/../vclock_gettime.c:302:1: warning: no previous prototype for '__vdso_clock_gettime_stick' [-Wmissing-prototypes] 302 | __vdso_clock_gettime_stick(clockid_t clock, struct __kernel_old_timespec *ts) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ arch/sparc/vdso/vdso32/../vclock_gettime.c:327:1: warning: no previous prototype for '__vdso_gettimeofday' [-Wmissing-prototypes] 327 | __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) | ^~~~~~~~~~~~~~~~~~~ arch/sparc/vdso/vdso32/../vclock_gettime.c:363:1: warning: no previous prototype for '__vdso_gettimeofday_stick' [-Wmissing-prototypes] 363 | __vdso_gettimeofday_stick(struct __kernel_old_timeval *tv, struct timezone *tz) | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from io_uring/io_uring.h:6, from io_uring/io_uring.c:83: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/io_uring.c:83: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from io_uring/io_uring.h:6, from io_uring/io_uring.c:83: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from io_uring/io_uring.h:6, from io_uring/io_uring.c:83: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[4]: *** [scripts/Makefile.build:287: io_uring/io_uring.o] Error 1 make[3]: *** [scripts/Makefile.build:556: io_uring] Error 2 make[3]: *** Waiting for unfinished jobs.... In file included from arch/sparc/kernel/signal_64.c:18: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from arch/sparc/kernel/signal_64.c:18: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from arch/sparc/kernel/signal_64.c:18: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from arch/sparc/kernel/signal_64.c:18: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[5]: *** [scripts/Makefile.build:287: arch/sparc/kernel/signal_64.o] Error 1 make[5]: *** Waiting for unfinished jobs.... make[4]: *** [scripts/Makefile.build:556: arch/sparc/kernel] Error 2 make[4]: *** Waiting for unfinished jobs.... make[3]: *** [scripts/Makefile.build:556: arch/sparc] Error 2 kernel/fork.c: In function '__do_sys_clone3': kernel/fork.c:2898:2: warning: #warning clone3() entry point is missing, please fix [-Wcpp] 2898 | #warning clone3() entry point is missing, please fix | ^~~~~~~ kernel/fork.c:2898:2: warning: #warning clone3() entry point is missing, please fix [-Wcpp] 2898 | #warning clone3() entry point is missing, please fix | ^~~~~~~ In file included from kernel/task_work.c:5: include/linux/resume_user_mode.h: In function 'resume_user_mode_work': include/linux/resume_user_mode.h:62:35: error: passing argument 1 of 'rseq_handle_notify_resume' from incompatible pointer type [-Werror=incompatible-pointer-types] 62 | rseq_handle_notify_resume(regs); | ^~~~ | | | struct pt_regs * In file included from include/linux/resume_user_mode.h:9, from kernel/task_work.c:5: include/linux/rseq.h:155:62: note: expected 'struct ksignal *' but argument is of type 'struct pt_regs *' 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ~~~~~~~~~~~~~~~~^~~~ In file included from kernel/task_work.c:5: include/linux/resume_user_mode.h:62:9: error: too few arguments to function 'rseq_handle_notify_resume' 62 | rseq_handle_notify_resume(regs); | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/resume_user_mode.h:9, from kernel/task_work.c:5: include/linux/rseq.h:155:20: note: declared here 155 | static inline void rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs) { } | ^~~~~~~~~~~~~~~~~~~~~~~~~ I will come back to this later today. -- Cheers, Stephen Rothwell