• Gautham R. Shenoy's avatar
    powerpc/powernv/idle: Decouple Timebase restore & Per-core SPRs restore · ec486735
    Gautham R. Shenoy authored
    On POWER8, in case of
       -  nap: both timebase and hypervisor state is retained.
       -  fast-sleep: timebase is lost. But the hypervisor state is retained.
       -  winkle: timebase and hypervisor state is lost.
    Hence, the current code for handling exit from a idle state assumes
    that if the timebase value is retained, then so is the hypervisor
    state. Thus, the current code doesn't restore per-core hypervisor
    state in such cases.
    But that is no longer the case on POWER9 where we do have stop states
    in which timebase value is retained, but the hypervisor state is
    lost. So we have to ensure that the per-core hypervisor state gets
    restored in such cases.
    Fix this by ensuring that even in the case when timebase is retained,
    we explicitly check if we are waking up from a deep stop that loses
    per-core hypervisor state (indicated by cr4 being eq or gt), and if
    this is the case, we restore the per-core hypervisor state.
    Signed-off-by: default avatarGautham R. Shenoy <ego@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>