]> git.baikalelectronics.ru Git - kernel.git/commit
powerpc/powernv: Fix bug due to labeling ambiguity in power_enter_stop
authorGautham R. Shenoy <ego@linux.vnet.ibm.com>
Mon, 27 Feb 2017 05:40:07 +0000 (11:10 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 3 Mar 2017 00:24:50 +0000 (11:24 +1100)
commit27bb64be1a4808db085f27125e258a6a77491933
tree348d5c63218de5501791d521fd5df93ce7a7cf59
parentff4f3a004359898e81eef8cd757237f1f1e171c0
powerpc/powernv: Fix bug due to labeling ambiguity in power_enter_stop

Commit 5e442c8893da ("powernv: Pass PSSCR value and mask to
power9_idle_stop") added additional code in power_enter_stop() to
distinguish between stop requests whose PSSCR had ESL=EC=1 from those
which did not. When ESL=EC=1, we do a forward-jump to a location
labelled by "1", which had the code to handle the ESL=EC=1 case.

Unfortunately just a couple of instructions before this label, is the
macro IDLE_STATE_ENTER_SEQ() which also has a label "1" in its
expansion.

As a result, the current code can result in directly executing stop
instruction for deep stop requests with PSSCR ESL=EC=1, without saving
the hypervisor state.

Fix this BUG by labeling the location that handles ESL=EC=1 case with
a more descriptive label ".Lhandle_esl_ec_set" (local label suggestion
a la .Lxx from Anton Blanchard).

While at it, rename the label "2" labelling the location of the code
handling entry into deep stop states with ".Lhandle_deep_stop".

For a good measure, change the label in IDLE_STATE_ENTER_SEQ() macro
to an not-so commonly used value in order to avoid similar mishaps in
the future.

Fixes: 5e442c8893da ("powernv: Pass PSSCR value and mask to power9_idle_stop")
Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/cpuidle.h
arch/powerpc/kernel/idle_book3s.S