On 2/21/19 4:42 PM, Ján Tomko wrote:
> To prevent domains started with older libvirtd from disappearing, we
> need to be able to parse the string representation of QEMU capabilities,
> even if we no longer use them in the code.
>
> Put those in a separate array where we won't bother with enum constants.
>
> Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
> ---
> src/qemu/qemu_capabilities.c | 95 ++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_capabilities.h | 1 +
> 2 files changed, 96 insertions(+)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index b48bcbebee..7160860ab4 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -524,6 +524,101 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
> "scsi-disk.device_id",
> );
> +#define VIR_QEMU_CAPS_DEPRECATED_LAST 92 /* chosen by fair dice roll */
Problem I have with this apporach is that as soon as we deprecate some other
capability we have to change this number too. Since we don't need str<->enum
translation can't we just have a static array of these strings and then in
6/8 use virStringListHasString() instead of
virQEMUCapsDeprecatedTypeFromString()?
Yes, I'm really not seeing a benefit from this change. We haven't
really eliminated the enums, because the enums constants are still
there in the comments - merely not in the headers. Since it turns
something that was previously compile time guaranteed correct into
a magic constant we can screw up it is arguably a step backwards.
I could perhaps see us splitting the enums
typedef enum {
X_QEMU_CAPS_KQEMU,
X_QEMU_CAPS_VNC_COLON,
X_QEMU_CAPS_NO_REBOOT,
...
X_QEMU_CAPS_DISPLAY,
X_QEMU_CAPS_LAST
} virQEMUCapsDeprecated
typedef enum {
QEMU_CAPS_KVM = X_QEMU_CAPS_LAST
....
} virQEMUCaps;
This would need an VIR_ENUM_IMPL_OFFSET() which let us
pass in the offset value of the first enum constant.
Not sure it buys us very much over what we have today
though.
> +VIR_ENUM_IMPL(virQEMUCapsDeprecated, VIR_QEMU_CAPS_DEPRECATED_LAST,
> + "kqemu", /* X_QEMU_CAPS_KQEMU, Whether KQEMU is compiled in */
> + "vnc-colon", /* X_QEMU_CAPS_VNC_COLON, VNC takes or address + display
*/
> + "no-reboot", /* X_QEMU_CAPS_NO_REBOOT, Is the -no-reboot flag
available */
> + "drive", /* X_QEMU_CAPS_DRIVE, Is the new -drive arg available */
> + "drive-boot", /* X_QEMU_CAPS_DRIVE_BOOT, Does -drive support boot=on
*/
> + "name", /* X_QEMU_CAPS_NAME, Is the -name flag available */
> + "uuid", /* X_QEMU_CAPS_UUID, Is the -uuid flag available */
> + "domid", /* X_QEMU_CAPS_DOMID, Xenner: -domid flag available */
> + "vnet-hdr", /* X_QEMU_CAPS_VNET_HDR */
> + "migrate-kvm-stdio", /* X_QEMU_CAPS_MIGRATE_KVM_STDIO, avoid kvm tcp
migration bug */
> + "migrate-qemu-tcp", /* X_QEMU_CAPS_MIGRATE_QEMU_TCP, have qemu tcp
migration */
> + "migrate-qemu-exec", /* X_QEMU_CAPS_MIGRATE_QEMU_EXEC, have qemu exec
migration */
> + "drive-cache-v2", /* X_QEMU_CAPS_DRIVE_CACHE_V2, cache= flag wanting
new v2 values */
> + "drive-format", /* X_QEMU_CAPS_DRIVE_FORMAT, Is -drive format= avail
*/
> + "vga", /* X_QEMU_CAPS_VGA, Is -vga avail */
> + "0.10", /* X_QEMU_CAPS_0_10, features added in qemu-0.10.0 or later
*/
> + "pci-device", /* X_QEMU_CAPS_PCIDEVICE, PCI device assignment
supported */
> + "mem-path", /* X_QEMU_CAPS_MEM_PATH, mmap'ped guest backing
supported */
> + "drive-serial", /* X_QEMU_CAPS_DRIVE_SERIAL, -driver serial=
available */
> + "xen-domid", /* X_QEMU_CAPS_XEN_DOMID, -xen-domid */
> + "migrate-qemu-unix", /* X_QEMU_CAPS_MIGRATE_QEMU_UNIX, qemu migration
via unix sockets */
> + "chardev", /* X_QEMU_CAPS_CHARDEV, Is the new -chardev arg available
*/
> + "enable-kvm", /* X_QEMU_CAPS_ENABLE_KVM, -enable-kvm flag */
> + "monitor-json", /* X_QEMU_CAPS_MONITOR_JSON, JSON mode for monitor
*/
> + "balloon", /* X_QEMU_CAPS_BALLOON, -balloon available */
> + "device", /* X_QEMU_CAPS_DEVICE, Is the -device arg available */
> + "sdl", /* X_QEMU_CAPS_SDL, Is the new -sdl arg available */
> + "smp-topology", /* X_QEMU_CAPS_SMP_TOPOLOGY, -smp has
sockets/cores/threads */
> + "netdev", /* X_QEMU_CAPS_NETDEV, -netdev flag & netdev_add/remove
*/
> + "rtc", /* X_QEMU_CAPS_RTC, The -rtc flag for clock options */
> + "vhost-net", /* X_QEMU_CAPS_VHOST_NET, vhost-net support available
*/
> + "rtc-td-hack", /* X_QEMU_CAPS_RTC_TD_HACK, -rtc-td-hack available */
> + "no-kvm-pit", /* X_QEMU_CAPS_NO_KVM_PIT, -no-kvm-pit-reinjection
supported */
> + "tdf", /* X_QEMU_CAPS_TDF, -tdf flag (user-mode pit catchup) */
> + "pci-configfd", /* X_QEMU_CAPS_PCI_CONFIGFD, pci-assign.configfd */
> + "nodefconfig", /* X_QEMU_CAPS_NODEFCONFIG, -nodefconfig */
> + "boot-menu", /* X_QEMU_CAPS_BOOT_MENU, -boot menu=on support */
> + "enable-kqemu", /* X_QEMU_CAPS_ENABLE_KQEMU, -enable-kqemu flag */
> + "fsdev", /* X_QEMU_CAPS_FSDEV, -fstype filesystem passthrough */
> + "nesting", /* X_QEMU_CAPS_NESTING, -enable-nesting (SVM/VMX) */
> + "name-process", /* X_QEMU_CAPS_NAME_PROCESS, Is -name process=
available */
> + "drive-readonly", /* X_QEMU_CAPS_DRIVE_READONLY, -drive
readonly=on|off */
> + "smbios-type", /* X_QEMU_CAPS_SMBIOS_TYPE, Is -smbios type= available
*/
> + "vga-qxl", /* X_QEMU_CAPS_VGA_QXL, The 'qxl' arg for
'-vga' */
> + "vga-none", /* X_QEMU_CAPS_VGA_NONE, The 'none' arg for
'-vga' */
> + "migrate-qemu-fd", /* X_QEMU_CAPS_MIGRATE_QEMU_FD, -incoming fd:n */
> + "boot-index", /* X_QEMU_CAPS_BOOTINDEX, -device bootindex property
*/
> + "drive-aio", /* X_QEMU_CAPS_DRIVE_AIO, -drive aio= supported */
> + "pci-multibus", /* X_QEMU_CAPS_PCI_MULTIBUS, bus=pci.0 vs bus=pci */
> + "pci-bootindex", /* X_QEMU_CAPS_PCI_BOOTINDEX, pci-assign.bootindex
*/
> + "chardev-spicevmc", /* X_QEMU_CAPS_CHARDEV_SPICEVMC, newer -chardev
spicevmc */
> + "device-spicevmc", /* X_QEMU_CAPS_DEVICE_SPICEVMC, older -device
spicevmc*/
> + "device-qxl-vga", /* X_QEMU_CAPS_DEVICE_QXL_VGA, primary qxl device
named qxl-vga? */
> + "pci-multifunction", /* X_QEMU_CAPS_PCI_MULTIFUNCTION, -device
multifunction=on|off */
> + "cache-directsync", /* X_QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC, Is
cache=directsync supported? */
> + "no-shutdown", /* X_QEMU_CAPS_NO_SHUTDOWN, usable -no-shutdown */
> + "cache-unsafe", /* X_QEMU_CAPS_DRIVE_CACHE_UNSAFE, Is cache=unsafe
supported? */
> + "rombar", /* X_QEMU_CAPS_PCI_ROMBAR, -device rombar=0|1 */
> + "fsdev-readonly", /* X_QEMU_CAPS_FSDEV_READONLY, -fsdev readonly
supported */
> + "blk-sg-io", /* X_QEMU_CAPS_VIRTIO_BLK_SG_IO, SG_IO commands */
> + "drive-copy-on-read", /* X_QEMU_CAPS_DRIVE_COPY_ON_READ, -drive
copy-on-read */
> + "cpu-host", /* X_QEMU_CAPS_CPU_HOST, support for -cpu host */
> + "fsdev-writeout", /* X_QEMU_CAPS_FSDEV_WRITEOUT, -fsdev writeout
supported */
> + "drive-iotune", /* X_QEMU_CAPS_DRIVE_IOTUNE, -drive bps= and friends
*/
> + "system_wakeup", /* X_QEMU_CAPS_WAKEUP, system_wakeup monitor command
*/
> + "block-job-sync", /* X_QEMU_CAPS_BLOCKJOB_SYNC, old block_job_cancel,
block_stream */
> + "scsi-cd", /* X_QEMU_CAPS_SCSI_CD, -device scsi-cd */
> + "ide-cd", /* X_QEMU_CAPS_IDE_CD, -device ide-cd */
> + "no-user-config", /* X_QEMU_CAPS_NO_USER_CONFIG, -no-user-config */
> + "balloon-event", /* X_QEMU_CAPS_BALLOON_EVENT, Async event for
balloon changes */
> + "bridge", /* X_QEMU_CAPS_NETDEV_BRIDGE, bridge helper support */
> + "dump-guest-core", /* X_QEMU_CAPS_DUMP_GUEST_CORE,
dump-guest-core-parameter */
> + "seamless-migration", /* X_QEMU_CAPS_SEAMLESS_MIGRATION,
seamless-migration for SPICE */
> + "usb-redir.bootindex", /* X_QEMU_CAPS_USB_REDIR_BOOTINDEX,
usb-redir.bootindex */
> + "usb-host.bootindex", /* X_QEMU_CAPS_USB_HOST_BOOTINDEX,
usb-host.bootindex */
> + "usb-net", /* X_QEMU_CAPS_DEVICE_USB_NET, -device usb-net */
> + "add-fd", /* X_QEMU_CAPS_ADD_FD, -add-fd */
> + "dtb", /* X_QEMU_CAPS_DTB, -dtb file */
> + "ipv6-migration", /* X_QEMU_CAPS_IPV6_MIGRATION, -incoming [::] */
> + "machine-opt", /* X_QEMU_CAPS_MACHINE_OPT, -machine xxxx*/
> + "machine-usb-opt", /* X_QEMU_CAPS_MACHINE_USB_OPT, -machine
xxx,usb=on/off */
> + "vfio-pci.bootindex", /* X_QEMU_CAPS_VFIO_PCI_BOOTINDEX, bootindex
param for vfio-pci device */
> + "scsi-generic", /* X_QEMU_CAPS_DEVICE_SCSI_GENERIC, -device
scsi-generic */
> + "scsi-generic.bootindex", /*
X_QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX, -device scsi-generic.bootindex */
> + "vnc-websocket", /* X_QEMU_CAPS_VNC_WEBSOCKET, -vnc x:y,websocket */
> + "vnc-share-policy", /* X_QEMU_CAPS_VNC_SHARE_POLICY, set display
sharing policy */
> + "device-del-event", /* X_QEMU_CAPS_DEVICE_DEL_EVENT, DEVICE_DELETED
event */
> + "spiceport", /* X_QEMU_CAPS_CHARDEV_SPICEPORT, -chardev spiceport */
> + "host-pci-multidomain", /* X_QEMU_CAPS_HOST_PCI_MULTIDOMAIN, support
domain > 0 in host pci address */
> + "device-tray-moved-event", /* X_QEMU_CAPS_DEVICE_TRAY_MOVED,
DEVICE_TRAY_MOVED event */
> + "qxl-vga.max_outputs", /* X_QEMU_CAPS_QXL_VGA_MAX_OUTPUTS, -device
qxl-vga,max-outputs= */
> + "display", /* X_QEMU_CAPS_DISPLAY, -display */
> + );
> struct virQEMUCapsMachineType {
> char *name;
> diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
> index ba84052bca..6fa402a846 100644
> --- a/src/qemu/qemu_capabilities.h
> +++ b/src/qemu/qemu_capabilities.h
> @@ -612,6 +612,7 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps,
> unsigned int *version);
> VIR_ENUM_DECL(virQEMUCaps);
> +VIR_ENUM_DECL(virQEMUCapsDeprecated);
> bool virQEMUCapsSupportsGICVersion(virQEMUCapsPtr qemuCaps,
> virDomainVirtType virtType,
>
Michal
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list