Peter Zijlstra <peterz@xxxxxxxxxxxxx> writes: > On Tue, May 16, 2023 at 03:38:09PM +0200, Sven Schnelle wrote: >> @@ -465,4 +470,175 @@ irqentry_state_t noinstr irqentry_nmi_enter(struct pt_regs *regs); >> */ >> void noinstr irqentry_nmi_exit(struct pt_regs *regs, irqentry_state_t irq_state); >> >> +static unsigned long exit_to_user_mode_loop(struct pt_regs *regs, >> + unsigned long ti_work) > > Should these things not grow __always_inline/inline when moved into a header? Is that actually what is desired? This is a header file that should only be included once isn't it? >> +{ > >> +} >> + >> + >> +static void exit_to_user_mode_prepare(struct pt_regs *regs) > > idem > >> +{ > >> +} > >> +static void syscall_exit_work(struct pt_regs *regs, unsigned long work) > > and more.. > >> +{ > >> +} >> + Perhaps it would make most sense just to change the idiom to include the .c file. That would give the optimizer every opportunity to inline static functions, while strongly suggesting this file should be included only once. Is this maybe a s390 specific problem because the s390 has something like ancient calling conventions that are not as efficient as they should be. Eric