Subject: Re: linux-next: build failure after merge of the tip tree

From: Stephen Rothwell <[email-masked]>
Date: Fri, 31 Oct 2025 12:38:33 +1100

Hi all,

On Fri, 31 Oct 2025 12:18:12 +1100 Stephen Rothwell <[email-masked]> wrote:
>
> On Fri, 31 Oct 2025 12:02:43 +1100 Stephen Rothwell <[email-masked]> 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