Can be called from architecture dependent code, and simply calls __enter_from_user_mode(). This way __enter_from_user_mode can still be inlined because it is declared static.
Signed-off-by: Sven Schnelle <sv...@linux.ibm.com> --- include/linux/entry-common.h | 11 +++++++++++ kernel/entry/common.c | 15 +++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index 474f29638d2c..28a8554fad7d 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -402,4 +402,15 @@ void irqentry_exit_cond_resched(void); */ void noinstr irqentry_exit(struct pt_regs *regs, irqentry_state_t state); +/** + * enter_from_user_mode - Establish state when coming from user mode + * + * Syscall/interrupt entry disables interrupts, but user mode is traced as + * interrupts enabled. Also with NO_HZ_FULL RCU might be idle. + * + * 1) Tell lockdep that interrupts are disabled + * 2) Invoke context tracking if enabled to reactivate RCU + * 3) Trace interrupts off state + */ +void enter_from_user_mode(struct pt_regs *regs); #endif diff --git a/kernel/entry/common.c b/kernel/entry/common.c index 076ee1cde67f..ee588ee9f122 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -8,16 +8,6 @@ #define CREATE_TRACE_POINTS #include <trace/events/syscalls.h> -/** - * __enter_from_user_mode - Establish state when coming from user mode - * - * Syscall/interrupt entry disables interrupts, but user mode is traced as - * interrupts enabled. Also with NO_HZ_FULL RCU might be idle. - * - * 1) Tell lockdep that interrupts are disabled - * 2) Invoke context tracking if enabled to reactivate RCU - * 3) Trace interrupts off state - */ static __always_inline void __enter_from_user_mode(struct pt_regs *regs) { arch_check_user_regs(regs); @@ -31,6 +21,11 @@ static __always_inline void __enter_from_user_mode(struct pt_regs *regs) instrumentation_end(); } +void noinstr enter_from_user_mode(struct pt_regs *regs) +{ + __enter_from_user_mode(regs); +} + static inline void syscall_enter_audit(struct pt_regs *regs, long syscall) { if (unlikely(audit_context())) { -- 2.17.1