Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.2:Staging:N
s390-tools
s390-tools-sles15sp2-14-zipl-Consolidate-IMAGE-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File s390-tools-sles15sp2-14-zipl-Consolidate-IMAGE-macros.patch of Package s390-tools
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],
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor