File s390-tools-sles15sp2-14-zipl-Consolidate-IMAGE-macros.patch of Package s390-tools.17983
Subject: [PATCH] [FEAT VS1804] zipl: Consolidate IMAGE macros
From: Marc Hartmayer <mhartmay@linux.ibm.com>
Summary: genprotimg: Introduce new tool for the creation of PV images
Description: genprotimg takes a kernel, host-key documents, optionally an
initrd, optionally a file with the kernel command line, and it
generates a single, loadable image file. The image consists of a
concatenation of a plain text boot loader, the encrypted
components for kernel, initrd, and cmdline, and the
integrity-protected PV header, containing metadata necessary for
running the guest in PV mode. It's possible to use this image file
as a kernel for zIPL or for a direct kernel boot using QEMU.
Upstream-ID: cb614ed1ee61f05fb521a7e3ac0d27eb2eb45672
Problem-ID: VS1804
Upstream-Description:
zipl: Consolidate IMAGE macros
Combine the different macros for 0x10000 and use a consistent naming
schema.
Signed-off-by: Philipp Rudo <prudo@linux.ibm.com>
Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
---
zipl/boot/stage3.c | 7 ++++---
zipl/boot/stage3.h | 2 --
zipl/include/zipl.h | 8 +++++---
zipl/src/bootmap.c | 8 ++++----
zipl/src/job.c | 17 +++++++++--------
5 files changed, 22 insertions(+), 20 deletions(-)
--- a/zipl/boot/stage3.c
+++ b/zipl/boot/stage3.c
@@ -13,6 +13,7 @@
#include "s390.h"
#include "stage3.h"
#include "error.h"
+#include "zipl.h"
#define for_each_rb_entry(entry, rb) \
for (entry = rb->entries; \
@@ -272,7 +273,7 @@ void start(void)
* verified component. If it is not IPL is aborted.
*/
if (secure_boot_enabled()) {
- if (_image_addr != DEFAULT_IMAGE_ADDR ||
+ if (_image_addr != IMAGE_LOAD_ADDRESS ||
_load_psw != DEFAULT_PSW_LOAD)
panic(ESECUREBOOT, "%s", msg_sipl_inval);
@@ -283,8 +284,8 @@ void start(void)
* cut the kernel header
*/
memmove((void *)_image_addr,
- (void *)_image_addr + KERNEL_HEADER_SIZE,
- _image_len - KERNEL_HEADER_SIZE);
+ (void *)_image_addr + IMAGE_LOAD_ADDRESS,
+ _image_len - IMAGE_LOAD_ADDRESS);
/* store subchannel ID into low core and into new kernel space */
subchannel_id = S390_lowcore.subchannel_id;
--- a/zipl/boot/stage3.h
+++ b/zipl/boot/stage3.h
@@ -29,10 +29,8 @@
#define IPL_FLAG_SECURE 0x40
-#define DEFAULT_IMAGE_ADDR 0x10000
#define DEFAULT_PSW_LOAD 0x0008000080010000UL
#define PSW_ADDR_MASK 0x000000007FFFFFFFUL
-#define KERNEL_HEADER_SIZE 65536
#define UNSPECIFIED_ADDRESS -1UL
--- a/zipl/include/zipl.h
+++ b/zipl/include/zipl.h
@@ -19,13 +19,15 @@
#define ZIPL_MAGIC_SIZE 4
#define DISK_LAYOUT_ID 0x00000001
+#define IMAGE_ENTRY 0x10000UL
+#define IMAGE_ENTRY_KDUMP 0x10010UL
+
#define ZIPL_STAGE2_LOAD_ADDRESS 0x2000UL
#define ZIPL_STAGE3_ENTRY_ADDRESS 0xa000UL
-#define DEFAULT_IMAGE_ADDRESS 0x10000UL
-#define KDUMP_IMAGE_ADDRESS 0x10010UL
#define DEFAULT_STAGE3_ADDRESS 0xa000UL
#define DEFAULT_STAGE3_PARAMS_ADDRESS 0x9000UL
-#define MINIMUM_ADDRESS 0x10000UL
+#define IMAGE_LOAD_ADDRESS IMAGE_ENTRY
+
#define ADDRESS_LIMIT 0x80000000UL
#define ADDRESS_LIMIT_KDUMP 0x2000000UL /* HSA size: 32 MiB */
#define UNSPECIFIED_ADDRESS -1UL
--- a/zipl/src/bootmap.c
+++ b/zipl/src/bootmap.c
@@ -644,8 +644,8 @@ add_ipl_program(int fd, struct job_ipl_d
rc = boot_get_stage3_parms(&stage3_params, &stage3_params_size,
ipl->parm_addr, ipl->ramdisk_addr,
ramdisk_size,
- ipl->is_kdump ? ipl->image_addr + 0x10 :
- ipl->image_addr,
+ ipl->is_kdump ? IMAGE_ENTRY_KDUMP :
+ IMAGE_ENTRY,
(info->type == disk_type_scsi) ? 0 : 1,
flags, ipl->image_addr, image_size);
if (rc) {
@@ -1187,7 +1187,7 @@ bootmap_create(struct job_data *job, dis
ulong unused_size;
/* Use approximated stage 3 size as starting point */
- size = MINIMUM_ADDRESS;
+ size = IMAGE_LOAD_ADDRESS;
/* Ramdisk */
if (job->data.dump.ramdisk != NULL) {
@@ -1199,7 +1199,7 @@ bootmap_create(struct job_data *job, dis
/* Kernel */
if (stat(job->data.dump.image, &st))
goto out_misc_free_temp_dev;
- size += DIV_ROUND_UP(st.st_size - 0x10000,
+ size += DIV_ROUND_UP(st.st_size - IMAGE_LOAD_ADDRESS,
info->phy_block_size);
/* Parmfile */
size += DIV_ROUND_UP(DUMP_PARAM_MAX_LEN, info->phy_block_size);
--- a/zipl/src/job.c
+++ b/zipl/src/job.c
@@ -23,6 +23,7 @@
#include "job.h"
#include "misc.h"
#include "scan.h"
+#include "zipl.h"
/* Command line options */
static struct option options[] = {
@@ -663,12 +664,12 @@ check_component_address_data(struct comp
address_limit);
return -1;
}
- if (*cl[i].addrp < MINIMUM_ADDRESS) {
+ if (*cl[i].addrp < IMAGE_LOAD_ADDRESS) {
if (name != NULL)
error_text("Section '%s'", name);
error_reason("Component '%s' falls below available "
"address space (limit is 0x%08x)",
- cl[i].name, MINIMUM_ADDRESS);
+ cl[i].name, IMAGE_LOAD_ADDRESS);
return -1;
}
}
@@ -706,12 +707,12 @@ finalize_component_address_data(struct c
for (j = -1; j < i; j++) {
if (j < 0) {
/* Try address before first component */
- addr = MINIMUM_ADDRESS;
+ addr = IMAGE_LOAD_ADDRESS;
} else {
/* Try address after component j */
addr = *cl[j].addrp + cl[j].size;
- if (addr < MINIMUM_ADDRESS)
- addr = MINIMUM_ADDRESS;
+ if (addr < IMAGE_LOAD_ADDRESS)
+ addr = IMAGE_LOAD_ADDRESS;
}
addr = ALIGN(addr, cl[i].align);
if (addr + cl[i].size > address_limit) {
@@ -905,7 +906,7 @@ check_job_dump_images(struct job_dump_da
dump->image = misc_strdup(ZFCPDUMP_IMAGE);
if (dump->image == NULL)
return -1;
- dump->image_addr = DEFAULT_IMAGE_ADDRESS;
+ dump->image_addr = IMAGE_LOAD_ADDRESS;
/* Ramdisk is no longer required with new initramfs dump system */
if (misc_check_readable_file(ZFCPDUMP_INITRD))
@@ -1351,7 +1352,7 @@ get_job_from_section_data(char* data[],
return -1;
if (extract_address(job->data.ipl.image,
&job->data.ipl.image_addr)) {
- job->data.ipl.image_addr = DEFAULT_IMAGE_ADDRESS;
+ job->data.ipl.image_addr = IMAGE_LOAD_ADDRESS;
}
/* Fill in parmline */
rc = get_parmline(data[(int) scan_keyword_parmfile],
@@ -1406,7 +1407,7 @@ get_job_from_section_data(char* data[],
return -1;
if (extract_address(job->data.ipl_tape.image,
&job->data.ipl_tape.image_addr)) {
- job->data.ipl_tape.image_addr = DEFAULT_IMAGE_ADDRESS;
+ job->data.ipl_tape.image_addr = IMAGE_LOAD_ADDRESS;
}
/* Fill in parmline */
rc = get_parmline(data[(int) scan_keyword_parmfile],