]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/kdump: Make kdump ready for lowcore relocation
authorSven Schnelle <svens@linux.ibm.com>
Mon, 22 Jul 2024 13:41:27 +0000 (15:41 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 23 Jul 2024 14:02:32 +0000 (16:02 +0200)
In preparation of having lowcore at different address than zero,
add the base register to all lowcore accesses in store_status()
and __do_machine_kdump().

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/machine_kexec.c
arch/s390/kernel/reipl.S

index f4cf65da6d499f30f3ffe348263ab5b919426679..8f681ccfb83a1d6e21b5b9d707706c4796ca6977 100644 (file)
@@ -62,7 +62,7 @@ static void __do_machine_kdump(void *data)
         * This need to be done *after* s390_reset_system set the
         * prefix register of this CPU to zero
         */
-       memcpy(absolute_pointer(__LC_FPREGS_SAVE_AREA),
+       memcpy(absolute_pointer(get_lowcore()->floating_pt_save_area),
               phys_to_virt(prefix + __LC_FPREGS_SAVE_AREA), 512);
 
        call_nodat(1, int, purgatory, int, 1);
index 88087a32ebc6ef2ec2b1cbd2682056989795531c..69fcaf54d5ca5e34ba311d743ef27e482dd2e25c 100644 (file)
@@ -9,6 +9,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/nospec-insn.h>
 #include <asm/sigp.h>
+#include <asm/lowcore.h>
 
        GEN_BR_THUNK %r9
 
 # r3 = Parameter for function
 #
 SYM_CODE_START(store_status)
-       /* Save register one and load save area base */
-       stg     %r1,__LC_SAVE_AREA_RESTART
+       STMG_LC %r0,%r15,__LC_GPREGS_SAVE_AREA
        /* General purpose registers */
-       lghi    %r1,__LC_GPREGS_SAVE_AREA
-       stmg    %r0,%r15,0(%r1)
-       mvc     8(8,%r1),__LC_SAVE_AREA_RESTART
+       GET_LC  %r13
        /* Control registers */
-       lghi    %r1,__LC_CREGS_SAVE_AREA
-       stctg   %c0,%c15,0(%r1)
+       stctg   %c0,%c15,__LC_CREGS_SAVE_AREA(%r13)
        /* Access registers */
-       lghi    %r1,__LC_AREGS_SAVE_AREA
-       stam    %a0,%a15,0(%r1)
+       stamy   %a0,%a15,__LC_AREGS_SAVE_AREA(%r13)
        /* Floating point registers */
-       lghi    %r1,__LC_FPREGS_SAVE_AREA
+       lay     %r1,__LC_FPREGS_SAVE_AREA(%r13)
        std     %f0, 0x00(%r1)
        std     %f1, 0x08(%r1)
        std     %f2, 0x10(%r1)
@@ -51,21 +47,21 @@ SYM_CODE_START(store_status)
        std     %f14,0x70(%r1)
        std     %f15,0x78(%r1)
        /* Floating point control register */
-       lghi    %r1,__LC_FP_CREG_SAVE_AREA
+       lay     %r1,__LC_FP_CREG_SAVE_AREA(%r13)
        stfpc   0(%r1)
        /* CPU timer */
-       lghi    %r1,__LC_CPU_TIMER_SAVE_AREA
+       lay     %r1,__LC_CPU_TIMER_SAVE_AREA(%r13)
        stpt    0(%r1)
        /* Store prefix register */
-       lghi    %r1,__LC_PREFIX_SAVE_AREA
+       lay     %r1,__LC_PREFIX_SAVE_AREA(%r13)
        stpx    0(%r1)
        /* Clock comparator - seven bytes */
-       lghi    %r1,__LC_CLOCK_COMP_SAVE_AREA
        larl    %r4,clkcmp
        stckc   0(%r4)
+       lay     %r1,__LC_CLOCK_COMP_SAVE_AREA(%r13)
        mvc     1(7,%r1),1(%r4)
        /* Program status word */
-       lghi    %r1,__LC_PSW_SAVE_AREA
+       lay     %r1,__LC_PSW_SAVE_AREA(%r13)
        epsw    %r4,%r5
        st      %r4,0(%r1)
        st      %r5,4(%r1)