• Mark Nelson's avatar
    powerpc/pseries: Fix kexec regression caused by CPPR tracking · 36350e00
    Mark Nelson authored
    The code to track the CPPR values added by commit
    49bd3647 ("powerpc/pseries: Track previous
    CPPR values to correctly EOI interrupts") broke kexec on pseries because
    the kexec code in xics.c calls xics_set_cpu_priority() before the IPI has
    been EOI'ed. This wasn't a problem previously but it now triggers a BUG_ON
    in xics_set_cpu_priority() because os_cppr->index isn't 0.
    
    Fix this problem by setting the index on the CPPR stack to 0 before calling
    xics_set_cpu_priority() in xics_teardown_cpu().
    
    Also make it clear that we only want to set the priority when there's just
    one CPPR value in the stack, and enforce it by updating the value of
    os_cppr->stack[0] rather than os_cppr->stack[os_cppr->index].
    
    While we're at it change the BUG_ON to a WARN_ON.
    Reported-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarMark Nelson <markn@au1.ibm.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    36350e00
xics.c 21.4 KB