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