Message ID | 20241008011552.2645520-12-jrossi@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x: Add Full Boot Order Support | expand |
On 08/10/2024 03.15, 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> > --- ... > diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c > index bc6ad8695f..0c2329c752 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 int virtio_setup(void) Maybe better use "bool" instead of "int" here... > { > Schib schib; > int ssid; > @@ -495,10 +495,10 @@ static void virtio_setup(void) > } > } > > - IPL_assert(found, "No virtio net device found"); > + return found; ... since the function obviously returns a boolean value. Thomas
On 10/9/24 7:35 AM, Thomas Huth wrote: > On 08/10/2024 03.15, 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> >> --- > ... >> diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c >> index bc6ad8695f..0c2329c752 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 int virtio_setup(void) > > Maybe better use "bool" instead of "int" here... > >> { >> Schib schib; >> int ssid; >> @@ -495,10 +495,10 @@ static void virtio_setup(void) >> } >> } >> - IPL_assert(found, "No virtio net device found"); >> + return found; > > ... since the function obviously returns a boolean value. > > Thomas > Fixed, changed return type to bool. Jared
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 7516e96a14..496dccb2aa 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -58,7 +58,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 534d900f9e..1874d4bf5e 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -1065,6 +1065,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..0c2329c752 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 int 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++) {