How to use .base_name, .generic_name, .transitional_name, and .non_transitional_name can be confusing.
Existing devices have .generic_name but its behavior is somewhat magic. Devices added to new versions of the VIRTIO specification should forego transitional mode completely and always operate in non-transitional mode because there are no existing drivers for them that require backwards compatibility. This patch adds comments that hopefully make it easier for developers to decide how to fill out VirtioPCIDeviceTypeInfo. Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> --- v2: * Drop incorrect mention of machine type compat properties [ehabkost] --- hw/virtio/virtio-pci.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h index 18581854ca..0bd1fff942 100644 --- a/hw/virtio/virtio-pci.h +++ b/hw/virtio/virtio-pci.h @@ -209,7 +209,8 @@ typedef struct VirtioPCIDeviceTypeInfo { * Implements both INTERFACE_PCIE_DEVICE and INTERFACE_CONVENTIONAL_PCI_DEVICE, * but PCI Express is supported only in non-transitional mode. * - * The only type implemented by QEMU 3.1 and older. + * The only type implemented by QEMU 3.1 and older. This type is less + * explicit than the transitional and non-transitional device types. */ const char *generic_name; /* @@ -222,6 +223,9 @@ typedef struct VirtioPCIDeviceTypeInfo { * The non-transitional device type. Optional. * * Implements INTERFACE_CONVENTIONAL_PCI_DEVICE only. + * + * New virtio device types should only define this and base_name, thereby + * allowing only non-transitional mode. */ const char *non_transitional_name; -- 2.20.1