]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/rtas: Call enter_rtas with MSR[EE] disabled
authorNicholas Piggin <npiggin@gmail.com>
Tue, 8 Mar 2022 13:50:37 +0000 (23:50 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 19 May 2022 13:11:27 +0000 (23:11 +1000)
Disable MSR[EE] in C code rather than asm.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Laurent Dufour <ldufour@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220308135047.478297-5-npiggin@gmail.com
arch/powerpc/kernel/rtas.c
arch/powerpc/kernel/rtas_entry.S

index 03d173b1e5991089cf636ead5108c0b9ccd91e90..c1403dc4fd66a49850a709fa884f4c713bb282fe 100644 (file)
@@ -59,6 +59,10 @@ static inline void do_enter_rtas(unsigned long args)
        msr = mfmsr();
        BUG_ON(!(msr & MSR_RI));
 
+       BUG_ON(!irqs_disabled());
+
+       hard_irq_disable(); /* Ensure MSR[EE] is disabled on PPC64 */
+
        enter_rtas(args);
 
        srr_regs_clobbered(); /* rtas uses SRRs, invalidate */
index b3149b80efbedecf20d00f2755d10784f763a529..acf90a15e39d51b93e86e222795b4b98db3a295c 100644 (file)
@@ -24,8 +24,6 @@ _GLOBAL(enter_rtas)
        lwz     r4,RTASBASE(r4)
        mfmsr   r9
        stw     r9,8(r1)
-       LOAD_REG_IMMEDIATE(r0,MSR_KERNEL)
-       mtmsr   r0      /* disable interrupts so SRR0/1 don't get trashed */
        li      r9,MSR_KERNEL & ~(MSR_IR|MSR_DR)
        mtlr    r6
        stw     r1, THREAD + RTAS_SP(r2)
@@ -87,20 +85,7 @@ _GLOBAL(enter_rtas)
        li      r0,0
        mtcr    r0
 
-#ifdef CONFIG_BUG
-       /* There is no way it is acceptable to get here with interrupts enabled,
-        * check it with the asm equivalent of WARN_ON
-        */
-       lbz     r0,PACAIRQSOFTMASK(r13)
-1:     tdeqi   r0,IRQS_ENABLED
-       EMIT_WARN_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
-#endif
-
-       /* Hard-disable interrupts */
        mfmsr   r6
-       rldicl  r7,r6,48,1
-       rotldi  r7,r7,16
-       mtmsrd  r7,1
 
        /* Unfortunately, the stack pointer and the MSR are also clobbered,
         * so they are saved in the PACA which allows us to restore