Split the implementation of idtentry_enter/exit() out into inline functions so that variants of idtentry_enter/exit() can be implemented without duplicating code.
Signed-off-by: Thomas Gleixner <t...@linutronix.de> diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index a1950aa90223..882ada245bd5 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -539,22 +539,7 @@ void noinstr idtentry_enter(struct pt_regs *regs) } } -/** - * idtentry_exit - Common code to handle return from exceptions - * @regs: Pointer to pt_regs (exception entry regs) - * - * Depending on the return target (kernel/user) this runs the necessary - * preemption and work checks if possible and required and returns to - * the caller with interrupts disabled and no further work pending. - * - * This is the last action before returning to the low level ASM code which - * just needs to return to the appropriate context. - * - * Invoked by all exception/interrupt IDTENTRY handlers which are not - * returning through the paranoid exit path (all except NMI, #DF and the IST - * variants of #MC and #DB) and are therefore on the thread stack. - */ -void noinstr idtentry_exit(struct pt_regs *regs) +static __always_inline void __idtentry_exit(struct pt_regs *regs) { lockdep_assert_irqs_disabled(); @@ -609,3 +594,23 @@ void noinstr idtentry_exit(struct pt_regs *regs) rcu_irq_exit(); } } + +/** + * idtentry_exit - Common code to handle return from exceptions + * @regs: Pointer to pt_regs (exception entry regs) + * + * Depending on the return target (kernel/user) this runs the necessary + * preemption and work checks if possible and required and returns to + * the caller with interrupts disabled and no further work pending. + * + * This is the last action before returning to the low level ASM code which + * just needs to return to the appropriate context. + * + * Invoked by all exception/interrupt IDTENTRY handlers which are not + * returning through the paranoid exit path (all except NMI, #DF and the IST + * variants of #MC and #DB) and are therefore on the thread stack. + */ +void noinstr idtentry_exit(struct pt_regs *regs) +{ + __idtentry_exit(regs); +}