[PATCH V2 2/3] conf: Add channel devices to domain capabilities
Jim Fehlig
jfehlig at suse.com
Thu Oct 13 20:18:16 UTC 2022
On 10/13/22 09:46, Michal Prívozník wrote:
> On 10/13/22 01:24, Jim Fehlig wrote:
>> As qemu becomes more modularized, it is important for libvirt to advertise
>> availability of the modularized functionality through capabilities. This
>> change adds channel devices to domain capabilities, allowing clients such
>> as virt-install to avoid using spicevmc channel devices when not supported
>> by the target qemu.
>>
>> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
>> ---
>> docs/formatdomaincaps.rst | 24 +++++++++++++++++++
>> src/conf/domain_capabilities.c | 13 ++++++++++
>> src/conf/domain_capabilities.h | 8 +++++++
>> src/conf/schemas/domaincaps.rng | 10 ++++++++
>> src/qemu/qemu_capabilities.c | 16 +++++++++++++
>> src/qemu/qemu_capabilities.h | 3 +++
>> .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 7 ++++++
>> .../qemu_4.2.0-virt.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 6 +++++
>> tests/domaincapsdata/qemu_4.2.0.s390x.xml | 6 +++++
>> tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 7 ++++++
>> .../qemu_5.0.0-virt.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.0.0.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_5.1.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_5.1.0-tcg.x86_64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_5.1.0.sparc.xml | 7 ++++++
>> tests/domaincapsdata/qemu_5.1.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_5.2.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_5.2.0-tcg.x86_64.xml | 7 ++++++
>> .../qemu_5.2.0-virt.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.2.0.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.2.0.ppc64.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.2.0.s390x.xml | 6 +++++
>> tests/domaincapsdata/qemu_5.2.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_6.0.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_6.0.0-tcg.x86_64.xml | 7 ++++++
>> .../qemu_6.0.0-virt.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_6.0.0.aarch64.xml | 6 +++++
>> tests/domaincapsdata/qemu_6.0.0.s390x.xml | 6 +++++
>> tests/domaincapsdata/qemu_6.0.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_6.1.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_6.1.0-tcg.x86_64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_6.1.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 7 ++++++
>> .../qemu_6.2.0-virt.aarch64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_6.2.0.aarch64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 6 +++++
>> tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 7 ++++++
>> .../qemu_7.0.0-virt.aarch64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_7.0.0.aarch64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 6 +++++
>> tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 7 ++++++
>> .../domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 7 ++++++
>> tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 7 ++++++
>> .../caps_4.2.0.x86_64.xml | 1 +
>> .../caps_5.0.0.riscv64.xml | 1 +
>> .../caps_5.0.0.x86_64.xml | 1 +
>> .../qemucapabilitiesdata/caps_5.1.0.sparc.xml | 1 +
>> .../caps_5.1.0.x86_64.xml | 1 +
>> .../caps_5.2.0.riscv64.xml | 1 +
>> .../caps_5.2.0.x86_64.xml | 1 +
>> .../caps_6.0.0.x86_64.xml | 1 +
>> .../caps_6.1.0.x86_64.xml | 1 +
>> .../caps_6.2.0.aarch64.xml | 1 +
>> .../caps_6.2.0.x86_64.xml | 1 +
>> .../caps_7.0.0.aarch64.xml | 1 +
>> .../caps_7.0.0.x86_64.xml | 1 +
>> .../caps_7.1.0.x86_64.xml | 1 +
>> 68 files changed, 408 insertions(+)
>>
>> diff --git a/docs/formatdomaincaps.rst b/docs/formatdomaincaps.rst
>> index 93d36f2702..f95d3a7083 100644
>> --- a/docs/formatdomaincaps.rst
>> +++ b/docs/formatdomaincaps.rst
>> @@ -565,6 +565,30 @@ USB redirdev device capabilities are exposed under the ``redirdev`` element. For
>> ``bus``
>> Options for the ``bus`` attribute of the ``<redirdev/>`` element.
>>
>> +Channel device
>> +^^^^^^^^^^^^^^
>> +
>> +Channel device capabilities are exposed under the ``channel`` element. For instance:
>> +
>> +::
>> +
>> + <domainCapabilities>
>> + ...
>> + <devices>
>> + <channel supported='yes'>
>> + <enum name='type'>
>> + <value>pty</value>
>> + <value>unix</value>
>> + <value>spicevmc</value>
>> + </enum>
>> + </channel
>> + ...
>> + </devices>
>> + </domainCapabilities>
>> +
>> +``type``
>> + Options for the ``type`` attribute of the ``<channel/>`` element.
>> +
>> Features
>> ~~~~~~~~
>>
>> diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
>> index f8b2f88376..a7f256e4ec 100644
>> --- a/src/conf/domain_capabilities.c
>> +++ b/src/conf/domain_capabilities.c
>> @@ -574,6 +574,18 @@ virDomainCapsDeviceRedirdevFormat(virBuffer *buf,
>> }
>>
>>
>> +static void
>> +virDomainCapsDeviceChannelFormat(virBuffer *buf,
>> + const virDomainCapsDeviceChannel *channel)
>> +{
>> + FORMAT_PROLOGUE(channel);
>> +
>> + ENUM_PROCESS(channel, type, virDomainChrTypeToString);
>> +
>> + FORMAT_EPILOGUE(channel);
>> +}
>> +
>> +
>> /**
>> * virDomainCapsFeatureGICFormat:
>> * @buf: target buffer
>> @@ -688,6 +700,7 @@ virDomainCapsFormat(const virDomainCaps *caps)
>> virDomainCapsDeviceFilesystemFormat(&buf, &caps->filesystem);
>> virDomainCapsDeviceTPMFormat(&buf, &caps->tpm);
>> virDomainCapsDeviceRedirdevFormat(&buf, &caps->redirdev);
>> + virDomainCapsDeviceChannelFormat(&buf, &caps->channel);
>>
>> virBufferAdjustIndent(&buf, -2);
>> virBufferAddLit(&buf, "</devices>\n");
>> diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
>> index ba7c2a5e42..e0cfa75531 100644
>> --- a/src/conf/domain_capabilities.h
>> +++ b/src/conf/domain_capabilities.h
>> @@ -137,6 +137,13 @@ struct _virDomainCapsDeviceRedirdev {
>> virDomainCapsEnum bus; /* virDomainRedirdevBus */
>> };
>>
>> +STATIC_ASSERT_ENUM(VIR_DOMAIN_CHR_TYPE_LAST);
>> +typedef struct _virDomainCapsDeviceChannel virDomainCapsDeviceChannel;
>> +struct _virDomainCapsDeviceChannel {
>> + virTristateBool supported;
>> + virDomainCapsEnum type; /* virDomainChrType */
>> +};
>> +
>> STATIC_ASSERT_ENUM(VIR_DOMAIN_FS_DRIVER_TYPE_LAST);
>> typedef struct _virDomainCapsDeviceFilesystem virDomainCapsDeviceFilesystem;
>> struct _virDomainCapsDeviceFilesystem {
>> @@ -234,6 +241,7 @@ struct _virDomainCaps {
>> virDomainCapsDeviceFilesystem filesystem;
>> virDomainCapsDeviceTPM tpm;
>> virDomainCapsDeviceRedirdev redirdev;
>> + virDomainCapsDeviceChannel channel;
>> /* add new domain devices here */
>>
>> virDomainCapsFeatureGIC gic;
>> diff --git a/src/conf/schemas/domaincaps.rng b/src/conf/schemas/domaincaps.rng
>> index cf7a1d1d89..a6747b20ef 100644
>> --- a/src/conf/schemas/domaincaps.rng
>> +++ b/src/conf/schemas/domaincaps.rng
>> @@ -201,6 +201,9 @@
>> <optional>
>> <ref name="redirdev"/>
>> </optional>
>> + <optional>
>> + <ref name="channel"/>
>> + </optional>
>> </element>
>> </define>
>>
>> @@ -260,6 +263,13 @@
>> </element>
>> </define>
>>
>> + <define name="channel">
>> + <element name="channel">
>> + <ref name="supported"/>
>> + <ref name="enum"/>
>> + </element>
>> + </define>
>> +
>> <define name="features">
>> <element name="features">
>> <optional>
>> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>> index 5a664ec628..98849daf4c 100644
>> --- a/src/qemu/qemu_capabilities.c
>> +++ b/src/qemu/qemu_capabilities.c
>> @@ -1392,6 +1392,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
>> { "s390-pv-guest", QEMU_CAPS_S390_PV_GUEST },
>> { "virtio-mem-pci", QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI },
>> { "virtio-iommu-pci", QEMU_CAPS_DEVICE_VIRTIO_IOMMU_PCI },
>> + { "chardev-spicevmc", X_QEMU_CAPS_CHARDEV_SPICEVMC },
>
> The X_ prefix means that the capability was retired beause we are sure
> QEMU has it, always. Or another capability reflects the same. In this
> specific case I'd say QEMU_CAPS_SPICE is sufficient.
If you mean s/X_QEMU_CAPS_CHARDEV_SPICEVMC/QEMU_CAPS_SPICE/, it doesn't work.
'spicevmc' is not shown as a supported channel type in domcapabilities. I
thought it was safe to use the X_ variant since it is already included in CapsFlags
https://gitlab.com/libvirt/libvirt/-/blob/master/src/qemu/qemu_capabilities.h#L121
Regards,
Jim
More information about the libvir-list
mailing list