From: Philipp Rudo <pr...@linux.ibm.com>

commit 613775d62ec60202f98d2c5f520e6e9ba6dd4ac4 upstream.

diag308 subcode 0 performes a clear reset which inlcudes the reset of
all registers in the system. While this is the preferred behavior when
loading a normal kernel via kexec it prevents the crash kernel to store
the register values in the dump. To prevent this use subcode 1 when
loading a crash kernel instead.

Fixes: ee337f5469fd ("s390/kexec_file: Add crash support to image loader")
Cc: <sta...@vger.kernel.org> # 4.17
Signed-off-by: Philipp Rudo <pr...@linux.ibm.com>
Reported-by: Xiaoying Yan <yi...@redhat.com>
Tested-by: Lianbo Jiang <liji...@redhat.com>
Signed-off-by: Heiko Carstens <h...@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 arch/s390/purgatory/head.S |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/arch/s390/purgatory/head.S
+++ b/arch/s390/purgatory/head.S
@@ -62,14 +62,15 @@
        jh      10b
 .endm
 
-.macro START_NEXT_KERNEL base
+.macro START_NEXT_KERNEL base subcode
        lg      %r4,kernel_entry-\base(%r13)
        lg      %r5,load_psw_mask-\base(%r13)
        ogr     %r4,%r5
        stg     %r4,0(%r0)
 
        xgr     %r0,%r0
-       diag    %r0,%r0,0x308
+       lghi    %r1,\subcode
+       diag    %r0,%r1,0x308
 .endm
 
 .text
@@ -123,7 +124,7 @@ ENTRY(purgatory_start)
        je      .start_crash_kernel
 
        /* start normal kernel */
-       START_NEXT_KERNEL .base_crash
+       START_NEXT_KERNEL .base_crash 0
 
 .return_old_kernel:
        lmg     %r6,%r15,gprregs-.base_crash(%r13)
@@ -227,7 +228,7 @@ ENTRY(purgatory_start)
        MEMCPY  %r9,%r10,%r11
 
        /* start crash kernel */
-       START_NEXT_KERNEL .base_dst
+       START_NEXT_KERNEL .base_dst 1
 
 
 load_psw_mask:


Reply via email to