From: Jared Rossi <jrossi@linux.ibm.com>
To: Thomas Huth <thuth@redhat.com>,
qemu-devel@nongnu.org, qemu-s390x@nongnu.org
Cc: frankja@linux.ibm.com
Subject: Re: [PATCH 07/18] pc-bios/s390-ccw: Remove panics from ISO IPL path
Date: Fri, 27 Sep 2024 13:15:12 -0400 [thread overview]
Message-ID: <00351eda-78c2-46f6-a122-3527736d0fa5@linux.ibm.com> (raw)
In-Reply-To: <77cad234-524d-4166-ab1b-10666c8c676e@redhat.com>
On 9/27/24 11:02 AM, Thomas Huth wrote:
> On 27/09/2024 02.51, jrossi@linux.ibm.com wrote:
>> From: Jared Rossi <jrossi@linux.ibm.com>
>>
>> Remove panic-on-error from IPL ISO El Torito specific functions so
>> that error
>> recovery may be possible in the future.
>>
>> Functions that would previously panic now provide a return code.
>>
>> Signed-off-by: Jared Rossi <jrossi@linux.ibm.com>
>>
>> ---
>> pc-bios/s390-ccw/bootmap.h | 17 +++++++---
>> pc-bios/s390-ccw/s390-ccw.h | 1 +
>> pc-bios/s390-ccw/bootmap.c | 64 ++++++++++++++++++++++++-------------
>> 3 files changed, 55 insertions(+), 27 deletions(-)
>>
>> diff --git a/pc-bios/s390-ccw/bootmap.h b/pc-bios/s390-ccw/bootmap.h
>> index bbe2c132aa..cb5346829b 100644
>> --- a/pc-bios/s390-ccw/bootmap.h
>> +++ b/pc-bios/s390-ccw/bootmap.h
>> @@ -385,17 +385,24 @@ static inline uint32_t iso_733_to_u32(uint64_t x)
>> #define ISO_PRIMARY_VD_SECTOR 16
>> -static inline void read_iso_sector(uint32_t block_offset, void *buf,
>> +static inline int read_iso_sector(uint32_t block_offset, void *buf,
>> const char *errmsg)
>> {
>> - IPL_assert(virtio_read_many(block_offset, buf, 1) == 0, errmsg);
>> + if (virtio_read(block_offset, buf)) {
>> + puts(errmsg);
>> + return 1;
>> + }
>> + return 0;
>> }
>> -static inline void read_iso_boot_image(uint32_t block_offset, void
>> *load_addr,
>> +static inline int read_iso_boot_image(uint32_t block_offset, void
>> *load_addr,
>> uint32_t blks_to_load)
>> {
>> - IPL_assert(virtio_read_many(block_offset, load_addr,
>> blks_to_load) == 0,
>> - "Failed to read boot image!");
>> + if (!virtio_read_many(block_offset, load_addr, blks_to_load)) {
>
> That "!" looks wrong here? Or do I misunderstood the original
> IPL_assert() condition?
>
Basically all of the IPL_assert() conditions become logically flipped,
but it is
intended. IPL_assert() panics if success condition is NOT met, but in
the new
version an error code is returned if an failure condition IS met, so we are
branching on the inverse condition.
>> + puts("Failed to read boot image!");
>> + return 1;
>> + }
>> + return 0;
>> }
>> #define ISO9660_MAX_DIR_DEPTH 8
>> diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
>> index 0ed7eb8ade..cbd92f3671 100644
>> --- a/pc-bios/s390-ccw/s390-ccw.h
>> +++ b/pc-bios/s390-ccw/s390-ccw.h
>> @@ -30,6 +30,7 @@ typedef unsigned long long u64;
>> #define EIO 1
>> #define EBUSY 2
>> #define ENODEV 3
>> +#define EINVAL 4
>> #ifndef MIN
>> #define MIN(a, b) (((a) < (b)) ? (a) : (b))
>> diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
>> index 414c3f1b47..31cf0f6d97 100644
>> --- a/pc-bios/s390-ccw/bootmap.c
>> +++ b/pc-bios/s390-ccw/bootmap.c
>> @@ -678,8 +678,10 @@ static bool
>> is_iso_bc_entry_compatible(IsoBcSection *s)
>> if (s->unused || !s->sector_count) {
>> return false;
>> }
>> - read_iso_sector(bswap32(s->load_rba), magic_sec,
>> - "Failed to read image sector 0");
>> + if (read_iso_sector(bswap32(s->load_rba), magic_sec,
>> + "Failed to read image sector 0")) {
>> + return false;
>> + }
>> /* Checking bytes 8 - 32 for S390 Linux magic */
>> return !memcmp(magic_sec + 8, linux_s390_magic, 24);
>> @@ -706,14 +708,18 @@ static inline uint32_t
>> iso_get_file_size(uint32_t load_rba)
>> sec_offset[0] = 0;
>> while (level >= 0) {
>> - IPL_assert(sec_offset[level] <= ISO_SECTOR_SIZE,
>> - "Directory tree structure violation");
>> + if (sec_offset[level] > ISO_SECTOR_SIZE) {
>> + puts("Directory tree structure violation");
>> + return -EIO;
>> + }
>> cur_record = (IsoDirHdr *)(temp + sec_offset[level]);
>> if (sec_offset[level] == 0) {
>> - read_iso_sector(sec_loc[level], temp,
>> - "Failed to read ISO directory");
>> + if (virtio_read(sec_loc[level], temp)) {
>> + puts("Failed to read ISO directory");
>> + return -EIO;
>> + }
>
> Any reasons for switching from read_iso_sector() directly to
> virtio_read() here?
I think this is just an oversight on my part. I had thought to remove the
read_iso_sector() function entirely since it is just a wrapper for
virtio_read() that becomes redundant once the panic is removed, but it looks
like I wasn't consistent with where I removed it. In my opinion we can
remove
read_iso_sector() and just call virtio_read(), but either way it should be
consistent, so I will standardize the calls. I don't see any compelling
reason
to keep the read_iso_sector() function since all it is doing is checking the
RC of virtio_read(), which we will want to check anyway to determine if
we need
to abort the IPL here.
>
> Apart from that, patch looks fine for me, thanks for doing this
> clean-up work!
>
> Thomas
>
next prev parent reply other threads:[~2024-09-27 17:16 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-27 0:50 [PATCH V2 0/18] s390x: Add Full Boot Order Support jrossi
2024-09-27 0:51 ` [PATCH 01/18] hw/s390x/ipl: Provide more memory to the s390-ccw.img firmware jrossi
2024-09-27 0:51 ` [PATCH 02/18] pc-bios/s390-ccw: Use the libc from SLOF and remove sclp prints jrossi
2024-09-27 0:51 ` [PATCH 03/18] pc-bios/s390-ccw: Link the netboot code into the main s390-ccw.img binary jrossi
2024-09-27 0:51 ` [PATCH 04/18] hw/s390x: Remove the possibility to load the s390-netboot.img binary jrossi
2024-09-27 0:51 ` [PATCH 05/18] pc-bios/s390-ccw: Merge netboot.mak into the main Makefile jrossi
2024-09-27 0:51 ` [PATCH 06/18] docs/system/s390x/bootdevices: Update the documentation about network booting jrossi
2024-09-27 0:51 ` [PATCH 07/18] pc-bios/s390-ccw: Remove panics from ISO IPL path jrossi
2024-09-27 15:02 ` Thomas Huth
2024-09-27 17:15 ` Jared Rossi [this message]
2024-09-30 6:11 ` Thomas Huth
2024-09-30 13:10 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 08/18] pc-bios/s390-ccw: Remove panics from ECKD " jrossi
2024-09-27 15:29 ` Thomas Huth
2024-09-27 17:25 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 09/18] pc-bios/s390-ccw: Remove panics from SCSI " jrossi
2024-09-30 7:48 ` Thomas Huth
2024-09-30 10:13 ` Thomas Huth
2024-09-27 0:51 ` [PATCH 10/18] pc-bios/s390-ccw: Remove panics from DASD " jrossi
2024-09-30 8:14 ` Thomas Huth
2024-09-27 0:51 ` [PATCH 11/18] pc-bios/s390-ccw: Remove panics from Netboot " jrossi
2024-09-30 9:39 ` Thomas Huth
2024-09-30 13:15 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 12/18] pc-bios/s390-ccw: Enable failed IPL to return after error jrossi
2024-09-30 10:11 ` Thomas Huth
2024-09-30 13:29 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 13/18] include/hw/s390x: Add include files for common IPL structs jrossi
2024-09-30 10:42 ` Thomas Huth
2024-09-30 13:31 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 14/18] s390x: Add individual loadparm assignment to CCW device jrossi
2024-09-30 11:25 ` Thomas Huth
2024-09-27 0:51 ` [PATCH 15/18] hw/s390x: Build an IPLB for each boot device jrossi
2024-09-30 11:59 ` Thomas Huth
2024-09-30 13:39 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 16/18] s390x: Rebuild IPLB for SCSI device directly from DIAG308 jrossi
2024-09-30 12:15 ` Thomas Huth
2024-09-30 13:46 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 17/18] pc-bios/s390x: Enable multi-device boot loop jrossi
2024-09-30 12:32 ` Thomas Huth
2024-09-30 13:48 ` Jared Rossi
2024-09-30 13:08 ` Thomas Huth
2024-09-30 13:52 ` Jared Rossi
2024-09-27 0:51 ` [PATCH 18/18] docs/system: Update documentation for s390x IPL jrossi
2024-09-30 12:34 ` Thomas Huth
2024-09-30 13:14 ` [PATCH V2 0/18] s390x: Add Full Boot Order Support Thomas Huth
2024-09-30 14:20 ` Jared Rossi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=00351eda-78c2-46f6-a122-3527736d0fa5@linux.ibm.com \
--to=jrossi@linux.ibm.com \
--cc=frankja@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).