Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0fc12c02 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc/irq: Don't WARN continuously in arch_local_irq_restore()



When CONFIG_PPC_IRQ_SOFT_MASK_DEBUG is enabled (uncommon), we have a
series of WARN_ON's in arch_local_irq_restore().

These are "should never happen" conditions, but if they do happen they
can flood the console and render the system unusable. So switch them
to WARN_ON_ONCE().

Fixes: e2b36d59 ("powerpc/64: Don't trace code that runs with the soft irq mask unreconciled")
Fixes: 9b81c021 ("powerpc/64s: make PACA_IRQ_HARD_DIS track MSR[EE] closely")
Fixes: 7c0482e3 ("powerpc/irq: Fix another case of lazy IRQ state getting out of sync")
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190708061046.7075-1-mpe@ellerman.id.au
parent a2b6f26c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ notrace void arch_local_irq_restore(unsigned long mask)
	irq_happened = get_irq_happened();
	if (!irq_happened) {
#ifdef CONFIG_PPC_IRQ_SOFT_MASK_DEBUG
		WARN_ON(!(mfmsr() & MSR_EE));
		WARN_ON_ONCE(!(mfmsr() & MSR_EE));
#endif
		return;
	}
@@ -272,7 +272,7 @@ notrace void arch_local_irq_restore(unsigned long mask)
	 */
	if (!(irq_happened & PACA_IRQ_HARD_DIS)) {
#ifdef CONFIG_PPC_IRQ_SOFT_MASK_DEBUG
		WARN_ON(!(mfmsr() & MSR_EE));
		WARN_ON_ONCE(!(mfmsr() & MSR_EE));
#endif
		__hard_irq_disable();
#ifdef CONFIG_PPC_IRQ_SOFT_MASK_DEBUG
@@ -283,7 +283,7 @@ notrace void arch_local_irq_restore(unsigned long mask)
		 * warn if we are wrong. Only do that when IRQ tracing
		 * is enabled as mfmsr() can be costly.
		 */
		if (WARN_ON(mfmsr() & MSR_EE))
		if (WARN_ON_ONCE(mfmsr() & MSR_EE))
			__hard_irq_disable();
#endif
	}