mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Revert "zipl/src: Fix problems when target parameters are specified by user"
The commitfb0b6263d1("zipl/src: Fix problems when target parameters are specified by user") breaks the case where the user has to provide all target attributes via the zipl command line, because the target device cannot be used to retrieve those attributes. $ zipl -V --blsdir /tmp/tmp.xHmFUdgBCi/boot//loader/entries/ --config /tmp/tmp.dSv9MJ3svs Looking for components in '/lib/s390-tools' Using config file '/tmp/tmp.dSv9MJ3svs' (from command line) Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//50_normal.conf' Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//45_normal_swiotlb.conf' Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//40_pv.conf' Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//30_pv_reboot.conf' Secure boot support: yes Target device information Device..........................: 2b:00 Device name.....................: nbd0 *) Device driver name..............: nbd Type............................: disk device Disk layout.....................: SCSI disk layout *) Geometry - start................: 2048 *) File system block size..........: 4096 Physical block size.............: 512 *) Device size in physical blocks..: 2095071 *) Data provided by user. Building bootmap in '/tmp/tmp.xHmFUdgBCi/boot/' Building menu 'zipl-automatic-menu' Adding #1: IPL section 'Normal Guest' (default) initial ramdisk...: /tmp/tmp.xHmFUdgBCi/boot//ramdisk-s390x kernel image......: /tmp/tmp.xHmFUdgBCi/boot//vmlinux-s390x zIPL environment block content: Error: Could not add image file '/tmp/tmp.xHmFUdgBCi/boot//vmlinux-s390x': Could not get disk geometry This reverts commitfb0b6263d1. Acked-by: Eduard Shishkin <edward6@linux.ibm.com> Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
This commit is contained in:
committed by
Steffen Eiden
parent
26d7eed0aa
commit
63ff07ba38
@@ -152,7 +152,6 @@ static inline int target_parameters_are_set(struct job_target_data *td)
|
||||
|
||||
int job_get(int argc, char* argv[], struct job_data** data);
|
||||
void job_free(struct job_data* job);
|
||||
void free_target_data(struct job_target_data *td);
|
||||
int type_from_target(char *target, disk_type_t *type);
|
||||
int check_job_dump_images(struct job_dump_data* dump, char* name);
|
||||
int check_job_images_ngdump(struct job_dump_data* dump, char* name);
|
||||
|
||||
@@ -304,6 +304,7 @@ static int add_component_file_range(struct install_set *bis,
|
||||
address_t load_address,
|
||||
size_t trailer, void *component,
|
||||
int add_files,
|
||||
struct job_target_data *target,
|
||||
int comp_id, int menu_idx,
|
||||
int program_table_id)
|
||||
{
|
||||
@@ -338,15 +339,8 @@ static int add_component_file_range(struct install_set *bis,
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Make sure that file is on target device.
|
||||
* For this, retrieve info of the underlying disk without
|
||||
* any user hints
|
||||
*/
|
||||
struct job_target_data tmp = {.source = source_unknown};
|
||||
|
||||
rc = disk_get_info_from_file(filename, &tmp, &file_info);
|
||||
free_target_data(&tmp);
|
||||
/* Make sure file is on correct device */
|
||||
rc = disk_get_info_from_file(filename, target, &file_info);
|
||||
if (rc)
|
||||
return -1;
|
||||
if (file_info->device != bis->info->device) {
|
||||
@@ -383,11 +377,12 @@ write_segment_table:
|
||||
static int add_component_file(struct install_set *bis, const char *filename,
|
||||
address_t load_address, size_t trailer,
|
||||
void *component, int add_files,
|
||||
int comp_id, int menu_idx, int program_table_id)
|
||||
struct job_target_data *target, int comp_id,
|
||||
int menu_idx, int program_table_id)
|
||||
{
|
||||
return add_component_file_range(bis, filename, NULL, load_address,
|
||||
trailer, component, add_files,
|
||||
comp_id, menu_idx,
|
||||
target, comp_id, menu_idx,
|
||||
program_table_id);
|
||||
}
|
||||
|
||||
@@ -549,7 +544,8 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||||
bool add_envblk, struct job_envblk_data *envblk,
|
||||
struct job_ipl_data *ipl, disk_blockptr_t *program,
|
||||
int verbose, int add_files, component_header_type type,
|
||||
int is_secure, int menu_idx, int program_table_id)
|
||||
struct job_target_data *target, int is_secure,
|
||||
int menu_idx, int program_table_id)
|
||||
{
|
||||
struct signature_header sig_head;
|
||||
size_t ramdisk_size, image_size;
|
||||
@@ -671,7 +667,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||||
/* Add stage 3 loader to bootmap */
|
||||
rc = add_component_file(bis, ZIPL_STAGE3_PATH, STAGE3_LOAD_ADDRESS,
|
||||
signature_size, VOID_ADD(table, offset), 1,
|
||||
COMPONENT_ID_LOADER, menu_idx,
|
||||
target, COMPONENT_ID_LOADER, menu_idx,
|
||||
program_table_id);
|
||||
if (rc) {
|
||||
error_text("Could not add internal loader file '%s'",
|
||||
@@ -749,7 +745,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||||
|
||||
rc = add_component_file(bis, ipl->common.image, ipl->common.image_addr,
|
||||
signature_size, VOID_ADD(table, offset),
|
||||
add_files, COMPONENT_ID_KERNEL_IMAGE,
|
||||
add_files, target, COMPONENT_ID_KERNEL_IMAGE,
|
||||
menu_idx, program_table_id);
|
||||
if (rc) {
|
||||
error_text("Could not add image file '%s'", ipl->common.image);
|
||||
@@ -809,7 +805,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||||
ipl->common.ramdisk_addr,
|
||||
signature_size,
|
||||
VOID_ADD(table, offset),
|
||||
add_files, COMPONENT_ID_RAMDISK,
|
||||
add_files, target, COMPONENT_ID_RAMDISK,
|
||||
menu_idx, program_table_id);
|
||||
if (rc) {
|
||||
error_text("Could not add ramdisk '%s'",
|
||||
@@ -865,7 +861,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||||
rc = add_component_file_range(bis, filename, ®,
|
||||
ipl->envblk_addr, 0,
|
||||
VOID_ADD(table, offset),
|
||||
0,
|
||||
0, target,
|
||||
COMPONENT_ID_ENVBLK,
|
||||
menu_idx,
|
||||
program_table_id);
|
||||
@@ -897,6 +893,7 @@ static int add_segment_program(struct install_set *bis,
|
||||
struct job_segment_data *segment,
|
||||
disk_blockptr_t *program, int verbose,
|
||||
int add_files, component_header_type type,
|
||||
struct job_target_data *target,
|
||||
int program_table_id)
|
||||
{
|
||||
void *table;
|
||||
@@ -916,7 +913,7 @@ static int add_segment_program(struct install_set *bis,
|
||||
printf(" segment file......: %s\n", segment->segment);
|
||||
|
||||
rc = add_component_file(bis, segment->segment, segment->segment_addr, 0,
|
||||
VOID_ADD(table, offset), add_files,
|
||||
VOID_ADD(table, offset), add_files, target,
|
||||
COMPONENT_ID_SEGMENT_FILE, 0 /* menu_idx */,
|
||||
program_table_id);
|
||||
if (rc) {
|
||||
@@ -999,7 +996,7 @@ static int add_dump_program(struct install_set *bis, struct job_data *job,
|
||||
ipl.common.parmline = dump->common.parmline;
|
||||
ipl.common.parm_addr = dump->common.parm_addr;
|
||||
return add_ipl_program(bis, NULL, false, NULL, &ipl, program,
|
||||
verbose, 1, type, SECURE_BOOT_DISABLED,
|
||||
verbose, 1, type, target, SECURE_BOOT_DISABLED,
|
||||
0 /* menu_idx */, program_table_id);
|
||||
}
|
||||
|
||||
@@ -1044,7 +1041,8 @@ static int build_program_table(struct job_data *job,
|
||||
true, &job->envblk, &job->data.ipl,
|
||||
&table[0], verbose || job->command_line,
|
||||
job->add_files, component_header,
|
||||
job->is_secure, 0, program_table_id);
|
||||
&job->target, job->is_secure, 0,
|
||||
program_table_id);
|
||||
break;
|
||||
case job_segment:
|
||||
if (bis->print_details) {
|
||||
@@ -1057,7 +1055,7 @@ static int build_program_table(struct job_data *job,
|
||||
rc = add_segment_program(bis, &job->data.segment, &table[0],
|
||||
verbose || job->command_line,
|
||||
job->add_files, COMPONENT_HEADER_IPL,
|
||||
program_table_id);
|
||||
&job->target, program_table_id);
|
||||
break;
|
||||
case job_dump_partition:
|
||||
/* Only useful for a partition dump that uses a dump kernel*/
|
||||
@@ -1116,7 +1114,7 @@ static int build_program_table(struct job_data *job,
|
||||
&table[job->data.menu.entry[i].pos],
|
||||
verbose || job->command_line,
|
||||
job->add_files, component_header,
|
||||
is_secure, i,
|
||||
&job->target, is_secure, i,
|
||||
program_table_id);
|
||||
break;
|
||||
case job_print_usage:
|
||||
|
||||
@@ -528,9 +528,6 @@ static int disk_set_info_complete(struct job_target_data *td,
|
||||
* config file, or special "target options" of zipl tool.
|
||||
* If target parameters were specified by user, then the step 1 above
|
||||
* is skipped.
|
||||
|
||||
* To exclude any user assumptions about the DEVICE, this function
|
||||
* should be called with TD pointing to a zeroed structure.
|
||||
*
|
||||
* DEVICE: logical, or physical device, optionally formated with a
|
||||
* file system.
|
||||
|
||||
@@ -370,7 +370,8 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
||||
}
|
||||
|
||||
|
||||
void free_target_data(struct job_target_data *data)
|
||||
static void
|
||||
free_target_data(struct job_target_data* data)
|
||||
{
|
||||
free(data->bootmap_dir);
|
||||
free(data->targetbase);
|
||||
|
||||
Reference in New Issue
Block a user