[PATCH v2] virtio-mem-pci: force virtio version 1

David Hildenbrand posted 1 patch 3 years, 9 months ago
Test docker-quick@centos7 failed
Test docker-mingw@fedora failed
Test checkpatch failed
Test FreeBSD failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200727115905.129397-1-david@redhat.com
Maintainers: David Hildenbrand <david@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>
hw/virtio/virtio-mem-pci.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH v2] virtio-mem-pci: force virtio version 1
Posted by David Hildenbrand 3 years, 9 months ago
Trying to run simple virtio-mem-pci examples currently fails with
    qemu-system-x86_64: -device virtio-mem-pci,id=vm0,memdev=mem0,node=0,
    requested-size=300M: device is modern-only, use disable-legacy=on
due to the added safety checks in 9b3a35ec8236 ("virtio: verify that legacy
support is not accidentally on").

As noted by Conny, we have to force virtio version 1. While at it, use
qdev_realize() to set the parent bus and realize - like most other
virtio-*-pci implementations.

Fixes: 0b9a2443a48b ("virtio-pci: Proxy for virtio-mem")
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 hw/virtio/virtio-mem-pci.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/virtio/virtio-mem-pci.c b/hw/virtio/virtio-mem-pci.c
index d375280ee1..590cec041b 100644
--- a/hw/virtio/virtio-mem-pci.c
+++ b/hw/virtio/virtio-mem-pci.c
@@ -21,8 +21,8 @@ static void virtio_mem_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
     VirtIOMEMPCI *mem_pci = VIRTIO_MEM_PCI(vpci_dev);
     DeviceState *vdev = DEVICE(&mem_pci->vdev);
 
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    object_property_set_bool(OBJECT(vdev), "realized", true, errp);
+    virtio_pci_force_virtio_1(vpci_dev);
+    qdev_realize(vdev, BUS(&vpci_dev->bus), errp);
 }
 
 static void virtio_mem_pci_set_addr(MemoryDeviceState *md, uint64_t addr,
-- 
2.26.2


Re: [PATCH v2] virtio-mem-pci: force virtio version 1
Posted by Michael S. Tsirkin 3 years, 9 months ago
On Mon, Jul 27, 2020 at 01:59:05PM +0200, David Hildenbrand wrote:
> Trying to run simple virtio-mem-pci examples currently fails with
>     qemu-system-x86_64: -device virtio-mem-pci,id=vm0,memdev=mem0,node=0,
>     requested-size=300M: device is modern-only, use disable-legacy=on
> due to the added safety checks in 9b3a35ec8236 ("virtio: verify that legacy
> support is not accidentally on").
> 
> As noted by Conny, we have to force virtio version 1. While at it, use
> qdev_realize() to set the parent bus and realize - like most other
> virtio-*-pci implementations.
> 
> Fixes: 0b9a2443a48b ("virtio-pci: Proxy for virtio-mem")
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: "Michael S. Tsirkin" <mst@redhat.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---


In the future, pls add a changelog here.
E.g.
changes from v1:
- rebased on master
- updated commit log to address mst's comments

Anyway, queued.

Thanks!

>  hw/virtio/virtio-mem-pci.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/virtio/virtio-mem-pci.c b/hw/virtio/virtio-mem-pci.c
> index d375280ee1..590cec041b 100644
> --- a/hw/virtio/virtio-mem-pci.c
> +++ b/hw/virtio/virtio-mem-pci.c
> @@ -21,8 +21,8 @@ static void virtio_mem_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
>      VirtIOMEMPCI *mem_pci = VIRTIO_MEM_PCI(vpci_dev);
>      DeviceState *vdev = DEVICE(&mem_pci->vdev);
>  
> -    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
> -    object_property_set_bool(OBJECT(vdev), "realized", true, errp);
> +    virtio_pci_force_virtio_1(vpci_dev);
> +    qdev_realize(vdev, BUS(&vpci_dev->bus), errp);
>  }
>  
>  static void virtio_mem_pci_set_addr(MemoryDeviceState *md, uint64_t addr,
> -- 
> 2.26.2