Foundation patch to support checking of new flag for "paca->soft_enabled". Modify the condition checking for the "soft_enabled" from "equal" to "greater than or equal to".
Signed-off-by: Madhavan Srinivasan <ma...@linux.vnet.ibm.com> --- arch/powerpc/include/asm/exception-64s.h | 2 +- arch/powerpc/include/asm/hw_irq.h | 4 ++-- arch/powerpc/include/asm/irqflags.h | 2 +- arch/powerpc/kernel/entry_64.S | 4 ++-- arch/powerpc/kernel/irq.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index e24e63d216c4..44d3f539d8a5 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h @@ -408,7 +408,7 @@ label##_relon_hv: \ lbz r10,PACASOFTIRQEN(r13); \ cmpwi r10,LAZY_INTERRUPT_DISABLED; \ li r10,SOFTEN_VALUE_##vec; \ - beq masked_##h##interrupt + bge masked_##h##interrupt #define _SOFTEN_TEST(h, vec) __SOFTEN_TEST(h, vec) #define SOFTEN_TEST_PR(vec) \ diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index 2b87930e0e82..b7c7f1c6706f 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h @@ -94,7 +94,7 @@ static inline unsigned long arch_local_irq_save(void) static inline bool arch_irqs_disabled_flags(unsigned long flags) { - return flags == LAZY_INTERRUPT_DISABLED; + return flags >= LAZY_INTERRUPT_DISABLED; } static inline bool arch_irqs_disabled(void) @@ -139,7 +139,7 @@ static inline void may_hard_irq_enable(void) static inline bool arch_irq_disabled_regs(struct pt_regs *regs) { - return (regs->softe == LAZY_INTERRUPT_DISABLED); + return (regs->softe >= LAZY_INTERRUPT_DISABLED); } extern bool prep_irq_for_idle(void); diff --git a/arch/powerpc/include/asm/irqflags.h b/arch/powerpc/include/asm/irqflags.h index 6091e46f2455..235055fabf65 100644 --- a/arch/powerpc/include/asm/irqflags.h +++ b/arch/powerpc/include/asm/irqflags.h @@ -52,7 +52,7 @@ li __rA,LAZY_INTERRUPT_DISABLED; \ ori __rB,__rB,PACA_IRQ_HARD_DIS; \ stb __rB,PACAIRQHAPPENED(r13); \ - beq 44f; \ + bge 44f; \ stb __rA,PACASOFTIRQEN(r13); \ TRACE_DISABLE_INTS; \ 44: diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index cade169a7517..7ab6bfff653e 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -766,7 +766,7 @@ restore: ld r5,SOFTE(r1) lbz r6,PACASOFTIRQEN(r13) cmpwi cr0,r5,LAZY_INTERRUPT_DISABLED - beq restore_irq_off + bge restore_irq_off /* We are enabling, were we already enabled ? Yes, just return */ cmpwi cr0,r6,LAZY_INTERRUPT_ENABLED @@ -1012,7 +1012,7 @@ _GLOBAL(enter_rtas) * check it with the asm equivalent of WARN_ON */ lbz r0,PACASOFTIRQEN(r13) -1: tdnei r0,LAZY_INTERRUPT_DISABLED +1: tdeqi r0,LAZY_INTERRUPT_ENABLED EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING #endif diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 9b9b6df8d83d..597c20d1814c 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -202,7 +202,7 @@ notrace void arch_local_irq_restore(unsigned long en) /* Write the new soft-enabled value */ set_soft_enabled(en); - if (en == LAZY_INTERRUPT_DISABLED) + if (en >= LAZY_INTERRUPT_DISABLED) return; /* * From this point onward, we can take interrupts, preempt, @@ -247,7 +247,7 @@ notrace void arch_local_irq_restore(unsigned long en) } #endif /* CONFIG_TRACE_IRQFLAG */ - set_soft_enabled(LAZY_INTERRUPT_DISABLED); + set_soft_enabled(en); /* * Check if anything needs to be re-emitted. We haven't -- 2.7.4 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev