• G
    powerpc/powernv: Fix bug due to labeling ambiguity in power_enter_stop · 424f8acd
    Gautham R. Shenoy 提交于
    Commit 09206b60 ("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: 09206b60 ("powernv: Pass PSSCR value and mask to power9_idle_stop")
    Signed-off-by: NGautham R. Shenoy <ego@linux.vnet.ibm.com>
    Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
    424f8acd
cpuidle.h 2.4 KB