0727d3
From 042e966a70789bd3ed450fa4f57016129a34672e Mon Sep 17 00:00:00 2001
0727d3
From: Thomas Huth <thuth@redhat.com>
0727d3
Date: Fri, 8 Jul 2022 12:29:50 +0200
0727d3
Subject: [PATCH 37/37] pc-bios/s390-ccw/virtio-blkdev: Request the right
0727d3
 feature bits
0727d3
0727d3
RH-Author: Thomas Huth <thuth@redhat.com>
0727d3
RH-MergeRequest: 198: pc-bios/s390-ccw: Fix boot from disks with 4k sectors that do not have the typical DASD geometry
0727d3
RH-Commit: [9/9] f04835423d648b04f2187ef9890f2d1689e2b57e
0727d3
RH-Bugzilla: 2098076
0727d3
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
0727d3
RH-Acked-by: David Hildenbrand <david@redhat.com>
0727d3
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
0727d3
0727d3
Bugzilla: http://bugzilla.redhat.com/2098076
0727d3
0727d3
commit 9125a314cca4a1838b09305a87d8efb98f80ab67
0727d3
Author: Thomas Huth <thuth@redhat.com>
0727d3
Date:   Mon Jul 4 13:19:01 2022 +0200
0727d3
0727d3
    pc-bios/s390-ccw/virtio-blkdev: Request the right feature bits
0727d3
0727d3
    The virtio-blk code uses the block size and geometry fields in the
0727d3
    config area. According to the virtio-spec, these have to be negotiated
0727d3
    with the right feature bits during initialization, otherwise they
0727d3
    might not be available. QEMU is so far very forgiving and always
0727d3
    provides them, but we should not rely on this behavior, so let's
0727d3
    better request them properly via the VIRTIO_BLK_F_GEOMETRY and
0727d3
    VIRTIO_BLK_F_BLK_SIZE feature bits.
0727d3
0727d3
    Message-Id: <20220704111903.62400-11-thuth@redhat.com>
0727d3
    Signed-off-by: Thomas Huth <thuth@redhat.com>
0727d3
0727d3
Signed-off-by: Thomas Huth <thuth@redhat.com>
0727d3
---
0727d3
 pc-bios/s390-ccw/virtio-blkdev.c | 4 ++++
0727d3
 1 file changed, 4 insertions(+)
0727d3
0727d3
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
0727d3
index c175b66a47..8271c47296 100644
0727d3
--- a/pc-bios/s390-ccw/virtio-blkdev.c
0727d3
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
0727d3
@@ -13,6 +13,9 @@
0727d3
 #include "virtio.h"
0727d3
 #include "virtio-scsi.h"
0727d3
 
0727d3
+#define VIRTIO_BLK_F_GEOMETRY   (1 << 4)
0727d3
+#define VIRTIO_BLK_F_BLK_SIZE   (1 << 6)
0727d3
+
0727d3
 static int virtio_blk_read_many(VDev *vdev, ulong sector, void *load_addr,
0727d3
                                 int sec_num)
0727d3
 {
0727d3
@@ -223,6 +226,7 @@ int virtio_blk_setup_device(SubChannelId schid)
0727d3
 {
0727d3
     VDev *vdev = virtio_get_device();
0727d3
 
0727d3
+    vdev->guest_features[0] = VIRTIO_BLK_F_GEOMETRY | VIRTIO_BLK_F_BLK_SIZE;
0727d3
     vdev->schid = schid;
0727d3
     virtio_setup_ccw(vdev);
0727d3
 
0727d3
-- 
0727d3
2.35.3
0727d3