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@xxxxxxxxxx> > > --- > > 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@xxxxxxxxxx > 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list