• E
    virtio: Provide version-specific variants of virtio PCI devices · f6e501a2
    Eduardo Habkost 提交于
    Many of the current virtio-*-pci device types actually represent
    3 different types of devices:
    * virtio 1.0 non-transitional devices
    * virtio 1.0 transitional devices
    * virtio 0.9 ("legacy device" in virtio 1.0 terminology)
    
    That would be just an annoyance if it didn't break our device/bus
    compatibility QMP interfaces.  With these multi-purpose device
    types, there's no way to tell management software that
    transitional devices and legacy devices require a Conventional
    PCI bus.
    
    The multi-purpose device types would also prevent us from telling
    management software what's the PCI vendor/device ID for them,
    because their PCI IDs change at runtime depending on the bus
    where they were plugged.
    
    This patch adds separate device types for each of those virtio
    device flavors:
    
    - virtio-*-pci: the existing multi-purpose device types
      - Configurable using `disable-legacy` and `disable-modern`
        properties
      - Legacy driver support is automatically enabled/disabled
        depending on the bus where it is plugged
      - Supports Conventional PCI and PCI Express buses
        (but Conventional PCI is incompatible with
        disable-legacy=off)
      - Changes PCI vendor/device IDs at runtime
    - virtio-*-pci-transitional: virtio-1.0 device supporting legacy drivers
      - Supports Conventional PCI buses only, because
        it has a PIO BAR
    - virtio-*-pci-non-transitional: modern-only
      - Supports both Conventional PCI and PCI Express buses
    
    The existing TYPE_* macros for these types will point to an
    abstract base type, so existing casts in the code will keep
    working for all variants.
    
    A simple test script (tests/acceptance/virtio_version.py) is
    included, to check if the new device types are equivalent to
    using the `disable-legacy` and `disable-modern` options.
    Acked-by: NAndrea Bolognani <abologna@redhat.com>
    Reviewed-by: NCornelia Huck <cohuck@redhat.com>
    Signed-off-by: NEduardo Habkost <ehabkost@redhat.com>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    f6e501a2
virtio-pci.h 12.9 KB