Blame SOURCES/kvm-pc-bios-s390-ccw-virtio-Read-device-config-after-fea.patch

4841a6
From a60940fb7ef026f3aa968e77389efa51ea648ddf Mon Sep 17 00:00:00 2001
4841a6
From: Thomas Huth <thuth@redhat.com>
4841a6
Date: Fri, 8 Jul 2022 12:29:50 +0200
4841a6
Subject: [PATCH 34/37] pc-bios/s390-ccw/virtio: Read device config after
4841a6
 feature negotiation
4841a6
4841a6
RH-Author: Thomas Huth <thuth@redhat.com>
4841a6
RH-MergeRequest: 198: pc-bios/s390-ccw: Fix boot from disks with 4k sectors that do not have the typical DASD geometry
4841a6
RH-Commit: [6/9] 99ed8765d614207db19ded75d62c65171674d982
4841a6
RH-Bugzilla: 2098076
4841a6
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
4841a6
RH-Acked-by: David Hildenbrand <david@redhat.com>
4841a6
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
4841a6
4841a6
Bugzilla: http://bugzilla.redhat.com/2098076
4841a6
4841a6
commit aa5c69ce99411c4886bcd051f288afc02b6d968d
4841a6
Author: Thomas Huth <thuth@redhat.com>
4841a6
Date:   Mon Jul 4 13:18:58 2022 +0200
4841a6
4841a6
    pc-bios/s390-ccw/virtio: Read device config after feature negotiation
4841a6
4841a6
    Feature negotiation should be done first, since some fields in the
4841a6
    config area can depend on the negotiated features and thus should
4841a6
    rather be read afterwards.
4841a6
4841a6
    While we're at it, also adjust the error message here a little bit
4841a6
    (the code is nowadays used for non-block virtio devices, too).
4841a6
4841a6
    Message-Id: <20220704111903.62400-8-thuth@redhat.com>
4841a6
    Reviewed-by: Eric Farman <farman@linux.ibm.com>
4841a6
    Reviewed-by: Cornelia Huck <cohuck@redhat.com>
4841a6
    Signed-off-by: Thomas Huth <thuth@redhat.com>
4841a6
4841a6
Signed-off-by: Thomas Huth <thuth@redhat.com>
4841a6
---
4841a6
 pc-bios/s390-ccw/virtio.c | 7 +++----
4841a6
 1 file changed, 3 insertions(+), 4 deletions(-)
4841a6
4841a6
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
4841a6
index 4e85a2eb82..d8c2b52710 100644
4841a6
--- a/pc-bios/s390-ccw/virtio.c
4841a6
+++ b/pc-bios/s390-ccw/virtio.c
4841a6
@@ -262,10 +262,6 @@ void virtio_setup_ccw(VDev *vdev)
4841a6
     rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false);
4841a6
     IPL_assert(rc == 0, "Could not write DRIVER status to host");
4841a6
 
4841a6
-    IPL_assert(
4841a6
-        run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false) == 0,
4841a6
-       "Could not get block device configuration");
4841a6
-
4841a6
     /* Feature negotiation */
4841a6
     for (i = 0; i < ARRAY_SIZE(vdev->guest_features); i++) {
4841a6
         feats.features = 0;
4841a6
@@ -278,6 +274,9 @@ void virtio_setup_ccw(VDev *vdev)
4841a6
         IPL_assert(rc == 0, "Could not set features bits");
4841a6
     }
4841a6
 
4841a6
+    rc = run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false);
4841a6
+    IPL_assert(rc == 0, "Could not get virtio device configuration");
4841a6
+
4841a6
     for (i = 0; i < vdev->nr_vqs; i++) {
4841a6
         VqInfo info = {
4841a6
             .queue = (unsigned long long) ring_area + (i * VIRTIO_RING_SIZE),
4841a6
-- 
4841a6
2.35.3
4841a6