Commit 8d6f7c5a: "powerpc/powernv: Make it possible to skip the IRQHAPPENED check in power7_nap()" added code that prevents cpus from checking for pending interrupts just before entering sleep state, which is wrong. A cpu cannot enter any idle state with pending interrupts.
Possible consequences of a cpu entering an idle state without checking for pending interrupts could be a device timeout or a more serious consequence in case of Power8 would be if doorbell IPIs are delivered when cpus have interrupts soft disabled. Precisely the state that the cpus are in just before entering an idle state on PowerPC. Interrupts delivered during soft disabled state are replayed when the interrupts are enabled again. Hence since a cpu goes to sleep with interrupts enabled again, it will receive any pending interrupts. However doorbell IPIs are not replayed even when the interrupts are re-enabled since they are edge triggered.Hence not checking for pending interrupts just before going to sleep state would mean that we will never take the doorbell IPI if it was delivered during the soft disabled state, unless some other interrupt wakes us up.This could result in the cpu that sent the doorbell IPI complaining that the sleeping cpu is stuck. This patch fixes these issues by ensuring that cpus check for pending interrupts just before entering any idle state as long as they are not in the path of split core operations. Signed-off-by: Preeti U Murthy <pre...@linux.vnet.ibm.com> Acked-by: Michael Neuling <mi...@neuling.org> --- Changes from V1: Modified the changelog to add the details of the problem that this patch fixes. arch/powerpc/kernel/idle_power7.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S index 2480256..5cf3d36 100644 --- a/arch/powerpc/kernel/idle_power7.S +++ b/arch/powerpc/kernel/idle_power7.S @@ -131,7 +131,7 @@ _GLOBAL(power7_nap) _GLOBAL(power7_sleep) li r3,1 - li r4,0 + li r4,1 b power7_powersave_common /* No return */ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/