yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone

Blame SOURCES/kvm-virtio-Fail-if-iommu_platform-is-requested-but-unsup.patch

a83cc2
From 0834f460b52a1a6b2bc5575ff2e05458d7036257 Mon Sep 17 00:00:00 2001
a83cc2
From: Kevin Wolf <kwolf@redhat.com>
a83cc2
Date: Mon, 12 Jul 2021 10:22:30 -0400
a83cc2
Subject: [PATCH 10/43] virtio: Fail if iommu_platform is requested, but
a83cc2
 unsupported
a83cc2
a83cc2
RH-Author: Miroslav Rezanina <mrezanin@redhat.com>
a83cc2
RH-Bugzilla: 1957194
a83cc2
a83cc2
Commit 2943b53f6 (' virtio: force VIRTIO_F_IOMMU_PLATFORM') made sure
a83cc2
that vhost can't just reject VIRTIO_F_IOMMU_PLATFORM when it was
a83cc2
requested. However, just adding it back to the negotiated flags isn't
a83cc2
right either because it promises support to the guest that the device
a83cc2
actually doesn't support. One example of a vhost-user device that
a83cc2
doesn't have support for the flag is the vhost-user-blk export of QEMU.
a83cc2
a83cc2
Instead of successfully creating a device that doesn't work, just fail
a83cc2
to plug the device when it doesn't support the feature, but it was
a83cc2
requested. This results in much clearer error messages.
a83cc2
a83cc2
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1935019
a83cc2
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
a83cc2
Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
a83cc2
Message-Id: <20210429171316.162022-6-kwolf@redhat.com>
a83cc2
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
a83cc2
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
a83cc2
(cherry picked from commit 04ceb61a4075fadbf374ef89662c41999da83489)
a83cc2
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
a83cc2
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
a83cc2
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
a83cc2
---
a83cc2
 hw/virtio/virtio-bus.c | 5 +++++
a83cc2
 1 file changed, 5 insertions(+)
a83cc2
a83cc2
diff --git a/hw/virtio/virtio-bus.c b/hw/virtio/virtio-bus.c
a83cc2
index d6332d45c3..859978d248 100644
a83cc2
--- a/hw/virtio/virtio-bus.c
a83cc2
+++ b/hw/virtio/virtio-bus.c
a83cc2
@@ -69,6 +69,11 @@ void virtio_bus_device_plugged(VirtIODevice *vdev, Error **errp)
a83cc2
         return;
a83cc2
     }
a83cc2
 
a83cc2
+    if (has_iommu && !virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM)) {
a83cc2
+        error_setg(errp, "iommu_platform=true is not supported by the device");
a83cc2
+        return;
a83cc2
+    }
a83cc2
+
a83cc2
     if (klass->device_plugged != NULL) {
a83cc2
         klass->device_plugged(qbus->parent, &local_err);
a83cc2
     }
a83cc2
-- 
a83cc2
2.27.0
a83cc2