END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
 #endif /* CONFIG_VIRT_CPU_ACCOUNTING && CONFIG_PPC_SPLPAR */
 
-#ifdef CONFIG_TRACE_IRQFLAGS
-       bl      .trace_hardirqs_on
-       REST_GPR(0,r1)
-       REST_4GPRS(3,r1)
-       REST_2GPRS(7,r1)
-       addi    r9,r1,STACK_FRAME_OVERHEAD
-       ld      r12,_MSR(r1)
-#endif /* CONFIG_TRACE_IRQFLAGS */
-       li      r10,1
-       stb     r10,PACASOFTIRQEN(r13)
-       stb     r10,PACAHARDIRQEN(r13)
-       std     r10,SOFTE(r1)
+       /*
+        * A syscall should always be called with interrupts enabled
+        * so we just unconditionally hard-enable here. When some kind
+        * of irq tracing is used, we additionally check that condition
+        * is correct
+        */
+#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_BUG)
+       lbz     r10,PACASOFTIRQEN(r13)
+       xori    r10,r10,1
+1:     tdnei   r10,0
+       EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
+#endif
 
-       /* Hard enable interrupts */
 #ifdef CONFIG_PPC_BOOK3E
        wrteei  1
 #else
-       mfmsr   r11
+       ld      r11,PACAKMSR(r13)
        ori     r11,r11,MSR_EE
        mtmsrd  r11,1
 #endif /* CONFIG_PPC_BOOK3E */
 
+       /* We do need to set SOFTE in the stack frame or the return
+        * from interrupt will be painful
+        */
+       li      r10,1
+       std     r10,SOFTE(r1)
+
 #ifdef SHOW_SYSCALLS
        bl      .do_show_syscall
        REST_GPR(0,r1)
        andi.   r10,r8,MSR_RI
        beq-    unrecov_restore
 #endif
-
-       /* Disable interrupts so current_thread_info()->flags can't change,
+       /*
+        * Disable interrupts so current_thread_info()->flags can't change,
         * and so that we don't get interrupted after loading SRR0/1.
         */
 #ifdef CONFIG_PPC_BOOK3E
        wrteei  0
 #else
-       mfmsr   r10
-       rldicl  r10,r10,48,1
-       rotldi  r10,r10,16
+       ld      r10,PACAKMSR(r13)
        mtmsrd  r10,1
 #endif /* CONFIG_PPC_BOOK3E */
 
 #ifdef CONFIG_PPC_BOOK3E
        wrteei  1
 #else
-       mfmsr   r10
+       ld      r10,PACAKMSR(r13)
        ori     r10,r10,MSR_EE
        mtmsrd  r10,1
 #endif /* CONFIG_PPC_BOOK3E */