s390/dump: remove SAVE_AREA_BASE
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 23 Oct 2015 07:05:38 +0000 (09:05 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 27 Nov 2015 08:24:14 +0000 (09:24 +0100)
Replace the SAVE_AREA_BASE offset calculations in reipl.S with the
assembler constant for the location of each register status area.

Use __LC_FPREGS_SAVE_AREA instead of SAVE_AREA_BASE in the three
remaining code locations and remove the definition of SAVE_AREA_BASE.

Acked-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/machine_kexec.c
arch/s390/kernel/reipl.S
arch/s390/kernel/smp.c
drivers/s390/char/zcore.c

index dc6c9c60454306b4d42ce37969432836f2b7c872..ae7b565b6c4c7872f3391f4980c538d9b0daa73a 100644 (file)
@@ -175,7 +175,6 @@ int main(void)
        /* hardware defined lowcore locations 0x1000 - 0x18ff */
        OFFSET(__LC_VX_SAVE_AREA_ADDR, _lowcore, vector_save_area_addr);
        OFFSET(__LC_EXT_PARAMS2, _lowcore, ext_params2);
-       OFFSET(SAVE_AREA_BASE, _lowcore, floating_pt_save_area);
        OFFSET(__LC_FPREGS_SAVE_AREA, _lowcore, floating_pt_save_area);
        OFFSET(__LC_GPREGS_SAVE_AREA, _lowcore, gpregs_save_area);
        OFFSET(__LC_PSW_SAVE_AREA, _lowcore, psw_save_area);
index 991b16819b974c3a8587afb1e0bd0d233a76cb39..bf2cd699556f39c790949c3fcaae74bf59e965ab 100644 (file)
@@ -44,11 +44,11 @@ static void setup_regs(void)
        int cpu, this_cpu;
 
        /* setup_regs is called with the prefix register = 0 */
-       sa_0 = (struct save_area *) SAVE_AREA_BASE;
+       sa_0 = (struct save_area *) __LC_FPREGS_SAVE_AREA;
 
        /* Get status of this CPU out of absolute zero */
        prefix = (unsigned long) S390_lowcore.prefixreg_save_area;
-       sa = (struct save_area *)(prefix + SAVE_AREA_BASE);
+       sa = (struct save_area *)(prefix + __LC_FPREGS_SAVE_AREA);
        memcpy(sa, sa_0, sizeof(struct save_area));
        if (MACHINE_HAS_VX) {
                struct _lowcore *lc = (struct _lowcore *) prefix;
@@ -63,7 +63,7 @@ static void setup_regs(void)
                if (smp_store_status(cpu))
                        continue;
                prefix = (unsigned long) S390_lowcore.prefixreg_save_area;
-               sa = (struct save_area *)(prefix + SAVE_AREA_BASE);
+               sa = (struct save_area *)(prefix + __LC_FPREGS_SAVE_AREA);
                memcpy(sa, sa_0, sizeof(struct save_area));
        }
 }
index 52aab0bd84f8933454a2b0e0624fd9f54c22f641..b75a521e4fabde4cc2fd125ce494092b62c8c882 100644 (file)
 ENTRY(store_status)
        /* Save register one and load save area base */
        stg     %r1,__LC_SAVE_AREA_RESTART
-       lghi    %r1,SAVE_AREA_BASE
        /* General purpose registers */
-       stmg    %r0,%r15,__LC_GPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       lg      %r2,__LC_SAVE_AREA_RESTART
-       stg     %r2,__LC_GPREGS_SAVE_AREA-SAVE_AREA_BASE+8(%r1)
+       lghi    %r1,__LC_GPREGS_SAVE_AREA
+       stmg    %r0,%r15,0(%r1)
+       mvc     8(8,%r1),__LC_SAVE_AREA_RESTART
        /* Control registers */
-       stctg   %c0,%c15,__LC_CREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
+       lghi    %r1,__LC_CREGS_SAVE_AREA
+       stctg   %c0,%c15,0(%r1)
        /* Access registers */
-       stam    %a0,%a15,__LC_AREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
+       lghi    %r1,__LC_AREGS_SAVE_AREA
+       stam    %a0,%a15,0(%r1)
        /* Floating point registers */
-       std     %f0, 0x00 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f1, 0x08 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f2, 0x10 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f3, 0x18 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f4, 0x20 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f5, 0x28 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f6, 0x30 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f7, 0x38 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f8, 0x40 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f9, 0x48 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f10,0x50 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f11,0x58 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f12,0x60 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f13,0x68 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f14,0x70 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
-       std     %f15,0x78 + __LC_FPREGS_SAVE_AREA-SAVE_AREA_BASE(%r1)
+       lghi    %r1,__LC_FPREGS_SAVE_AREA
+       std     %f0, 0x00(%r1)
+       std     %f1, 0x08(%r1)
+       std     %f2, 0x10(%r1)
+       std     %f3, 0x18(%r1)
+       std     %f4, 0x20(%r1)
+       std     %f5, 0x28(%r1)
+       std     %f6, 0x30(%r1)
+       std     %f7, 0x38(%r1)
+       std     %f8, 0x40(%r1)
+       std     %f9, 0x48(%r1)
+       std     %f10,0x50(%r1)
+       std     %f11,0x58(%r1)
+       std     %f12,0x60(%r1)
+       std     %f13,0x68(%r1)
+       std     %f14,0x70(%r1)
+       std     %f15,0x78(%r1)
        /* Floating point control register */
-       stfpc   __LC_FP_CREG_SAVE_AREA-SAVE_AREA_BASE(%r1)
+       lghi    %r1,__LC_FP_CREG_SAVE_AREA
+       stfpc   0(%r1)
        /* CPU timer */
-       stpt    __LC_CPU_TIMER_SAVE_AREA-SAVE_AREA_BASE(%r1)
+       lghi    %r1,__LC_CPU_TIMER_SAVE_AREA
+       stpt    0(%r1)
        /* Saved prefix register */
+       lghi    %r1,__LC_PREFIX_SAVE_AREA
        larl    %r2,dump_prefix_page
-       mvc     __LC_PREFIX_SAVE_AREA-SAVE_AREA_BASE(4,%r1),0(%r2)
+       mvc     0(4,%r1),0(%r2)
        /* Clock comparator - seven bytes */
+       lghi    %r1,__LC_CLOCK_COMP_SAVE_AREA
        larl    %r2,.Lclkcmp
        stckc   0(%r2)
-       mvc     __LC_CLOCK_COMP_SAVE_AREA-SAVE_AREA_BASE + 1(7,%r1),1(%r2)
+       mvc     1(7,%r1),1(%r2)
        /* Program status word */
+       lghi    %r1,__LC_PSW_SAVE_AREA
        epsw    %r2,%r3
-       st      %r2,__LC_PSW_SAVE_AREA-SAVE_AREA_BASE + 0(%r1)
-       st      %r3,__LC_PSW_SAVE_AREA-SAVE_AREA_BASE + 4(%r1)
+       st      %r2,0(%r1)
+       st      %r3,4(%r1)
        larl    %r2,store_status
-       stg     %r2,__LC_PSW_SAVE_AREA-SAVE_AREA_BASE + 8(%r1)
+       stg     %r2,8(%r1)
        br      %r14
 
        .section .bss
index 5e04acdc62904a1bcc7d17f26059fa34e539c454..d49a8cb404c25ec09fd85a0092216fad9388b745 100644 (file)
@@ -546,7 +546,7 @@ static void __init __smp_store_cpu_state(struct save_area_ext *sa_ext,
 
        if (is_boot_cpu) {
                /* Copy the registers of the boot CPU. */
-               copy_oldmem_kernel(&sa_ext->sa, (void *) SAVE_AREA_BASE,
+               copy_oldmem_kernel(&sa_ext->sa, (void *) __LC_FPREGS_SAVE_AREA,
                                   sizeof(sa_ext->sa));
                if (MACHINE_HAS_VX)
                        save_vx_regs_safe(sa_ext->vx_regs);
@@ -554,7 +554,7 @@ static void __init __smp_store_cpu_state(struct save_area_ext *sa_ext,
        }
        /* Get the registers of a non-boot cpu. */
        __pcpu_sigp_relax(address, SIGP_STOP_AND_STORE_STATUS, 0, NULL);
-       memcpy_real(&sa_ext->sa, lc + SAVE_AREA_BASE, sizeof(sa_ext->sa));
+       memcpy_real(&sa_ext->sa, lc + __LC_FPREGS_SAVE_AREA, sizeof(sa_ext->sa));
        if (!MACHINE_HAS_VX)
                return;
        /* Get the VX registers */
index 7d94c696c38beaee614a04f7373a6be474cc4a70..087da775c359e7d442dba23b075cec16bbdc8c15 100644 (file)
@@ -124,7 +124,7 @@ static int __init init_cpu_info(void)
        sa_ext = dump_save_areas.areas[0];
        if (!sa_ext)
                return -ENOMEM;
-       if (memcpy_hsa_kernel(&sa_ext->sa, SAVE_AREA_BASE,
+       if (memcpy_hsa_kernel(&sa_ext->sa, __LC_FPREGS_SAVE_AREA,
                              sizeof(struct save_area)) < 0) {
                TRACE("could not copy from HSA\n");
                return -EIO;