interrupt_exit_user_prepare() and interrupt_exit_kernel_prepare() get msr as second parameter from ASM. Use it instead of reading it again.
Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu> --- arch/powerpc/kernel/interrupt.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index d896fc6ed0be..9541328a97b1 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -231,8 +231,8 @@ static notrace void booke_load_dbcr0(void) #endif } -static notrace unsigned long __interrupt_exit_user_prepare(struct pt_regs *regs, unsigned long ret, - bool is_not_scv) +static notrace unsigned long __interrupt_exit_user_prepare(struct pt_regs *regs, unsigned long msr, + unsigned long ret, bool is_not_scv) { unsigned long ti_flags; @@ -281,7 +281,7 @@ static notrace unsigned long __interrupt_exit_user_prepare(struct pt_regs *regs, * may decide to restore them (to avoid taking an FP * fault). */ - if ((regs->msr & mathflags) != mathflags) + if ((msr & mathflags) != mathflags) restore_math(regs); } } @@ -297,7 +297,7 @@ static notrace unsigned long __interrupt_exit_user_prepare(struct pt_regs *regs, } #ifdef CONFIG_PPC_TRANSACTIONAL_MEM - local_paca->tm_scratch = regs->msr; + local_paca->tm_scratch = msr; #endif booke_load_dbcr0(); @@ -357,17 +357,17 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, ret |= _TIF_RESTOREALL; } - return __interrupt_exit_user_prepare(regs, ret, is_not_scv); + return __interrupt_exit_user_prepare(regs, regs->msr, ret, is_not_scv); } notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned long msr) { if (!IS_ENABLED(CONFIG_BOOKE) && !IS_ENABLED(CONFIG_40x)) - BUG_ON(!(regs->msr & MSR_RI)); - BUG_ON(!(regs->msr & MSR_PR)); + BUG_ON(!(msr & MSR_RI)); + BUG_ON(!(msr & MSR_PR)); BUG_ON(arch_irq_disabled_regs(regs)); - return __interrupt_exit_user_prepare(regs, 0, true); + return __interrupt_exit_user_prepare(regs, msr, 0, true); } void preempt_schedule_irq(void); @@ -379,9 +379,9 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign unsigned long kuap; if (!IS_ENABLED(CONFIG_BOOKE) && !IS_ENABLED(CONFIG_40x) && - unlikely(!(regs->msr & MSR_RI))) + unlikely(!(msr & MSR_RI))) unrecoverable_exception(regs); - BUG_ON(regs->msr & MSR_PR); + BUG_ON(msr & MSR_PR); /* * CT_WARN_ON comes here via program_check_exception, * so avoid recursion. @@ -400,7 +400,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign if (!arch_irq_disabled_regs(regs)) { /* Returning to a kernel context with local irqs enabled. */ - WARN_ON_ONCE(!(regs->msr & MSR_EE)); + WARN_ON_ONCE(!(msr & MSR_EE)); again: if (IS_ENABLED(CONFIG_PREEMPT)) { /* Return to preemptible kernel context */ @@ -416,14 +416,14 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign /* Returning to a kernel context with local irqs disabled. */ __hard_EE_RI_disable(); #ifdef CONFIG_PPC64 - if (regs->msr & MSR_EE) + if (msr & MSR_EE) local_paca->irq_happened &= ~PACA_IRQ_HARD_DIS; #endif } #ifdef CONFIG_PPC_TRANSACTIONAL_MEM - local_paca->tm_scratch = regs->msr; + local_paca->tm_scratch = msr; #endif /* -- 2.25.0