From e4c28afade86b8533b46bc87a56a8a0f32ab191a Mon Sep 17 00:00:00 2001 From: Jia Qingtong Date: Mon, 16 Jun 2025 17:24:13 +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 Signed-off-by: Jia Qingtong --- 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 558471307a..13220c258d 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1020,6 +1020,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; @@ -1027,7 +1036,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 @@ -1044,7 +1053,7 @@ static int kvm_virtio_pci_vector_vq_use(VirtIOPCIProxy *proxy, int nvqs) virtio_pci_commit_route_changes(vdev); #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 @@ -1093,7 +1102,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 -- Gitee