[PATCH v2] hw/virtio: rename vhost-user-device and make user creatable

Alex Bennée posted 1 patch 3 weeks, 6 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250901105948.982583-1-alex.bennee@linaro.org
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Stefano Garzarella <sgarzare@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>
docs/system/devices/vhost-user.rst            | 20 +++++++------------
include/hw/virtio/vhost-user-base.h           |  2 +-
...ice-pci.c => vhost-user-test-device-pci.c} | 17 +++++++---------
...user-device.c => vhost-user-test-device.c} |  9 +++------
hw/virtio/Kconfig                             |  5 +++++
hw/virtio/meson.build                         |  5 +++--
6 files changed, 26 insertions(+), 32 deletions(-)
rename hw/virtio/{vhost-user-device-pci.c => vhost-user-test-device-pci.c} (77%)
rename hw/virtio/{vhost-user-device.c => vhost-user-test-device.c} (87%)
[PATCH v2] hw/virtio: rename vhost-user-device and make user creatable
Posted by Alex Bennée 3 weeks, 6 days ago
We didn't make the device user creatable in the first place because we
were worried users might get confused. Rename the device to make its
nature as a test device even more explicit. While we are at it add a
Kconfig variable so it can be skipped for those that want to thin out
their build configuration even further.

Acked-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250820195632.1956795-1-alex.bennee@linaro.org>

---
v1
  - add review tags, ready to merge
v2
  - keep the -base name on TYPE_VHOST_USER_TEST_DEVICE_PCI
---
 docs/system/devices/vhost-user.rst            | 20 +++++++------------
 include/hw/virtio/vhost-user-base.h           |  2 +-
 ...ice-pci.c => vhost-user-test-device-pci.c} | 17 +++++++---------
 ...user-device.c => vhost-user-test-device.c} |  9 +++------
 hw/virtio/Kconfig                             |  5 +++++
 hw/virtio/meson.build                         |  5 +++--
 6 files changed, 26 insertions(+), 32 deletions(-)
 rename hw/virtio/{vhost-user-device-pci.c => vhost-user-test-device-pci.c} (77%)
 rename hw/virtio/{vhost-user-device.c => vhost-user-test-device.c} (87%)

diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst
index 35259d8ec7c..bddf8df5ed5 100644
--- a/docs/system/devices/vhost-user.rst
+++ b/docs/system/devices/vhost-user.rst
@@ -62,26 +62,20 @@ platform details for what sort of virtio bus to use.
 The referenced *daemons* are not exhaustive, any conforming backend
 implementing the device and using the vhost-user protocol should work.
 
-vhost-user-device
-^^^^^^^^^^^^^^^^^
+vhost-user-test-device
+^^^^^^^^^^^^^^^^^^^^^^
 
-The vhost-user-device is a generic development device intended for
-expert use while developing new backends. The user needs to specify
-all the required parameters including:
+The vhost-user-test-device is a generic development device intended
+for expert use while developing new backends. The user needs to
+specify all the required parameters including:
 
   - Device ``virtio-id``
   - The ``num_vqs`` it needs and their ``vq_size``
   - The ``config_size`` if needed
 
 .. note::
-  To prevent user confusion you cannot currently instantiate
-  vhost-user-device without first patching out::
-
-    /* Reason: stop inexperienced users confusing themselves */
-    dc->user_creatable = false;
-
-  in ``vhost-user-device.c`` and ``vhost-user-device-pci.c`` file and
-  rebuilding.
+  While this is a useful device for development it is not recommended
+  for production use.
 
 vhost-user daemon
 =================
diff --git a/include/hw/virtio/vhost-user-base.h b/include/hw/virtio/vhost-user-base.h
index 51d0968b893..387e434b804 100644
--- a/include/hw/virtio/vhost-user-base.h
+++ b/include/hw/virtio/vhost-user-base.h
@@ -44,6 +44,6 @@ struct VHostUserBaseClass {
 };
 
 
-#define TYPE_VHOST_USER_DEVICE "vhost-user-device"
+#define TYPE_VHOST_USER_TEST_DEVICE "vhost-user-test-device"
 
 #endif /* QEMU_VHOST_USER_BASE_H */
diff --git a/hw/virtio/vhost-user-device-pci.c b/hw/virtio/vhost-user-test-device-pci.c
similarity index 77%
rename from hw/virtio/vhost-user-device-pci.c
rename to hw/virtio/vhost-user-test-device-pci.c
index f10bac874e7..b4ed0efb50f 100644
--- a/hw/virtio/vhost-user-device-pci.c
+++ b/hw/virtio/vhost-user-test-device-pci.c
@@ -18,13 +18,13 @@ struct VHostUserDevicePCI {
     VHostUserBase vub;
 };
 
-#define TYPE_VHOST_USER_DEVICE_PCI "vhost-user-device-pci-base"
+#define TYPE_VHOST_USER_TEST_DEVICE_PCI "vhost-user-test-device-pci-base"
 
-OBJECT_DECLARE_SIMPLE_TYPE(VHostUserDevicePCI, VHOST_USER_DEVICE_PCI)
+OBJECT_DECLARE_SIMPLE_TYPE(VHostUserDevicePCI, VHOST_USER_TEST_DEVICE_PCI)
 
 static void vhost_user_device_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
 {
-    VHostUserDevicePCI *dev = VHOST_USER_DEVICE_PCI(vpci_dev);
+    VHostUserDevicePCI *dev = VHOST_USER_TEST_DEVICE_PCI(vpci_dev);
     DeviceState *vdev = DEVICE(&dev->vub);
 
     vpci_dev->nvectors = 1;
@@ -38,9 +38,6 @@ static void vhost_user_device_pci_class_init(ObjectClass *klass,
     VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
     PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
 
-    /* Reason: stop users confusing themselves */
-    dc->user_creatable = false;
-
     k->realize = vhost_user_device_pci_realize;
     set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
     pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
@@ -51,15 +48,15 @@ static void vhost_user_device_pci_class_init(ObjectClass *klass,
 
 static void vhost_user_device_pci_instance_init(Object *obj)
 {
-    VHostUserDevicePCI *dev = VHOST_USER_DEVICE_PCI(obj);
+    VHostUserDevicePCI *dev = VHOST_USER_TEST_DEVICE_PCI(obj);
 
     virtio_instance_init_common(obj, &dev->vub, sizeof(dev->vub),
-                                TYPE_VHOST_USER_DEVICE);
+                                TYPE_VHOST_USER_TEST_DEVICE);
 }
 
 static const VirtioPCIDeviceTypeInfo vhost_user_device_pci_info = {
-    .base_name = TYPE_VHOST_USER_DEVICE_PCI,
-    .non_transitional_name = "vhost-user-device-pci",
+    .base_name = TYPE_VHOST_USER_TEST_DEVICE_PCI,
+    .non_transitional_name = "vhost-user-test-device-pci",
     .instance_size = sizeof(VHostUserDevicePCI),
     .instance_init = vhost_user_device_pci_instance_init,
     .class_init = vhost_user_device_pci_class_init,
diff --git a/hw/virtio/vhost-user-device.c b/hw/virtio/vhost-user-test-device.c
similarity index 87%
rename from hw/virtio/vhost-user-device.c
rename to hw/virtio/vhost-user-test-device.c
index 3939bdf7552..1b98ea3e488 100644
--- a/hw/virtio/vhost-user-device.c
+++ b/hw/virtio/vhost-user-test-device.c
@@ -1,5 +1,5 @@
 /*
- * Generic vhost-user-device implementation for any vhost-user-backend
+ * Generic vhost-user-test-device implementation for any vhost-user-backend
  *
  * This is a concrete implementation of vhost-user-base which can be
  * configured via properties. It is useful for development and
@@ -25,7 +25,7 @@
  */
 
 static const VMStateDescription vud_vmstate = {
-    .name = "vhost-user-device",
+    .name = "vhost-user-test-device",
     .unmigratable = 1,
 };
 
@@ -41,16 +41,13 @@ static void vud_class_init(ObjectClass *klass, const void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
 
-    /* Reason: stop inexperienced users confusing themselves */
-    dc->user_creatable = false;
-
     device_class_set_props(dc, vud_properties);
     dc->vmsd = &vud_vmstate;
     set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
 }
 
 static const TypeInfo vud_info = {
-    .name = TYPE_VHOST_USER_DEVICE,
+    .name = TYPE_VHOST_USER_TEST_DEVICE,
     .parent = TYPE_VHOST_USER_BASE,
     .class_init = vud_class_init,
 };
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index 7648a2d68da..10f5c53ac09 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -126,3 +126,8 @@ config VHOST_USER_SCMI
     bool
     default y
     depends on VIRTIO && VHOST_USER && ARM
+
+config VHOST_USER_TEST
+    bool
+    default y
+    depends on VIRTIO && VHOST_USER
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index 3ea7b3cec83..48b9fedfa56 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -22,7 +22,7 @@ if have_vhost
     system_virtio_ss.add(files('vhost-user-base.c'))
 
     # MMIO Stubs
-    system_virtio_ss.add(files('vhost-user-device.c'))
+    system_virtio_ss.add(when: 'CONFIG_VHOST_USER_TEST', if_true: files('vhost-user-test-device.c'))
     system_virtio_ss.add(when: 'CONFIG_VHOST_USER_GPIO', if_true: files('vhost-user-gpio.c'))
     system_virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
     system_virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
@@ -30,7 +30,8 @@ if have_vhost
     system_virtio_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input.c'))
 
     # PCI Stubs
-    system_virtio_ss.add(when: 'CONFIG_VIRTIO_PCI', if_true: files('vhost-user-device-pci.c'))
+    system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_TEST'],
+                         if_true: files('vhost-user-test-device-pci.c'))
     system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_GPIO'],
                          if_true: files('vhost-user-gpio-pci.c'))
     system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_I2C'],
-- 
2.47.2


Re: [PATCH v2] hw/virtio: rename vhost-user-device and make user creatable
Posted by Michael S. Tsirkin 1 week, 1 day ago
On Mon, Sep 01, 2025 at 11:59:48AM +0100, Alex Bennée wrote:
> We didn't make the device user creatable in the first place because we
> were worried users might get confused. Rename the device to make its
> nature as a test device even more explicit. While we are at it add a
> Kconfig variable so it can be skipped for those that want to thin out
> their build configuration even further.
> 
> Acked-by: Stefano Garzarella <sgarzare@redhat.com>
> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-ID: <20250820195632.1956795-1-alex.bennee@linaro.org>


The confusion refers to users expecting
to use this in production without bothering to register
an id with the virtio TC, then the ID they hacked together
gets taken by Linux and everything breaks.


What exactly is the "test device" and the use-case here?


Maybe prefixing the name with "x-" like we do for unsupported properties
would help? I'm not sure, given someone on list already said they are
using a "wifi virtio" device in production with a very similar hack and
without talking to anyone.


> ---
> v1
>   - add review tags, ready to merge
> v2
>   - keep the -base name on TYPE_VHOST_USER_TEST_DEVICE_PCI
> ---
>  docs/system/devices/vhost-user.rst            | 20 +++++++------------
>  include/hw/virtio/vhost-user-base.h           |  2 +-
>  ...ice-pci.c => vhost-user-test-device-pci.c} | 17 +++++++---------
>  ...user-device.c => vhost-user-test-device.c} |  9 +++------
>  hw/virtio/Kconfig                             |  5 +++++
>  hw/virtio/meson.build                         |  5 +++--
>  6 files changed, 26 insertions(+), 32 deletions(-)
>  rename hw/virtio/{vhost-user-device-pci.c => vhost-user-test-device-pci.c} (77%)
>  rename hw/virtio/{vhost-user-device.c => vhost-user-test-device.c} (87%)
> 
> diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst
> index 35259d8ec7c..bddf8df5ed5 100644
> --- a/docs/system/devices/vhost-user.rst
> +++ b/docs/system/devices/vhost-user.rst
> @@ -62,26 +62,20 @@ platform details for what sort of virtio bus to use.
>  The referenced *daemons* are not exhaustive, any conforming backend
>  implementing the device and using the vhost-user protocol should work.
>  
> -vhost-user-device
> -^^^^^^^^^^^^^^^^^
> +vhost-user-test-device
> +^^^^^^^^^^^^^^^^^^^^^^
>  
> -The vhost-user-device is a generic development device intended for
> -expert use while developing new backends. The user needs to specify
> -all the required parameters including:
> +The vhost-user-test-device is a generic development device intended
> +for expert use while developing new backends. The user needs to
> +specify all the required parameters including:
>  
>    - Device ``virtio-id``
>    - The ``num_vqs`` it needs and their ``vq_size``
>    - The ``config_size`` if needed
>  
>  .. note::
> -  To prevent user confusion you cannot currently instantiate
> -  vhost-user-device without first patching out::
> -
> -    /* Reason: stop inexperienced users confusing themselves */
> -    dc->user_creatable = false;
> -
> -  in ``vhost-user-device.c`` and ``vhost-user-device-pci.c`` file and
> -  rebuilding.
> +  While this is a useful device for development it is not recommended
> +  for production use.
>  
>  vhost-user daemon
>  =================
> diff --git a/include/hw/virtio/vhost-user-base.h b/include/hw/virtio/vhost-user-base.h
> index 51d0968b893..387e434b804 100644
> --- a/include/hw/virtio/vhost-user-base.h
> +++ b/include/hw/virtio/vhost-user-base.h
> @@ -44,6 +44,6 @@ struct VHostUserBaseClass {
>  };
>  
>  
> -#define TYPE_VHOST_USER_DEVICE "vhost-user-device"
> +#define TYPE_VHOST_USER_TEST_DEVICE "vhost-user-test-device"
>  
>  #endif /* QEMU_VHOST_USER_BASE_H */
> diff --git a/hw/virtio/vhost-user-device-pci.c b/hw/virtio/vhost-user-test-device-pci.c
> similarity index 77%
> rename from hw/virtio/vhost-user-device-pci.c
> rename to hw/virtio/vhost-user-test-device-pci.c
> index f10bac874e7..b4ed0efb50f 100644
> --- a/hw/virtio/vhost-user-device-pci.c
> +++ b/hw/virtio/vhost-user-test-device-pci.c
> @@ -18,13 +18,13 @@ struct VHostUserDevicePCI {
>      VHostUserBase vub;
>  };
>  
> -#define TYPE_VHOST_USER_DEVICE_PCI "vhost-user-device-pci-base"
> +#define TYPE_VHOST_USER_TEST_DEVICE_PCI "vhost-user-test-device-pci-base"
>  
> -OBJECT_DECLARE_SIMPLE_TYPE(VHostUserDevicePCI, VHOST_USER_DEVICE_PCI)
> +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserDevicePCI, VHOST_USER_TEST_DEVICE_PCI)
>  
>  static void vhost_user_device_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
>  {
> -    VHostUserDevicePCI *dev = VHOST_USER_DEVICE_PCI(vpci_dev);
> +    VHostUserDevicePCI *dev = VHOST_USER_TEST_DEVICE_PCI(vpci_dev);
>      DeviceState *vdev = DEVICE(&dev->vub);
>  
>      vpci_dev->nvectors = 1;
> @@ -38,9 +38,6 @@ static void vhost_user_device_pci_class_init(ObjectClass *klass,
>      VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
>      PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
>  
> -    /* Reason: stop users confusing themselves */
> -    dc->user_creatable = false;
> -
>      k->realize = vhost_user_device_pci_realize;
>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>      pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
> @@ -51,15 +48,15 @@ static void vhost_user_device_pci_class_init(ObjectClass *klass,
>  
>  static void vhost_user_device_pci_instance_init(Object *obj)
>  {
> -    VHostUserDevicePCI *dev = VHOST_USER_DEVICE_PCI(obj);
> +    VHostUserDevicePCI *dev = VHOST_USER_TEST_DEVICE_PCI(obj);
>  
>      virtio_instance_init_common(obj, &dev->vub, sizeof(dev->vub),
> -                                TYPE_VHOST_USER_DEVICE);
> +                                TYPE_VHOST_USER_TEST_DEVICE);
>  }
>  
>  static const VirtioPCIDeviceTypeInfo vhost_user_device_pci_info = {
> -    .base_name = TYPE_VHOST_USER_DEVICE_PCI,
> -    .non_transitional_name = "vhost-user-device-pci",
> +    .base_name = TYPE_VHOST_USER_TEST_DEVICE_PCI,
> +    .non_transitional_name = "vhost-user-test-device-pci",
>      .instance_size = sizeof(VHostUserDevicePCI),
>      .instance_init = vhost_user_device_pci_instance_init,
>      .class_init = vhost_user_device_pci_class_init,
> diff --git a/hw/virtio/vhost-user-device.c b/hw/virtio/vhost-user-test-device.c
> similarity index 87%
> rename from hw/virtio/vhost-user-device.c
> rename to hw/virtio/vhost-user-test-device.c
> index 3939bdf7552..1b98ea3e488 100644
> --- a/hw/virtio/vhost-user-device.c
> +++ b/hw/virtio/vhost-user-test-device.c
> @@ -1,5 +1,5 @@
>  /*
> - * Generic vhost-user-device implementation for any vhost-user-backend
> + * Generic vhost-user-test-device implementation for any vhost-user-backend
>   *
>   * This is a concrete implementation of vhost-user-base which can be
>   * configured via properties. It is useful for development and
> @@ -25,7 +25,7 @@
>   */
>  
>  static const VMStateDescription vud_vmstate = {
> -    .name = "vhost-user-device",
> +    .name = "vhost-user-test-device",
>      .unmigratable = 1,
>  };
>  
> @@ -41,16 +41,13 @@ static void vud_class_init(ObjectClass *klass, const void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
>  
> -    /* Reason: stop inexperienced users confusing themselves */
> -    dc->user_creatable = false;
> -
>      device_class_set_props(dc, vud_properties);
>      dc->vmsd = &vud_vmstate;
>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>  }
>  
>  static const TypeInfo vud_info = {
> -    .name = TYPE_VHOST_USER_DEVICE,
> +    .name = TYPE_VHOST_USER_TEST_DEVICE,
>      .parent = TYPE_VHOST_USER_BASE,
>      .class_init = vud_class_init,
>  };
> diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
> index 7648a2d68da..10f5c53ac09 100644
> --- a/hw/virtio/Kconfig
> +++ b/hw/virtio/Kconfig
> @@ -126,3 +126,8 @@ config VHOST_USER_SCMI
>      bool
>      default y
>      depends on VIRTIO && VHOST_USER && ARM
> +
> +config VHOST_USER_TEST
> +    bool
> +    default y
> +    depends on VIRTIO && VHOST_USER
> diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
> index 3ea7b3cec83..48b9fedfa56 100644
> --- a/hw/virtio/meson.build
> +++ b/hw/virtio/meson.build
> @@ -22,7 +22,7 @@ if have_vhost
>      system_virtio_ss.add(files('vhost-user-base.c'))
>  
>      # MMIO Stubs
> -    system_virtio_ss.add(files('vhost-user-device.c'))
> +    system_virtio_ss.add(when: 'CONFIG_VHOST_USER_TEST', if_true: files('vhost-user-test-device.c'))
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_GPIO', if_true: files('vhost-user-gpio.c'))
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
> @@ -30,7 +30,8 @@ if have_vhost
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input.c'))
>  
>      # PCI Stubs
> -    system_virtio_ss.add(when: 'CONFIG_VIRTIO_PCI', if_true: files('vhost-user-device-pci.c'))
> +    system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_TEST'],
> +                         if_true: files('vhost-user-test-device-pci.c'))
>      system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_GPIO'],
>                           if_true: files('vhost-user-gpio-pci.c'))
>      system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_I2C'],
> -- 
> 2.47.2
Re: [PATCH v2] hw/virtio: rename vhost-user-device and make user creatable
Posted by Albert Esteve 2 weeks, 6 days ago
On Mon, Sep 1, 2025 at 1:01 PM Alex Bennée <alex.bennee@linaro.org> wrote:
>
> We didn't make the device user creatable in the first place because we
> were worried users might get confused. Rename the device to make its
> nature as a test device even more explicit. While we are at it add a
> Kconfig variable so it can be skipped for those that want to thin out
> their build configuration even further.
>
> Acked-by: Stefano Garzarella <sgarzare@redhat.com>
> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-ID: <20250820195632.1956795-1-alex.bennee@linaro.org>
>
> ---
> v1
>   - add review tags, ready to merge
> v2
>   - keep the -base name on TYPE_VHOST_USER_TEST_DEVICE_PCI
> ---
>  docs/system/devices/vhost-user.rst            | 20 +++++++------------
>  include/hw/virtio/vhost-user-base.h           |  2 +-
>  ...ice-pci.c => vhost-user-test-device-pci.c} | 17 +++++++---------
>  ...user-device.c => vhost-user-test-device.c} |  9 +++------
>  hw/virtio/Kconfig                             |  5 +++++
>  hw/virtio/meson.build                         |  5 +++--
>  6 files changed, 26 insertions(+), 32 deletions(-)
>  rename hw/virtio/{vhost-user-device-pci.c => vhost-user-test-device-pci.c} (77%)
>  rename hw/virtio/{vhost-user-device.c => vhost-user-test-device.c} (87%)

Thanks for the patch, the changes look good to me!

This seems like a great opportunity to have tests using this device.
What are your thoughts on also adding a QTest that instantiates this
test device? It could potentially go in vhost-user-test.c or a new
file to verify the generic vhost-user functionality.

>
> diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst
> index 35259d8ec7c..bddf8df5ed5 100644
> --- a/docs/system/devices/vhost-user.rst
> +++ b/docs/system/devices/vhost-user.rst
> @@ -62,26 +62,20 @@ platform details for what sort of virtio bus to use.
>  The referenced *daemons* are not exhaustive, any conforming backend
>  implementing the device and using the vhost-user protocol should work.
>
> -vhost-user-device
> -^^^^^^^^^^^^^^^^^
> +vhost-user-test-device
> +^^^^^^^^^^^^^^^^^^^^^^
>
> -The vhost-user-device is a generic development device intended for
> -expert use while developing new backends. The user needs to specify
> -all the required parameters including:
> +The vhost-user-test-device is a generic development device intended
> +for expert use while developing new backends. The user needs to
> +specify all the required parameters including:
>
>    - Device ``virtio-id``
>    - The ``num_vqs`` it needs and their ``vq_size``
>    - The ``config_size`` if needed
>
>  .. note::
> -  To prevent user confusion you cannot currently instantiate
> -  vhost-user-device without first patching out::
> -
> -    /* Reason: stop inexperienced users confusing themselves */
> -    dc->user_creatable = false;
> -
> -  in ``vhost-user-device.c`` and ``vhost-user-device-pci.c`` file and
> -  rebuilding.
> +  While this is a useful device for development it is not recommended
> +  for production use.
>
>  vhost-user daemon
>  =================
> diff --git a/include/hw/virtio/vhost-user-base.h b/include/hw/virtio/vhost-user-base.h
> index 51d0968b893..387e434b804 100644
> --- a/include/hw/virtio/vhost-user-base.h
> +++ b/include/hw/virtio/vhost-user-base.h
> @@ -44,6 +44,6 @@ struct VHostUserBaseClass {
>  };
>
>
> -#define TYPE_VHOST_USER_DEVICE "vhost-user-device"
> +#define TYPE_VHOST_USER_TEST_DEVICE "vhost-user-test-device"
>
>  #endif /* QEMU_VHOST_USER_BASE_H */
> diff --git a/hw/virtio/vhost-user-device-pci.c b/hw/virtio/vhost-user-test-device-pci.c
> similarity index 77%
> rename from hw/virtio/vhost-user-device-pci.c
> rename to hw/virtio/vhost-user-test-device-pci.c
> index f10bac874e7..b4ed0efb50f 100644
> --- a/hw/virtio/vhost-user-device-pci.c
> +++ b/hw/virtio/vhost-user-test-device-pci.c
> @@ -18,13 +18,13 @@ struct VHostUserDevicePCI {
>      VHostUserBase vub;
>  };
>
> -#define TYPE_VHOST_USER_DEVICE_PCI "vhost-user-device-pci-base"
> +#define TYPE_VHOST_USER_TEST_DEVICE_PCI "vhost-user-test-device-pci-base"
>
> -OBJECT_DECLARE_SIMPLE_TYPE(VHostUserDevicePCI, VHOST_USER_DEVICE_PCI)
> +OBJECT_DECLARE_SIMPLE_TYPE(VHostUserDevicePCI, VHOST_USER_TEST_DEVICE_PCI)
>
>  static void vhost_user_device_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
>  {
> -    VHostUserDevicePCI *dev = VHOST_USER_DEVICE_PCI(vpci_dev);
> +    VHostUserDevicePCI *dev = VHOST_USER_TEST_DEVICE_PCI(vpci_dev);
>      DeviceState *vdev = DEVICE(&dev->vub);
>
>      vpci_dev->nvectors = 1;
> @@ -38,9 +38,6 @@ static void vhost_user_device_pci_class_init(ObjectClass *klass,
>      VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
>      PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
>
> -    /* Reason: stop users confusing themselves */
> -    dc->user_creatable = false;
> -
>      k->realize = vhost_user_device_pci_realize;
>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>      pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
> @@ -51,15 +48,15 @@ static void vhost_user_device_pci_class_init(ObjectClass *klass,
>
>  static void vhost_user_device_pci_instance_init(Object *obj)
>  {
> -    VHostUserDevicePCI *dev = VHOST_USER_DEVICE_PCI(obj);
> +    VHostUserDevicePCI *dev = VHOST_USER_TEST_DEVICE_PCI(obj);
>
>      virtio_instance_init_common(obj, &dev->vub, sizeof(dev->vub),
> -                                TYPE_VHOST_USER_DEVICE);
> +                                TYPE_VHOST_USER_TEST_DEVICE);
>  }
>
>  static const VirtioPCIDeviceTypeInfo vhost_user_device_pci_info = {
> -    .base_name = TYPE_VHOST_USER_DEVICE_PCI,
> -    .non_transitional_name = "vhost-user-device-pci",
> +    .base_name = TYPE_VHOST_USER_TEST_DEVICE_PCI,
> +    .non_transitional_name = "vhost-user-test-device-pci",
>      .instance_size = sizeof(VHostUserDevicePCI),
>      .instance_init = vhost_user_device_pci_instance_init,
>      .class_init = vhost_user_device_pci_class_init,
> diff --git a/hw/virtio/vhost-user-device.c b/hw/virtio/vhost-user-test-device.c
> similarity index 87%
> rename from hw/virtio/vhost-user-device.c
> rename to hw/virtio/vhost-user-test-device.c
> index 3939bdf7552..1b98ea3e488 100644
> --- a/hw/virtio/vhost-user-device.c
> +++ b/hw/virtio/vhost-user-test-device.c
> @@ -1,5 +1,5 @@
>  /*
> - * Generic vhost-user-device implementation for any vhost-user-backend
> + * Generic vhost-user-test-device implementation for any vhost-user-backend
>   *
>   * This is a concrete implementation of vhost-user-base which can be
>   * configured via properties. It is useful for development and
> @@ -25,7 +25,7 @@
>   */
>
>  static const VMStateDescription vud_vmstate = {
> -    .name = "vhost-user-device",
> +    .name = "vhost-user-test-device",
>      .unmigratable = 1,
>  };
>
> @@ -41,16 +41,13 @@ static void vud_class_init(ObjectClass *klass, const void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
>
> -    /* Reason: stop inexperienced users confusing themselves */
> -    dc->user_creatable = false;
> -
>      device_class_set_props(dc, vud_properties);
>      dc->vmsd = &vud_vmstate;
>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>  }
>
>  static const TypeInfo vud_info = {
> -    .name = TYPE_VHOST_USER_DEVICE,
> +    .name = TYPE_VHOST_USER_TEST_DEVICE,
>      .parent = TYPE_VHOST_USER_BASE,
>      .class_init = vud_class_init,
>  };
> diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
> index 7648a2d68da..10f5c53ac09 100644
> --- a/hw/virtio/Kconfig
> +++ b/hw/virtio/Kconfig
> @@ -126,3 +126,8 @@ config VHOST_USER_SCMI
>      bool
>      default y
>      depends on VIRTIO && VHOST_USER && ARM
> +
> +config VHOST_USER_TEST
> +    bool
> +    default y
> +    depends on VIRTIO && VHOST_USER
> diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
> index 3ea7b3cec83..48b9fedfa56 100644
> --- a/hw/virtio/meson.build
> +++ b/hw/virtio/meson.build
> @@ -22,7 +22,7 @@ if have_vhost
>      system_virtio_ss.add(files('vhost-user-base.c'))
>
>      # MMIO Stubs
> -    system_virtio_ss.add(files('vhost-user-device.c'))
> +    system_virtio_ss.add(when: 'CONFIG_VHOST_USER_TEST', if_true: files('vhost-user-test-device.c'))
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_GPIO', if_true: files('vhost-user-gpio.c'))
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
> @@ -30,7 +30,8 @@ if have_vhost
>      system_virtio_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input.c'))
>
>      # PCI Stubs
> -    system_virtio_ss.add(when: 'CONFIG_VIRTIO_PCI', if_true: files('vhost-user-device-pci.c'))
> +    system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_TEST'],
> +                         if_true: files('vhost-user-test-device-pci.c'))
>      system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_GPIO'],
>                           if_true: files('vhost-user-gpio-pci.c'))
>      system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_I2C'],
> --
> 2.47.2
>
>