On Tue, 20 Dec 2022 at 18:56, Michael S. Tsirkin mst@redhat.com wrote:
On Tue, Dec 20, 2022 at 02:17:45PM +0100, Marek Szyprowski wrote:
On 20.12.2022 11:54, Michael S. Tsirkin wrote:
On Tue, Dec 20, 2022 at 06:27:59PM +0800, Xuan Zhuo wrote:
On Tue, 20 Dec 2022 14:51:54 +0530, Naresh Kamboju naresh.kamboju@linaro.org wrote:
The qemu-x86_64 and qemu-arm64 boot failed with Linux next-20221220 tag. It is always reproducible with gcc-11/ gcc-12 and clang tool chains.
Reported-by: Linux Kernel Functional Testing lkft@linaro.org
<6>[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x000f0510] <5>[ 0.000000] Linux version 6.1.0-next-20221220 (tuxmake@tuxmake) (Debian clang version 16.0.0 (++20221218072110+9c1b82599dac-1~exp1~20221218072217.501), Debian LLD 16.0.0) #1 SMP PREEMPT @1671498176 <5>[ 0.000000] random: crng init done <6>[ 0.000000] Machine model: linux,dummy-virt .... <6>[ 3.571098] loop: module loaded <6>[ 3.573410] virtio_blk virtio0: 1/0/0 default/read/poll queues <5>[ 3.578816] virtio_blk virtio0: [vda] 2816420 512-byte logical blocks (1.44 GB/1.34 GiB) <4>[ 3.581234] ------------[ cut here ]------------ <2>[ 3.581595] kernel BUG at drivers/virtio/virtio.c:122! <0>[ 3.582906] Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
<Trim>
Testing this fixup now:
Thanks for providing a quick fix.
commit f9503d0fd839b59e0f48b00c20635437c41420ed Author: Michael S. Tsirkin mst@redhat.com Date: Tue Dec 20 05:53:41 2022 -0500
fixup! virtio-blk: add support for zoned block devices
I also confirm that this patch fixes the issue with broken virtio block device observed on QEMU arm/arm64 'virt' machines and linux next-20221220. Thanks for the fix!
Tested-by: Marek Szyprowski m.szyprowski@samsung.com
Tested-by: Linux Kernel Functional Testing lkft@linaro.org
Merged the fix already so I'm not sure I can add this tag. If I rebase before pull request I will, thanks!
[Sorry for delayed reply]
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index ff49052e26f7..d8cdaeb51d1c 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c @@ -775,6 +775,10 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev, return ret; }
+static inline bool virtblk_has_zoned_feature(struct virtio_device *vdev) +{
- return virtio_has_feature(vdev, VIRTIO_BLK_F_ZONED);
+} #else
/* @@ -790,6 +794,11 @@ static inline int virtblk_probe_zoned_device(struct virtio_device *vdev, { return -EOPNOTSUPP; }
+static inline bool virtblk_has_zoned_feature(struct virtio_device *vdev) +{
- return false;
+} #endif /* CONFIG_BLK_DEV_ZONED */
/* return id (s/n) string for *disk to *id_str @@ -1576,11 +1585,11 @@ static int virtblk_probe(struct virtio_device *vdev) else q->limits.discard_granularity = blk_size; }
virtblk_update_capacity(vblk, false); virtio_device_ready(vdev);
- if (virtio_has_feature(vdev, VIRTIO_BLK_F_ZONED)) {
- if (virtblk_has_zoned_feature(vdev)) { err = virtblk_probe_zoned_device(vdev, vblk, q); if (err) goto out_cleanup_disk;
Best regards
Marek Szyprowski, PhD Samsung R&D Institute Poland
-- Linaro LKFT https://lkft.linaro.org