]> git.baikalelectronics.ru Git - kernel.git/commitdiff
s390: move ipl block to .boot.preserved.data section
authorVasily Gorbik <gor@linux.ibm.com>
Mon, 1 Apr 2019 17:10:51 +0000 (19:10 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 10 Apr 2019 15:47:11 +0000 (17:47 +0200)
.boot.preserved.data is a better fit for ipl block than .boot.data
which is discarded after init. Reusing .boot.preserved.data allows to
simplify code a little bit and avoid copying data from .boot.data to
persistent variables.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/boot/ipl_parm.c
arch/s390/include/asm/boot_data.h
arch/s390/include/asm/ipl.h
arch/s390/kernel/early.c
arch/s390/kernel/ipl.c

index 36beb56de02175dc5baec20ee8e0a64b34ae8431..dc0438d08751fb90232de43c14f280a00d1b9b8d 100644 (file)
@@ -10,8 +10,8 @@
 #include "boot.h"
 
 char __bootdata(early_command_line)[COMMAND_LINE_SIZE];
-struct ipl_parameter_block __bootdata(early_ipl_block);
-int __bootdata(early_ipl_block_valid);
+struct ipl_parameter_block __bootdata_preserved(ipl_block);
+int __bootdata_preserved(ipl_block_valid);
 
 unsigned long __bootdata(memory_end);
 int __bootdata(memory_end_set);
@@ -45,10 +45,10 @@ void store_ipl_parmblock(void)
 {
        int rc;
 
-       rc = __diag308(DIAG308_STORE, &early_ipl_block);
+       rc = __diag308(DIAG308_STORE, &ipl_block);
        if (rc == DIAG308_RC_OK &&
-           early_ipl_block.hdr.version <= IPL_MAX_SUPPORTED_VERSION)
-               early_ipl_block_valid = 1;
+           ipl_block.hdr.version <= IPL_MAX_SUPPORTED_VERSION)
+               ipl_block_valid = 1;
 }
 
 static size_t scpdata_length(const char *buf, size_t count)
@@ -103,14 +103,14 @@ static void append_ipl_block_parm(void)
        delim = early_command_line + len;    /* '\0' character position */
        parm = early_command_line + len + 1; /* append right after '\0' */
 
-       switch (early_ipl_block.hdr.pbt) {
+       switch (ipl_block.hdr.pbt) {
        case DIAG308_IPL_TYPE_CCW:
                rc = ipl_block_get_ascii_vmparm(
-                       parm, COMMAND_LINE_SIZE - len - 1, &early_ipl_block);
+                       parm, COMMAND_LINE_SIZE - len - 1, &ipl_block);
                break;
        case DIAG308_IPL_TYPE_FCP:
                rc = ipl_block_get_ascii_scpdata(
-                       parm, COMMAND_LINE_SIZE - len - 1, &early_ipl_block);
+                       parm, COMMAND_LINE_SIZE - len - 1, &ipl_block);
                break;
        }
        if (rc) {
@@ -141,7 +141,7 @@ void setup_boot_command_line(void)
        strcpy(early_command_line, strim(COMMAND_LINE));
 
        /* append IPL PARM data to the boot command line */
-       if (early_ipl_block_valid)
+       if (ipl_block_valid)
                append_ipl_block_parm();
 }
 
@@ -234,9 +234,9 @@ void parse_boot_command_line(void)
 void setup_memory_end(void)
 {
 #ifdef CONFIG_CRASH_DUMP
-       if (!OLDMEM_BASE && early_ipl_block_valid &&
-           early_ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP &&
-           early_ipl_block.ipl_info.fcp.opt == DIAG308_IPL_OPT_DUMP) {
+       if (!OLDMEM_BASE && ipl_block_valid &&
+           ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP &&
+           ipl_block.ipl_info.fcp.opt == DIAG308_IPL_OPT_DUMP) {
                if (!sclp_early_get_hsa_size(&memory_end) && memory_end)
                        memory_end_set = 1;
        }
index 2d999ccb977a76b942cd0c3e864795f4777b1850..d794802a22917ff6fd7affb568435da8c6255cdf 100644 (file)
@@ -5,7 +5,7 @@
 #include <asm/ipl.h>
 
 extern char early_command_line[COMMAND_LINE_SIZE];
-extern struct ipl_parameter_block early_ipl_block;
-extern int early_ipl_block_valid;
+extern struct ipl_parameter_block ipl_block;
+extern int ipl_block_valid;
 
 #endif /* _ASM_S390_BOOT_DATA_H */
index a8389e2d2f034f36af377a8bf04b2dbcad590b50..6403cc9952bff8da63ade63e29ff845c6a9abb99 100644 (file)
@@ -88,7 +88,6 @@ void __init save_area_add_regs(struct save_area *, void *regs);
 void __init save_area_add_vxrs(struct save_area *, __vector128 *vxrs);
 
 extern void s390_reset_system(void);
-extern void ipl_store_parameters(void);
 extern size_t ipl_block_get_ascii_vmparm(char *dest, size_t size,
                                         const struct ipl_parameter_block *ipb);
 
index d6edf45f93b9ac38620a2175105b3530a584ea0b..c196abda36c778ddd1e45ca8c5c850f8e79cad77 100644 (file)
@@ -309,7 +309,6 @@ void __init startup_init(void)
        setup_facility_list();
        detect_machine_type();
        setup_arch_string();
-       ipl_store_parameters();
        setup_boot_command_line();
        detect_diag9c();
        detect_diag44();
index 18a5d6317accd69f2e0c594bfeceed7433fb31ef..d2e8dc60f2cf05777de6dddb8428cbf5b612eb28 100644 (file)
@@ -119,11 +119,8 @@ static char *dump_type_str(enum dump_type type)
        }
 }
 
-struct ipl_parameter_block __bootdata(early_ipl_block);
-int __bootdata(early_ipl_block_valid);
-
-static int ipl_block_valid;
-static struct ipl_parameter_block ipl_block;
+int __bootdata_preserved(ipl_block_valid);
+struct ipl_parameter_block __bootdata_preserved(ipl_block);
 
 static int reipl_capabilities = IPL_TYPE_UNKNOWN;
 
@@ -1675,14 +1672,6 @@ void __init setup_ipl(void)
        atomic_notifier_chain_register(&panic_notifier_list, &on_panic_nb);
 }
 
-void __init ipl_store_parameters(void)
-{
-       if (early_ipl_block_valid) {
-               memcpy(&ipl_block, &early_ipl_block, sizeof(ipl_block));
-               ipl_block_valid = 1;
-       }
-}
-
 void s390_reset_system(void)
 {
        /* Disable prefixing */