Blame SOURCES/kvm-pc-bios-s390-ccw-virtio-blkdev-Request-the-right-fea.patch

4841a6
From 042e966a70789bd3ed450fa4f57016129a34672e 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 37/37] pc-bios/s390-ccw/virtio-blkdev: Request the right
4841a6
 feature bits
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: [9/9] f04835423d648b04f2187ef9890f2d1689e2b57e
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 9125a314cca4a1838b09305a87d8efb98f80ab67
4841a6
Author: Thomas Huth <thuth@redhat.com>
4841a6
Date:   Mon Jul 4 13:19:01 2022 +0200
4841a6
4841a6
    pc-bios/s390-ccw/virtio-blkdev: Request the right feature bits
4841a6
4841a6
    The virtio-blk code uses the block size and geometry fields in the
4841a6
    config area. According to the virtio-spec, these have to be negotiated
4841a6
    with the right feature bits during initialization, otherwise they
4841a6
    might not be available. QEMU is so far very forgiving and always
4841a6
    provides them, but we should not rely on this behavior, so let's
4841a6
    better request them properly via the VIRTIO_BLK_F_GEOMETRY and
4841a6
    VIRTIO_BLK_F_BLK_SIZE feature bits.
4841a6
4841a6
    Message-Id: <20220704111903.62400-11-thuth@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-blkdev.c | 4 ++++
4841a6
 1 file changed, 4 insertions(+)
4841a6
4841a6
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
4841a6
index c175b66a47..8271c47296 100644
4841a6
--- a/pc-bios/s390-ccw/virtio-blkdev.c
4841a6
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
4841a6
@@ -13,6 +13,9 @@
4841a6
 #include "virtio.h"
4841a6
 #include "virtio-scsi.h"
4841a6
 
4841a6
+#define VIRTIO_BLK_F_GEOMETRY   (1 << 4)
4841a6
+#define VIRTIO_BLK_F_BLK_SIZE   (1 << 6)
4841a6
+
4841a6
 static int virtio_blk_read_many(VDev *vdev, ulong sector, void *load_addr,
4841a6
                                 int sec_num)
4841a6
 {
4841a6
@@ -223,6 +226,7 @@ int virtio_blk_setup_device(SubChannelId schid)
4841a6
 {
4841a6
     VDev *vdev = virtio_get_device();
4841a6
 
4841a6
+    vdev->guest_features[0] = VIRTIO_BLK_F_GEOMETRY | VIRTIO_BLK_F_BLK_SIZE;
4841a6
     vdev->schid = schid;
4841a6
     virtio_setup_ccw(vdev);
4841a6
 
4841a6
-- 
4841a6
2.35.3
4841a6