On Thu, Jun 23 2022, Thomas Huth <th...@redhat.com> wrote: > Feature negotiation should be done first, since some fields in the > config area can depend on the negotiated features and thus should > rather be read afterwards.
I suppose we don't negotiate any features that might affect the size of the config space? Anyway, restricting ourselves to the minimum length should be fine. > > Signed-off-by: Thomas Huth <th...@redhat.com> > --- > pc-bios/s390-ccw/virtio.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c > index 4e85a2eb82..0e92e994df 100644 > --- a/pc-bios/s390-ccw/virtio.c > +++ b/pc-bios/s390-ccw/virtio.c > @@ -262,10 +262,6 @@ void virtio_setup_ccw(VDev *vdev) > rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false); > IPL_assert(rc == 0, "Could not write DRIVER status to host"); > > - IPL_assert( > - run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false) == > 0, > - "Could not get block device configuration"); > - > /* Feature negotiation */ > for (i = 0; i < ARRAY_SIZE(vdev->guest_features); i++) { > feats.features = 0; > @@ -278,6 +274,9 @@ void virtio_setup_ccw(VDev *vdev) > IPL_assert(rc == 0, "Could not set features bits"); > } > > + rc = run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false); > + IPL_assert(rc == 0, "Could not get block device configuration"); Since you move this anyway: s/block device/boot device/ ? > + > for (i = 0; i < vdev->nr_vqs; i++) { > VqInfo info = { > .queue = (unsigned long long) ring_area + (i * VIRTIO_RING_SIZE), Related to feature negotiation: It seems that the bios currently supports legacy virtio only, doesn't it? It's probably fine for now, but there might be a way in the future to disable legacy virtio for all devices in QEMU, so we'll probably want to add virtio-1 support some day.