s390/kexec_file: fix diag308 subcode when loading crash kernel
authorPhilipp Rudo <prudo@linux.ibm.com>
Thu, 26 Nov 2020 17:31:08 +0000 (18:31 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Dec 2020 10:54:08 +0000 (11:54 +0100)
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: <stable@vger.kernel.org> # 4.17
Signed-off-by: Philipp Rudo <prudo@linux.ibm.com>
Reported-by: Xiaoying Yan <yiyan@redhat.com>
Tested-by: Lianbo Jiang <lijiang@redhat.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/s390/purgatory/head.S

index 5a10ce3..3d1c31e 100644 (file)
        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: