Commit c5dd8586 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky

[S390] reipl: move dump_prefix_page out of text section.

Reipl doesn't work on older machines were s390_reset_machine() gets
called. The reason is that the text section is read-only but the
variable dump_prefix_page is there. Since s390_reset_machine() writes
to it we get a protection exception.
Therefore move dump_prefix_page to the bss section.
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 25864162
...@@ -1066,7 +1066,7 @@ static void do_reset_calls(void) ...@@ -1066,7 +1066,7 @@ static void do_reset_calls(void)
reset->fn(); reset->fn();
} }
extern __u32 dump_prefix_page; u32 dump_prefix_page;
void s390_reset_system(void) void s390_reset_system(void)
{ {
...@@ -1078,7 +1078,7 @@ void s390_reset_system(void) ...@@ -1078,7 +1078,7 @@ void s390_reset_system(void)
lc->panic_stack = S390_lowcore.panic_stack; lc->panic_stack = S390_lowcore.panic_stack;
/* Save prefix page address for dump case */ /* Save prefix page address for dump case */
dump_prefix_page = (unsigned long) lc; dump_prefix_page = (u32)(unsigned long) lc;
/* Disable prefixing */ /* Disable prefixing */
set_prefix(0); set_prefix(0);
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
#include <asm/lowcore.h> #include <asm/lowcore.h>
#
# do_reipl_asm
# Parameter: r2 = schid of reipl device
#
.globl do_reipl_asm .globl do_reipl_asm
do_reipl_asm: basr %r13,0 do_reipl_asm: basr %r13,0
.Lpg0: lpsw .Lnewpsw-.Lpg0(%r13) .Lpg0: lpsw .Lnewpsw-.Lpg0(%r13)
...@@ -16,12 +20,12 @@ do_reipl_asm: basr %r13,0 ...@@ -16,12 +20,12 @@ do_reipl_asm: basr %r13,0
stm %r0,%r15,__LC_GPREGS_SAVE_AREA stm %r0,%r15,__LC_GPREGS_SAVE_AREA
stctl %c0,%c15,__LC_CREGS_SAVE_AREA stctl %c0,%c15,__LC_CREGS_SAVE_AREA
stam %a0,%a15,__LC_AREGS_SAVE_AREA stam %a0,%a15,__LC_AREGS_SAVE_AREA
mvc __LC_PREFIX_SAVE_AREA(4),dump_prefix_page-.Lpg0(%r13) l %r10,.Ldump_pfx-.Lpg0(%r13)
mvc __LC_PREFIX_SAVE_AREA(4),0(%r10)
stckc .Lclkcmp-.Lpg0(%r13) stckc .Lclkcmp-.Lpg0(%r13)
mvc __LC_CLOCK_COMP_SAVE_AREA(8),.Lclkcmp-.Lpg0(%r13) mvc __LC_CLOCK_COMP_SAVE_AREA(8),.Lclkcmp-.Lpg0(%r13)
stpt __LC_CPU_TIMER_SAVE_AREA stpt __LC_CPU_TIMER_SAVE_AREA
st %r13, __LC_PSW_SAVE_AREA+4 st %r13, __LC_PSW_SAVE_AREA+4
lctl %c6,%c6,.Lall-.Lpg0(%r13) lctl %c6,%c6,.Lall-.Lpg0(%r13)
lr %r1,%r2 lr %r1,%r2
mvc __LC_PGM_NEW_PSW(8),.Lpcnew-.Lpg0(%r13) mvc __LC_PGM_NEW_PSW(8),.Lpcnew-.Lpg0(%r13)
...@@ -55,6 +59,7 @@ do_reipl_asm: basr %r13,0 ...@@ -55,6 +59,7 @@ do_reipl_asm: basr %r13,0
.align 8 .align 8
.Lclkcmp: .quad 0x0000000000000000 .Lclkcmp: .quad 0x0000000000000000
.Lall: .long 0xff000000 .Lall: .long 0xff000000
.Ldump_pfx: .long dump_prefix_page
.align 8 .align 8
.Lnewpsw: .long 0x00080000,0x80000000+.Lpg1 .Lnewpsw: .long 0x00080000,0x80000000+.Lpg1
.Lpcnew: .long 0x00080000,0x80000000+.Lecs .Lpcnew: .long 0x00080000,0x80000000+.Lecs
...@@ -79,7 +84,3 @@ do_reipl_asm: basr %r13,0 ...@@ -79,7 +84,3 @@ do_reipl_asm: basr %r13,0
.long 0x00000000,0x00000000 .long 0x00000000,0x00000000
.long 0x00000000,0x00000000 .long 0x00000000,0x00000000
.long 0x00000000,0x00000000 .long 0x00000000,0x00000000
.globl dump_prefix_page
dump_prefix_page:
.long 0x00000000
...@@ -8,6 +8,12 @@ ...@@ -8,6 +8,12 @@
*/ */
#include <asm/lowcore.h> #include <asm/lowcore.h>
#
# do_reipl_asm
# Parameter: r2 = schid of reipl device
#
.globl do_reipl_asm .globl do_reipl_asm
do_reipl_asm: basr %r13,0 do_reipl_asm: basr %r13,0
.Lpg0: lpswe .Lnewpsw-.Lpg0(%r13) .Lpg0: lpswe .Lnewpsw-.Lpg0(%r13)
...@@ -20,7 +26,8 @@ do_reipl_asm: basr %r13,0 ...@@ -20,7 +26,8 @@ do_reipl_asm: basr %r13,0
stg %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1) stg %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1)
stctg %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1) stctg %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1)
stam %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1) stam %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1)
mvc __LC_PREFIX_SAVE_AREA-0x1000(4,%r1),dump_prefix_page-.Lpg0(%r13) lg %r10,.Ldump_pfx-.Lpg0(%r13)
mvc __LC_PREFIX_SAVE_AREA-0x1000(4,%r1),0(%r10)
stfpc __LC_FP_CREG_SAVE_AREA-0x1000(%r1) stfpc __LC_FP_CREG_SAVE_AREA-0x1000(%r1)
stckc .Lclkcmp-.Lpg0(%r13) stckc .Lclkcmp-.Lpg0(%r13)
mvc __LC_CLOCK_COMP_SAVE_AREA-0x1000(8,%r1),.Lclkcmp-.Lpg0(%r13) mvc __LC_CLOCK_COMP_SAVE_AREA-0x1000(8,%r1),.Lclkcmp-.Lpg0(%r13)
...@@ -64,6 +71,7 @@ do_reipl_asm: basr %r13,0 ...@@ -64,6 +71,7 @@ do_reipl_asm: basr %r13,0
.align 8 .align 8
.Lclkcmp: .quad 0x0000000000000000 .Lclkcmp: .quad 0x0000000000000000
.Lall: .quad 0x00000000ff000000 .Lall: .quad 0x00000000ff000000
.Ldump_pfx: .quad dump_prefix_page
.Lregsave: .quad 0x0000000000000000 .Lregsave: .quad 0x0000000000000000
.align 16 .align 16
/* /*
...@@ -103,6 +111,3 @@ do_reipl_asm: basr %r13,0 ...@@ -103,6 +111,3 @@ do_reipl_asm: basr %r13,0
.long 0x00000000,0x00000000 .long 0x00000000,0x00000000
.long 0x00000000,0x00000000 .long 0x00000000,0x00000000
.long 0x00000000,0x00000000 .long 0x00000000,0x00000000
.globl dump_prefix_page
dump_prefix_page:
.long 0x00000000
...@@ -74,6 +74,7 @@ struct ipl_parameter_block { ...@@ -74,6 +74,7 @@ struct ipl_parameter_block {
extern u32 ipl_flags; extern u32 ipl_flags;
extern u16 ipl_devno; extern u16 ipl_devno;
extern u32 dump_prefix_page;
extern void do_reipl(void); extern void do_reipl(void);
extern void ipl_save_parameters(void); extern void ipl_save_parameters(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment