s390/ipl: make parameter area accessible via struct parmarea
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 7 May 2021 17:12:39 +0000 (19:12 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 7 Jun 2021 15:06:59 +0000 (17:06 +0200)
Since commit 9a965ea95135 ("s390/kexec_file: Simplify parmarea
access") we have struct parmarea which describes the layout of the
kernel parameter area.

Make the kernel parameter area available as global variable parmarea
of type struct parmarea, which allows to easily access its members.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/boot/head.S
arch/s390/include/asm/setup.h
arch/s390/kernel/asm-offsets.c

index dacb781..51693cf 100644 (file)
@@ -401,6 +401,7 @@ SYM_CODE_END(startup_pgm_check_handler)
 # Must be keept in sync with struct parmarea in setup.h
 #
        .org    PARMAREA
+SYM_DATA_START(parmarea)
        .quad   0                       # IPL_DEVICE
        .quad   0                       # INITRD_START
        .quad   0                       # INITRD_SIZE
@@ -411,6 +412,8 @@ SYM_CODE_END(startup_pgm_check_handler)
        .org    COMMAND_LINE
        .byte   "root=/dev/ram0 ro"
        .byte   0
+       .org    PARMAREA+__PARMAREA_SIZE
+SYM_DATA_END(parmarea)
 
        .org    EARLY_SCCB_OFFSET
        .fill   4096
index 3e388fa..29baab0 100644 (file)
@@ -78,6 +78,8 @@ struct parmarea {
        char command_line[ARCH_COMMAND_LINE_SIZE];      /* 0x10480 */
 };
 
+extern struct parmarea parmarea;
+
 extern unsigned int zlib_dfltcc_support;
 #define ZLIB_DFLTCC_DISABLED           0
 #define ZLIB_DFLTCC_FULL               1
index b4ca7cc..f53605a 100644 (file)
@@ -15,6 +15,7 @@
 #include <asm/idle.h>
 #include <asm/gmap.h>
 #include <asm/nmi.h>
+#include <asm/setup.h>
 #include <asm/stacktrace.h>
 
 int main(void)
@@ -155,5 +156,7 @@ int main(void)
        OFFSET(__KEXEC_SHA_REGION_START, kexec_sha_region, start);
        OFFSET(__KEXEC_SHA_REGION_LEN, kexec_sha_region, len);
        DEFINE(__KEXEC_SHA_REGION_SIZE, sizeof(struct kexec_sha_region));
+       /* sizeof kernel parameter area */
+       DEFINE(__PARMAREA_SIZE, sizeof(struct parmarea));
        return 0;
 }