thebeanogamer / rpms / qemu-kvm

Forked from rpms/qemu-kvm 8 months ago
Clone

Blame SOURCES/kvm-pc-bios-s390-ccw-Fix-booting-with-logical-block-size.patch

29b115
From 03996a8a826c9186e4a16e1b4757f1ef5947a503 Mon Sep 17 00:00:00 2001
29b115
From: Thomas Huth <thuth@redhat.com>
29b115
Date: Fri, 5 Aug 2022 11:42:14 +0200
29b115
Subject: [PATCH 07/11] pc-bios/s390-ccw: Fix booting with logical block size <
29b115
 physical block size
29b115
29b115
RH-Author: Thomas Huth <thuth@redhat.com>
29b115
RH-MergeRequest: 113: pc-bios/s390-ccw: Fix booting with logical block size < physical block size
29b115
RH-Commit: [1/1] a45ff477bc7d7011ea6c4d42a1aade213d1e4690 (thuth/qemu-kvm-cs9)
29b115
RH-Bugzilla: 2112303
29b115
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
29b115
RH-Acked-by: David Hildenbrand <david@redhat.com>
29b115
RH-Acked-by: Claudio Imbrenda <None>
29b115
29b115
For accessing single blocks during boot, it's the logical block size that
29b115
matters. (Physical block sizes are rather interesting e.g. for creating
29b115
file systems with the correct alignment for speed reasons etc.).
29b115
So the s390-ccw bios has to use the logical block size for calculating
29b115
sector numbers during the boot phase, the "physical_block_exp" shift
29b115
value must not be taken into account. This change fixes the boot process
29b115
when the guest hast been installed on a disk where the logical block size
29b115
differs from the physical one, e.g. if the guest has been installed
29b115
like this:
29b115
29b115
 qemu-system-s390x -nographic -accel kvm -m 2G \
29b115
  -drive if=none,id=d1,file=fedora.iso,format=raw,media=cdrom \
29b115
  -device virtio-scsi -device scsi-cd,drive=d1 \
29b115
  -drive if=none,id=d2,file=test.qcow2,format=qcow2
29b115
  -device virtio-blk,drive=d2,physical_block_size=4096,logical_block_size=512
29b115
29b115
Linux correctly uses the logical block size of 512 for the installation,
29b115
but the s390-ccw bios tries to boot from a disk with 4096 block size so
29b115
far, as long as this patch has not been applied yet (well, it used to work
29b115
by accident in the past due to the virtio_assume_scsi() hack that used to
29b115
enforce 512 byte sectors on all virtio-block disks, but that hack has been
29b115
well removed in commit 5447de2619050a0a4d to fix other scenarios).
29b115
29b115
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112303
29b115
Message-Id: <20220805094214.285223-1-thuth@redhat.com>
29b115
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
29b115
Reviewed-by: Eric Farman <farman@linux.ibm.com>
29b115
Signed-off-by: Thomas Huth <thuth@redhat.com>
29b115
(cherry picked from commit 393296de19650e1400ca265914cfdeb313725363)
29b115
---
29b115
 pc-bios/s390-ccw/virtio-blkdev.c | 2 +-
29b115
 1 file changed, 1 insertion(+), 1 deletion(-)
29b115
29b115
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
29b115
index 8271c47296..794f99b42c 100644
29b115
--- a/pc-bios/s390-ccw/virtio-blkdev.c
29b115
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
29b115
@@ -173,7 +173,7 @@ int virtio_get_block_size(void)
29b115
 
29b115
     switch (vdev->senseid.cu_model) {
29b115
     case VIRTIO_ID_BLOCK:
29b115
-        return vdev->config.blk.blk_size << vdev->config.blk.physical_block_exp;
29b115
+        return vdev->config.blk.blk_size;
29b115
     case VIRTIO_ID_SCSI:
29b115
         return vdev->scsi_block_size;
29b115
     }
29b115
-- 
29b115
2.31.1
29b115