[S390] Save prefix register for dump on panic
authorMichael Holzheu <holzheu@de.ibm.com>
Fri, 15 Dec 2006 16:18:27 +0000 (17:18 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 15 Dec 2006 16:18:27 +0000 (17:18 +0100)
The dump tools expect that the saved prefix register points to the
lowcore of the dump cpu. Since we set the prefix register to 0 during
reipl/dump, we have to save the original prefix register. Before we
start the dump program, we copy the original prefix register to the
designated location in the lowcore.

Signed-off-by: Michael Holzheu <holzheu@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/ipl.c
arch/s390/kernel/reipl.S
arch/s390/kernel/reipl64.S

index 48bfe402052b985adb633d5e8f3f738b5f14c36e..9e9972e8a52b64363241bfc11dc3061ad3cff1e4 100644 (file)
@@ -995,6 +995,7 @@ static void do_reset_calls(void)
 
 extern void reset_mcck_handler(void);
 extern void reset_pgm_handler(void);
+extern __u32 dump_prefix_page;
 
 void s390_reset_system(void)
 {
@@ -1005,6 +1006,9 @@ void s390_reset_system(void)
        /* Stack for interrupt/machine check handler */
        lc->panic_stack = S390_lowcore.panic_stack;
 
+       /* Save prefix page address for dump case */
+       dump_prefix_page = (unsigned long) lc;
+
        /* Disable prefixing */
        set_prefix(0);
 
index f9434d42ce9f60f65ec2b57d84684b4d82677300..c3f4d9b950836442f3d1f2d53c7166b79369af01 100644 (file)
@@ -16,7 +16,7 @@ do_reipl_asm: basr    %r13,0
                stm     %r0,%r15,__LC_GPREGS_SAVE_AREA
                stctl   %c0,%c15,__LC_CREGS_SAVE_AREA
                stam    %a0,%a15,__LC_AREGS_SAVE_AREA
-               stpx    __LC_PREFIX_SAVE_AREA
+               mvc     __LC_PREFIX_SAVE_AREA(4),dump_prefix_page-.Lpg0(%r13)
                stckc   .Lclkcmp-.Lpg0(%r13)
                mvc     __LC_CLOCK_COMP_SAVE_AREA(8),.Lclkcmp-.Lpg0(%r13)
                stpt    __LC_CPU_TIMER_SAVE_AREA
@@ -79,3 +79,7 @@ do_reipl_asm: basr    %r13,0
                .long   0x00000000,0x00000000
                .long   0x00000000,0x00000000
                .long   0x00000000,0x00000000
+       .globl dump_prefix_page
+dump_prefix_page:
+       .long 0x00000000
+
index f18ef260ca237bb53f9fb04958dbc99a0d4de886..dbb3eed38865fd88f8486ef4e5d63f6d62835f45 100644 (file)
@@ -20,7 +20,7 @@ do_reipl_asm: basr    %r13,0
                stg     %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1)
                stctg   %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1)
                stam    %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1)
-               stpx    __LC_PREFIX_SAVE_AREA-0x1000(%r1)
+               mvc     __LC_PREFIX_SAVE_AREA-0x1000(4,%r1),dump_prefix_page-.Lpg0(%r13)
                stfpc   __LC_FP_CREG_SAVE_AREA-0x1000(%r1)
                stckc   .Lclkcmp-.Lpg0(%r13)
                mvc     __LC_CLOCK_COMP_SAVE_AREA-0x1000(8,%r1),.Lclkcmp-.Lpg0(%r13)
@@ -103,3 +103,6 @@ do_reipl_asm:       basr    %r13,0
                .long   0x00000000,0x00000000
                .long   0x00000000,0x00000000
                .long   0x00000000,0x00000000
+       .globl dump_prefix_page
+dump_prefix_page:
+       .long 0x00000000