Message ID | 20241017014748.829029-12-jrossi@linux.ibm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | s390x: Add Full Boot Order Support | expand |
On 17/10/2024 03.47, jrossi@linux.ibm.com wrote: > From: Jared Rossi <jrossi@linux.ibm.com> > > Remove panic-on-error from Netboot 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/s390-ccw.h | 2 +- > pc-bios/s390-ccw/bootmap.c | 1 + > pc-bios/s390-ccw/netmain.c | 17 +++++++++++------ > pc-bios/s390-ccw/virtio-net.c | 7 +++++-- > 4 files changed, 18 insertions(+), 9 deletions(-) > > diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h > index 3e844abd71..344ad15655 100644 > --- a/pc-bios/s390-ccw/s390-ccw.h > +++ b/pc-bios/s390-ccw/s390-ccw.h > @@ -57,7 +57,7 @@ unsigned int get_loadparm_index(void); > void main(void); > > /* netmain.c */ > -void netmain(void); > +int netmain(void); > > /* sclp.c */ > void sclp_print(const char *string); > diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c > index a277fc3431..f1cfb7aaa8 100644 > --- a/pc-bios/s390-ccw/bootmap.c > +++ b/pc-bios/s390-ccw/bootmap.c > @@ -1073,6 +1073,7 @@ void zipl_load(void) > > if (virtio_get_device_type() == VIRTIO_ID_NET) { > netmain(); > + panic("\n! Cannot IPL from this network !\n"); > } > > if (ipl_scsi()) { > diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c > index bc6ad8695f..0bb359e09f 100644 > --- a/pc-bios/s390-ccw/netmain.c > +++ b/pc-bios/s390-ccw/netmain.c > @@ -464,7 +464,7 @@ static bool find_net_dev(Schib *schib, int dev_no) > return false; > } > > -static void virtio_setup(void) > +static bool virtio_setup(void) > { > Schib schib; > int ssid; > @@ -495,10 +495,10 @@ static void virtio_setup(void) > } > } > > - IPL_assert(found, "No virtio net device found"); > + return found; > } > > -void netmain(void) > +int netmain(void) > { > filename_ip_t fn_ip; > int rc, fnlen; > @@ -506,11 +506,15 @@ void netmain(void) > sclp_setup(); > puts("Network boot starting..."); > > - virtio_setup(); > + if (!virtio_setup()) { > + puts("No virtio net device found."); > + return 1; > + } > > rc = net_init(&fn_ip); > if (rc) { > - panic("Network initialization failed. Halting."); > + puts("Network initialization failed."); > + return 1; > } > > fnlen = strlen(fn_ip.filename); > @@ -528,5 +532,6 @@ void netmain(void) > jump_to_low_kernel(); > } > > - panic("Failed to load OS from network."); > + puts("Failed to load OS from network."); > + return 1; > } I'd maybe also change the netmain() function to return -1 in case of errors. Anyway: Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 3e844abd71..344ad15655 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -57,7 +57,7 @@ unsigned int get_loadparm_index(void); void main(void); /* netmain.c */ -void netmain(void); +int netmain(void); /* sclp.c */ void sclp_print(const char *string); diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index a277fc3431..f1cfb7aaa8 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -1073,6 +1073,7 @@ void zipl_load(void) if (virtio_get_device_type() == VIRTIO_ID_NET) { netmain(); + panic("\n! Cannot IPL from this network !\n"); } if (ipl_scsi()) { diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index bc6ad8695f..0bb359e09f 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -464,7 +464,7 @@ static bool find_net_dev(Schib *schib, int dev_no) return false; } -static void virtio_setup(void) +static bool virtio_setup(void) { Schib schib; int ssid; @@ -495,10 +495,10 @@ static void virtio_setup(void) } } - IPL_assert(found, "No virtio net device found"); + return found; } -void netmain(void) +int netmain(void) { filename_ip_t fn_ip; int rc, fnlen; @@ -506,11 +506,15 @@ void netmain(void) sclp_setup(); puts("Network boot starting..."); - virtio_setup(); + if (!virtio_setup()) { + puts("No virtio net device found."); + return 1; + } rc = net_init(&fn_ip); if (rc) { - panic("Network initialization failed. Halting."); + puts("Network initialization failed."); + return 1; } fnlen = strlen(fn_ip.filename); @@ -528,5 +532,6 @@ void netmain(void) jump_to_low_kernel(); } - panic("Failed to load OS from network."); + puts("Failed to load OS from network."); + return 1; } diff --git a/pc-bios/s390-ccw/virtio-net.c b/pc-bios/s390-ccw/virtio-net.c index 2fcb0a58c5..f9854a22c3 100644 --- a/pc-bios/s390-ccw/virtio-net.c +++ b/pc-bios/s390-ccw/virtio-net.c @@ -54,8 +54,11 @@ int virtio_net_init(void *mac_addr) vdev->guest_features[0] = VIRTIO_NET_F_MAC_BIT; virtio_setup_ccw(vdev); - IPL_assert(vdev->guest_features[0] & VIRTIO_NET_F_MAC_BIT, - "virtio-net device does not support the MAC address feature"); + if (!(vdev->guest_features[0] & VIRTIO_NET_F_MAC_BIT)) { + puts("virtio-net device does not support the MAC address feature"); + return -1; + } + memcpy(mac_addr, vdev->config.net.mac, ETH_ALEN); for (i = 0; i < 64; i++) {