]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/powerpc/include/asm/hw_irq.h
powerpc: Replace mfmsr instructions with load from PACA kernel_msr field
[karo-tx-linux.git] / arch / powerpc / include / asm / hw_irq.h
index bb712c9488b3c74bcfb6f36c47322044e9c0992d..6c6fa955baa7c3c5c9f8855813bed7e07240458b 100644 (file)
@@ -68,8 +68,8 @@ static inline bool arch_irqs_disabled(void)
 #define __hard_irq_enable()    asm volatile("wrteei 1" : : : "memory");
 #define __hard_irq_disable()   asm volatile("wrteei 0" : : : "memory");
 #else
-#define __hard_irq_enable()    __mtmsrd(mfmsr() | MSR_EE, 1)
-#define __hard_irq_disable()   __mtmsrd(mfmsr() & ~MSR_EE, 1)
+#define __hard_irq_enable()    __mtmsrd(local_paca->kernel_msr | MSR_EE, 1)
+#define __hard_irq_disable()   __mtmsrd(local_paca->kernel_msr, 1)
 #endif
 
 #define  hard_irq_disable()                    \
@@ -79,6 +79,11 @@ static inline bool arch_irqs_disabled(void)
                get_paca()->hard_enabled = 0;   \
        } while(0)
 
+static inline bool arch_irq_disabled_regs(struct pt_regs *regs)
+{
+       return !regs->softe;
+}
+
 #else /* CONFIG_PPC64 */
 
 #define SET_MSR_EE(x)  mtmsr(x)
@@ -139,6 +144,11 @@ static inline bool arch_irqs_disabled(void)
 
 #define hard_irq_disable()             arch_local_irq_disable()
 
+static inline bool arch_irq_disabled_regs(struct pt_regs *regs)
+{
+       return !(regs->msr & MSR_EE);
+}
+
 #endif /* CONFIG_PPC64 */
 
 #define ARCH_IRQ_INIT_FLAGS    IRQ_NOREQUEST