• Vasily Gorbik's avatar
    s390/entry: avoid setting up backchain in ext|io handlers · b74e409e
    Vasily Gorbik authored
    Currently when interrupt arrives to cpu while in kernel context
    INT_HANDLER macro (used for ext_int_handler and io_int_handler)
    allocates new stack frame and pt_regs on the kernel stack and
    sets up the backchain to jump over the pt_regs to the frame which has
    been interrupted. This is not ideal to two reasons:
    
    1. This hides the fact that kernel stack contains interrupt frame in it
       and hence breaks arch_stack_walk_reliable(), which needs to know that to
       guarantee "reliability" and checks that there are no pt_regs on the way.
    
    2. It breaks the backchain unwinder logic, which assumes that the next
       stack frame after an interrupt frame is reliable, while it is not.
       In some cases (when r14 contains garbage) this leads to early unwinding
       termination with an error, instead of marking frame as unreliable
       and continuing.
    
    To address that, only set backchain to 0.
    
    Fixes: 56e62a73 ("s390: convert to generic entry")
    Reviewed-by: default avatarSven Schnelle <svens@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    b74e409e
entry.S 18.3 KB