diff options
author | Paul Mackerras <paulus@samba.org> | 2015-03-20 10:10:18 +1100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-03-23 15:06:50 +1100 |
commit | f57333a7677750f1264341d57bf1771000330458 (patch) | |
tree | 3666249b77114fa74d780abcd5133f360977661c /arch/powerpc/kernel | |
parent | b140e5b20ef893c59c86a23b6d923116a5a97862 (diff) | |
download | op-kernel-dev-f57333a7677750f1264341d57bf1771000330458.zip op-kernel-dev-f57333a7677750f1264341d57bf1771000330458.tar.gz |
powerpc/powernv: Fix return value from power7_nap() et al.
The power7_nap(), power7_sleep() and power7_winkle() functions are
called from pnv_smp_cpu_kill_self(), which expects them to return the
SRR1 value set by the hardware on wakeup, or 0 if no nap/sleep/winkle
occurred. However, in the case where an interrupt needs to be
replayed, the logic in power7_powersave_common (the common code for
power7_nap et al.) doesn't set r3 to 0 in this case. Instead what we
get as the return value is the selector for the type of power-saving
mode requested (1, 2 or 3). In fact this should not affect the
operation of pnv_smp_cpu_kill_self(), but it is better to get this
correct, so this adds an instruction to set r3 to 0 in this case.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/idle_power7.S | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S index 05adc8b..eeaa0d5 100644 --- a/arch/powerpc/kernel/idle_power7.S +++ b/arch/powerpc/kernel/idle_power7.S @@ -94,6 +94,7 @@ _GLOBAL(power7_powersave_common) beq 1f addi r1,r1,INT_FRAME_SIZE ld r0,16(r1) + li r3,0 /* Return 0 (no nap) */ mtlr r0 blr |