On 9/22/26 5:35 PM, Matthew Rosato wrote:
On 9/14/26 3:34 PM, Zhuoying Cai wrote:
Enable network booting via virtio-net-pci by implementing PCI transport
support for virtio-net.

This patch also extends endianness handling for virtio PCI ring operations in
little-endian to ensure correct behavior on s390x.

Signed-off-by: Zhuoying Cai <[email protected]>
Reviewed-by: Jared Rossi <[email protected]>
---
  pc-bios/s390-ccw/main.c       |  1 +
  pc-bios/s390-ccw/netmain.c    |  9 +++++++-
  pc-bios/s390-ccw/virtio-net.c | 41 ++++++++++++++++++++++++++++-------
  pc-bios/s390-ccw/virtio-pci.c | 20 +++++++++++++++++
  4 files changed, 62 insertions(+), 9 deletions(-)

diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 8fc1cbf653..28cab3b411 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -332,6 +332,7 @@ static void ipl_pci_device(void)
      }
switch (vdev->dev_type) {
+    case VIRTIO_ID_NET:
block, scsi (when you rebase on top of Jared's series) and now net will
all use the exact same code here by falling through.

How about a comment block above the switch statement explaining they all
intentionally fall through / use the same shared setup

      case VIRTIO_ID_BLOCK:
          if (virtio_setup() == 0) {
              zipl_load(); /* only return on error */
diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c
index bcb62bf6ca..e42e049063 100644
--- a/pc-bios/s390-ccw/netmain.c
+++ b/pc-bios/s390-ccw/netmain.c
@@ -498,7 +498,14 @@ int netmain(void)
      sclp_setup();
      puts("Network boot starting...");
- if (!virtio_ccw_net_setup()) {
+    /*
+     * CCW devices require subchannel enumeration here.
+     * PCI devices don't require specific setup: the transport is already
+     * initialized by ipl_pci_device(), and virtio_is_supported() is checked
+     * later in virtio_net_init().
+     */
This comment seems not quite accurate?

AFAICT ipl_pci_device() is just going to enable the PCI device, the
transport isn't setup until
virtio_net_init()->virtio_pci_setup()

To clarify this, please state that PCI devices do not need any specific
**net** setup.  The virtio-net-pci devices themselves still follow the
regular Virtio and PCI setup steps, plus generic network setup.

For Matt and anyone who might want more context, the virtio-net-ccw code
path contains some legacy code (relics of when the network and main BIOS
were built in separate binaries), which we were able to bypass for PCI, so
that is why virtio_ccw_net_setup() must be called here, but there is no
analogous virtio_pci_net_setup() needed.

Regards,
Jared Rossi


Reply via email to