[libvirt] [PATCH 2/8] Introduce virQEMUCapsDeprecated array

Daniel P. Berrangé berrange at redhat.com
Thu Mar 7 10:45:56 UTC 2019


On Thu, Mar 07, 2019 at 11:37:00AM +0100, Michal Privoznik wrote:
> 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 at 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list