]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
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)
committerPaolo Pisati <paolo.pisati@canonical.com>
Mon, 4 Jan 2021 15:47:24 +0000 (16:47 +0100)
BugLink: https://bugs.launchpad.net/bugs/1910111
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>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
arch/s390/purgatory/head.S

index 5a10ce34b95d10c9f1d7762761dd5507c9d7b2e0..3d1c31e0cf3dd7e37dc382350a843a8c78f5657b 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: