diff options
Diffstat (limited to 'arch/s390/boot/startup.c')
-rw-r--r-- | arch/s390/boot/startup.c | 18 |
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 | ||
28 | static void rescue_initrd(void) | 28 | static 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 | ||
43 | static void copy_bootdata(void) | 40 | static void copy_bootdata(void) |
@@ -52,12 +49,15 @@ static void copy_bootdata(void) | |||
52 | 49 | ||
53 | void startup_kernel(void) | 50 | void 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(); |