• Benjamin Herrenschmidt's avatar
    powerpc: More fixes for lazy IRQ vs. idle · be2cf20a
    Benjamin Herrenschmidt authored
    Looks like we still have issues with pSeries and Cell idle code
    vs. the lazy irq state. In fact, the reset fixes that went upstream
    are exposing the problem more by causing BUG_ON() to trigger (which
    this patch turns into a WARN_ON instead).
    
    We need to be careful when using a variant of low power state that
    has the side effect of turning interrupts back on, to properly set
    all the SW & lazy state to look as if everything is enabled before
    we enter the low power state with MSR:EE off as we will return with
    MSR:EE on. If not, we have a discrepancy of state which can cause
    things to go very wrong later on.
    
    This patch moves the logic into a helper and uses it from the
    pseries and cell idle code. The power4/970 idle code already got
    things right (in assembly even !) so I'm not touching it. The power7
    "bare metal" idle code is subtly different and correct. Remains PA6T
    and some hypervisor based Cell platforms which have questionable
    code in there, but they are mostly dead platforms so I'll fix them
    when I manage to get final answers from the respective maintainers
    about how the low power state actually works on them.
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    CC: stable@vger.kernel.org [v3.4]
    be2cf20a
irq.c 17 KB