aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/boot/startup.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/boot/startup.c')
-rw-r--r--arch/s390/boot/startup.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/arch/s390/boot/startup.c b/arch/s390/boot/startup.c
index 2bd4a62d436c..90898976a941 100644
--- a/arch/s390/boot/startup.c
+++ b/arch/s390/boot/startup.c
@@ -25,19 +25,16 @@ unsigned long mem_safe_offset(void)
25} 25}
26#endif 26#endif
27 27
28static void rescue_initrd(void) 28static void rescue_initrd(unsigned long addr)
29{ 29{
30 unsigned long min_initrd_addr;
31
32 if (!IS_ENABLED(CONFIG_BLK_DEV_INITRD)) 30 if (!IS_ENABLED(CONFIG_BLK_DEV_INITRD))
33 return; 31 return;
34 if (!INITRD_START || !INITRD_SIZE) 32 if (!INITRD_START || !INITRD_SIZE)
35 return; 33 return;
36 min_initrd_addr = mem_safe_offset(); 34 if (addr <= INITRD_START)
37 if (min_initrd_addr <= INITRD_START)
38 return; 35 return;
39 memmove((void *)min_initrd_addr, (void *)INITRD_START, INITRD_SIZE); 36 memmove((void *)addr, (void *)INITRD_START, INITRD_SIZE);
40 INITRD_START = min_initrd_addr; 37 INITRD_START = addr;
41} 38}
42 39
43static void copy_bootdata(void) 40static void copy_bootdata(void)
@@ -52,12 +49,15 @@ static void copy_bootdata(void)
52 49
53void startup_kernel(void) 50void startup_kernel(void)
54{ 51{
52 unsigned long safe_addr;
55 void *img; 53 void *img;
56 54
55 store_ipl_parmblock();
56 safe_addr = mem_safe_offset();
57 safe_addr = read_ipl_report(safe_addr);
57 uv_query_info(); 58 uv_query_info();
58 rescue_initrd(); 59 rescue_initrd(safe_addr);
59 sclp_early_read_info(); 60 sclp_early_read_info();
60 store_ipl_parmblock();
61 setup_boot_command_line(); 61 setup_boot_command_line();
62 parse_boot_command_line(); 62 parse_boot_command_line();
63 setup_memory_end(); 63 setup_memory_end();