qemu/hw-virtio-virtio-pci-Support-shadow-device-for-virti.patch

65 lines
2.0 KiB
Diff
Raw Normal View History

From 38c0538c8d847a2e39a9bae19f5b204abcf46b3b Mon Sep 17 00:00:00 2001
From: Yanan Wang <wangyanan55@huawei.com>
Date: Mon, 17 Jun 2024 20:42:22 +0800
Subject: [PATCH] hw/virtio/virtio-pci:Support shadow device for
virtio-net/blk/scsi devices
Currently we only support shadow device for "virtio-net", now let's
extend this feature to support "virtio-blk" and "virtio-scsi" devices.
Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
---
hw/virtio/virtio-pci.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 389a8db0ec..d675526016 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -886,6 +886,15 @@ int __attribute__((weak)) kvm_delete_shadow_device(PCIDevice *dev)
}
#endif
+#ifdef __aarch64__
+static bool shadow_device_supported(VirtIODevice *vdev)
+{
+ return !strcmp(vdev->name, "virtio-net") ||
+ !strcmp(vdev->name, "virtio-blk") ||
+ !strcmp(vdev->name, "virtio-scsi");
+}
+#endif
+
static int kvm_virtio_pci_vector_vq_use(VirtIOPCIProxy *proxy, int nvqs)
{
int queue_no;
@@ -893,7 +902,7 @@ static int kvm_virtio_pci_vector_vq_use(VirtIOPCIProxy *proxy, int nvqs)
VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
#ifdef __aarch64__
- if (!strcmp(vdev->name, "virtio-net")) {
+ if (shadow_device_supported(vdev)) {
kvm_create_shadow_device(&proxy->pci_dev);
}
#endif
@@ -906,7 +915,7 @@ static int kvm_virtio_pci_vector_vq_use(VirtIOPCIProxy *proxy, int nvqs)
}
#ifdef __aarch64__
- if (!strcmp(vdev->name, "virtio-net") && ret != 0) {
+ if (shadow_device_supported(vdev) && ret != 0) {
kvm_delete_shadow_device(&proxy->pci_dev);
}
#endif
@@ -955,7 +964,7 @@ static void kvm_virtio_pci_vector_vq_release(VirtIOPCIProxy *proxy, int nvqs)
}
#ifdef __aarch64__
- if (!strcmp(vdev->name, "virtio-net")) {
+ if (shadow_device_supported(vdev)) {
kvm_delete_shadow_device(&proxy->pci_dev);
}
#endif
--
2.41.0.windows.1