]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
powerpc/64s/idle: Process interrupts from system reset wakeup
authorNicholas Piggin <npiggin@gmail.com>
Tue, 13 Jun 2017 13:05:47 +0000 (23:05 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 19 Jun 2017 09:46:27 +0000 (19:46 +1000)
commit771d4304d07f080b6ce751e12f3579cb012a1b22
treeec087d9bd222ab6ca1bc8b45c6e97c87570274fc
parent2525db04d1cc53e1951143d1829aa75a78cc7f76
powerpc/64s/idle: Process interrupts from system reset wakeup

When the CPU wakes from low power state, it begins at the system reset
interrupt with the exception that caused the wakeup encoded in SRR1.

Today, powernv idle wakeup ignores the wakeup reason (except a special
case for HMI), and the regular interrupt corresponding to the
exception will fire after the idle wakeup exits.

Change this to replay the interrupt from the idle wakeup before
interrupts are hard-enabled.

Test on POWER8 of context_switch selftests benchmark with polling idle
disabled (e.g., always nap, giving cross-CPU IPIs) gives the following
results:

                                original         wakeup direct
Different threads, same core:   315k/s           264k/s
Different cores:                235k/s           242k/s

There is a slowdown for doorbell IPI (same core) case because system
reset wakeup does not clear the message and the doorbell interrupt
fires again needlessly.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/hw_irq.h
arch/powerpc/kernel/irq.c
arch/powerpc/platforms/powernv/idle.c