summaryrefslogtreecommitdiffstats
path: root/arch/s390/boot
diff options
context:
space:
mode:
authorAlexander Egorenkov <egorenar@linux.ibm.com>2021-06-15 14:25:41 +0200
committerHeiko Carstens <hca@linux.ibm.com>2021-07-27 09:39:16 +0200
commite9e7870f90e3587b712e05db2ded947a3f617119 (patch)
tree5f46c90fdecbab876787f31650b0bae4be075b7f /arch/s390/boot
parent84733284f67b1a937f6205fdb16aa5cbb8b4f53d (diff)
downloadlinux-e9e7870f90e3587b712e05db2ded947a3f617119.tar.gz
linux-e9e7870f90e3587b712e05db2ded947a3f617119.tar.bz2
linux-e9e7870f90e3587b712e05db2ded947a3f617119.zip
s390/dump: introduce boot data 'oldmem_data'
The new boot data struct shall replace global variables OLDMEM_BASE and OLDMEM_SIZE. It is initialized in the decompressor and passed to the decompressed kernel. In comparison to the old solution, this one doesn't access data at fixed physical addresses which will become important when the decompressor becomes relocatable. Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> Acked-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch/s390/boot')
-rw-r--r--arch/s390/boot/startup.c7
-rw-r--r--arch/s390/boot/uv.c2
2 files changed, 6 insertions, 3 deletions
diff --git a/arch/s390/boot/startup.c b/arch/s390/boot/startup.c
index 694780339db0..6206ca149d5e 100644
--- a/arch/s390/boot/startup.c
+++ b/arch/s390/boot/startup.c
@@ -27,6 +27,7 @@ struct initrd_data __bootdata(initrd_data);
u64 __bootdata_preserved(stfle_fac_list[16]);
u64 __bootdata_preserved(alt_stfle_fac_list[16]);
+struct oldmem_data __bootdata_preserved(oldmem_data);
/*
* Some code and data needs to stay below 2 GB, even when the kernel would be
@@ -165,9 +166,9 @@ static void setup_ident_map_size(unsigned long max_physmem_end)
ident_map_size = min(ident_map_size, 1UL << MAX_PHYSMEM_BITS);
#ifdef CONFIG_CRASH_DUMP
- if (OLDMEM_BASE) {
+ if (oldmem_data.start) {
kaslr_enabled = 0;
- ident_map_size = min(ident_map_size, OLDMEM_SIZE);
+ ident_map_size = min(ident_map_size, oldmem_data.size);
} else if (ipl_block_valid && is_ipl_block_dump()) {
kaslr_enabled = 0;
if (!sclp_early_get_hsa_size(&hsa_size) && hsa_size)
@@ -286,6 +287,8 @@ void startup_kernel(void)
initrd_data.start = parmarea.initrd_start;
initrd_data.size = parmarea.initrd_size;
+ oldmem_data.start = parmarea.oldmem_base;
+ oldmem_data.size = parmarea.oldmem_size;
setup_lpp();
store_ipl_parmblock();
diff --git a/arch/s390/boot/uv.c b/arch/s390/boot/uv.c
index 735f29f81162..e6be155ab2e5 100644
--- a/arch/s390/boot/uv.c
+++ b/arch/s390/boot/uv.c
@@ -69,7 +69,7 @@ static int is_prot_virt_host_capable(void)
if (!test_facility(158))
return 0;
/* disable if kdump */
- if (OLDMEM_BASE)
+ if (oldmem_data.start)
return 0;
/* disable if stand-alone dump */
if (ipl_block_valid && is_ipl_block_dump())