Hi all, On Fri, 31 Oct 2025 12:38:33 +1100 Stephen Rothwell wrote: > > 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. I have decided to use the tip tree from next-20251030 for today. -- Cheers, Stephen Rothwell