• Alexander Gordeev's avatar
    s390/kdump: rework invocation of DAT-off code · 82caf7ab
    Alexander Gordeev authored
    Calling kdump kernel is a two-step process that involves
    invocation of the purgatory code: first time - to verify
    the new kernel checksum and second time - to call the new
    kernel itself.
    
    The purgatory code operates on real addresses and does not
    expect any memory protection. Therefore, before the purgatory
    code is entered the DAT mode is always turned off. However,
    it is only restored upon return from the new kernel checksum
    verification. In case the purgatory was called to start the
    new kernel and failed the control is returned to the old
    kernel, but the DAT mode continues staying off.
    
    The new kernel start failure is unlikely and leads to the
    disabled wait state anyway. Still that poses a risk, since
    the kernel code in general is not DAT-off safe and even
    calling the disabled_wait() function might crash.
    
    Introduce call_nodat() macro that allows entering DAT-off
    mode, calling an arbitrary function and restoring DAT mode
    back on. Switch all invocations of DAT-off code to that
    macro and avoid the above described scenario altogether.
    
    Name the call_nodat() macro in small letters after the
    already existing call_on_stack() and put it to the same
    header file.
    Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    [hca@linux.ibm.com: some small modifications to call_nodat() macro]
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    82caf7ab
stacktrace.h 7.32 KB