• Nicholas Piggin's avatar
    powerpc/64s/idle: Process interrupts from system reset wakeup · 771d4304
    Nicholas Piggin authored
    When the CPU wakes from low power state, it begins at the system reset
    interrupt with the exception that caused the wakeup encoded in SRR1.
    
    Today, powernv idle wakeup ignores the wakeup reason (except a special
    case for HMI), and the regular interrupt corresponding to the
    exception will fire after the idle wakeup exits.
    
    Change this to replay the interrupt from the idle wakeup before
    interrupts are hard-enabled.
    
    Test on POWER8 of context_switch selftests benchmark with polling idle
    disabled (e.g., always nap, giving cross-CPU IPIs) gives the following
    results:
    
                                    original         wakeup direct
    Different threads, same core:   315k/s           264k/s
    Different cores:                235k/s           242k/s
    
    There is a slowdown for doorbell IPI (same core) case because system
    reset wakeup does not clear the message and the doorbell interrupt
    fires again needlessly.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    771d4304
irq.c 18.7 KB