This series converts our generation of -device to JSON. This allows to use proper types when talking on QMP which will become mandatory in qemu soon (for now we coverted _everything_ to strings) and also use JSON on the commandline which will be the only "stable" interface.
Part 1 consists of cleanups and conversion of all devices which can be hotplugged and most others. There are few other missing along with preparation for schema validation which will come in part 2. The patches can be fetched at: git fetch https://gitlab.com/pipo.sk/libvirt.git jsonify-refactors-2 Peter Krempa (103): virJSONValueObjectAddVArgs: Add 'k' convertor for formatting non-negative integers virJSONValueObjectAddVArgs: Add check for presence of the ':' separator virJSONValueObjectAddVArgs: Add new convertors for allocated strings qemuBuildMemoryCellBackendStr: Return JSON props instead of a buffer qemuBuildInputDevStr: Don't mix generators for -object and -device qemuBuildObjectCommandlineFromJSON: Format directly into the virCommand qemu: capabilities: Rename QEMU_CAPS_OBJECT_QAPIFIED to QEMU_CAPS_OBJECT_JSON qemu: capabilities: Introduce QEMU_CAPS_NETDEV_JSON qemuBuildObjectCommandlineFromJSON: Remove checks for 'type' and 'alias' testCompareXMLToArgvValidateSchema: Base -netdev validation on JSON qemu: command: Format netdev as JSON when QEMU_CAPS_NETDEV_JSON is present virQEMUBuildNetdevCommandlineFromJSON: Remove unused formatter qemu: Remove 'qemuBuildCommandLineFlags' and associated code virQEMUBuildDriveCommandlineFromJSON: Open-code in callers qemuxml2argvtest: Refactor QAPI schema validation code virCommandGetArgList: Remove 'nargs' argument qemu: capabilities: Introduce QEMU_CAPS_CHARDEV_JSON qemu: capabilities: Introduce QEMU_CAPS_DEVICE_JSON tests: qemuxml2argv: Convert watchdog tests on x86_64 to DO_TEST_CAPS_LATEST tests: qemuxml2argv: Test also the i6300esb watchdog qemuxml2argvtest: Convert 'panic' test cases to DO_TEST_CAPS_LATEST qemuxml2xmltest: Remove 'panic-isa' case qemu: Move watchdog model validation into the validation code qemuDomainHotplugAddVcpu: Refactor cleanup qemu: Rename 'qemuMonitorAddDeviceArgs' to 'qemuMonitorAddDeviceProps' qemuMonitorJSONAddDeviceProps: Refactor cleanup virQEMUBuildCommandLineJSONIterate: Simplify logic virQEMUBuildCommandLineJSONRecurse: Error out when array conversion function is not provided qemuBlockStorageSourceAttachRollback: Sanitize warning messages qemuBuildDeviceAddressSt: Split out formatting of PCI address qemuBuildDeviceAddressPCIStr: Make error messages easier to find qemuBuildDeviceAddressPCIStr: Extract PCI bus name lookup qemu: command: Introduce JSON equivalent of qemuBuildDeviceAddressStr qemuBuildVirtioDevStr: Don't return early qemuBuildVirtioDevStr: Extract code for determining device model qemuBuildVirtioDevGetConfig: Split out per device type code qemuDeviceVideoGetModel: Clarify 'virtio' argument qemuDeviceVideoGetModel: Move to the beginning qemuBuildVirtioDevGetConfig: Split up formatting of bus suffix qemuBuildVirtioDevGetConfigDev: Provide more information qemuBuildVirtioDevStr: Remove 'baseName' argument qemuBuildVirtioDevStr: Format also virtioOptions qemuBuildVirtioOptionsStr: Remove empty function qemuBuildDeviceVideoStr: Properly format virtio options for 'virtio-vga' conf: Introduce 'effectiveBootIndex' into 'virDomainDeviceInfo' qemu: process: Make qemuProcessPrepareDomainDiskBootorder more universal qemu: Use 'effectiveBootIndex' to handle <os><boot dev='network'> qemu: Clean up after old-style passing of 'bootIndex' to network devices virDomainDeviceGetInfo: Make argument const qemuValidateDomainDeviceDef: Optimize virDomainDeviceInfo validation qemuValidateDomainDeviceDef: Avoid unneded variable and 'break' statements qemu: validate: Move validation of device rom qemu: command: Introduce JSON variant of qemuBuildVirtioDevStr qemu: command: Introduce helper for building JSON props of -device into commandline qemu: command: Introduce JSON variant of qemuBuildRomProps qemuBuildPanicCommandLine: Generate via JSON qemuBuildWatchdogCommandLine: Generate via JSON qemuBuildMemoryDeviceCommandLine: Generate via JSON qemuBuildShmemCommandLine: Generate via JSON qemuBuildMemballoonCommandLine: Generate via JSON qemuBuildMemballoonCommandLine: Reorder properties qemuBuildRNGCommandLine: Generate via JSON qemuBuildHostdevCommandLine: Build mediated device commandline via JSON qemuBuildHostdevMediatedDevProps: Move 'ramfb' and 'bootindex' before the address qemuBuildHostdevMediatedDevProps: Format USB host devices via JSON qemuBuildRedirdevCommandLine: Generate via JSON qemuBuildInputCommandLine: Generate via JSON qemuCommandAddExtDevice: Generate via JSON qemuBuildHostdevCommandLine: Format PCI host devices via JSON qemuBuildPCIHostdevDevProps: Move 'failover_pair_id' property before address qemuBuildDeviceAddressProps: Format also 'drive' addresses qemu: validate: Move disk address validation code qemuBuildHostdevSCSICommandLine: Generate via JSON qemuBuildSCSIHostdevDevProps: Reorder 'drive','id' and 'bootindex' after address qemuBuildIoEventFdStr: Always assume support for QEMU_CAPS_VIRTIO_IOEVENTFD qemu: capabilities: Retire QEMU_CAPS_VIRTIO_IOEVENTFD qemu: Always assume presence of QEMU_CAPS_VIRTIO_(BLK|NET)_EVENT_IDX qemu: capabilities: Retire QEMU_CAPS_VIRTIO_(BLK|NET)_EVENT_IDX qemuBuildDiskFrontendAttributeErrorPolicy: Extract logic qemuBuildDiskCommandLine: Generate via JSON qemuBuildInterfaceCommandLine: Generate via JSON qemuBuildNicDevProps: Move formatting of bootindex qemu: command: Remove unused qemuBuildRomStr qemuBuildControllerDevStr: Split out formatting of SCSI controller qemuBuildControllerDevStr: Split out formatting of PCI controller qemuBuildControllerSCSIDevStr: Format via JSON properties qemuBuildControllerPCIDevStr: Format via JSON properties qemuBuildUSBControllerDevStr: Split out validation of USB controller qemuBuildUSBControllerDevStr: Format via JSON properties. qemuBuildControllersByTypeCommandLine: Generate via JSON qemuBuildChrDeviceCommandLine: Generate via JSON qemuBuildHostdevCommandLine: Generate via JSON qemuBuildVsockCommandLine: Generate via JSON qemu: monitor: Remove legacy 'device_add' infrastrcture qemuBuildVHostUserFsCommandLine: Generate via JSON qemuBuildFSDevCommandLine: Generate via JSON qemuBuildVideoCommandLine: Generate via JSON qemu: Command remove unused 'qemuBuildVirtioDevStr' qemuBuildSoundCommandLine: Generate via JSON qemuBuildSoundCommandLine: Generate codecs via JSON qemuBuildHubCommandLine: Generate via JSON qemuBuildTPMCommandLine: Generate via JSON qemu: command: Remove unused 'qemuBuildDeviceAddressStr' src/conf/device_conf.h | 7 + src/conf/domain_conf.c | 8 +- src/conf/domain_conf.h | 2 +- src/libvirt_private.syms | 3 +- src/qemu/qemu_block.c | 6 +- src/qemu/qemu_capabilities.c | 20 +- src/qemu/qemu_capabilities.h | 13 +- src/qemu/qemu_command.c | 3981 +++++++++-------- src/qemu/qemu_command.h | 151 +- src/qemu/qemu_domain.h | 4 - src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_hotplug.c | 235 +- src/qemu/qemu_monitor.c | 49 +- src/qemu/qemu_monitor.h | 11 +- src/qemu/qemu_monitor_json.c | 175 +- src/qemu/qemu_monitor_json.h | 6 +- src/qemu/qemu_process.c | 61 +- src/qemu/qemu_process.h | 3 +- src/qemu/qemu_validate.c | 367 +- src/util/vircommand.c | 4 +- src/util/vircommand.h | 2 +- src/util/virjson.c | 93 +- src/util/virqemu.c | 71 +- src/util/virqemu.h | 10 +- .../caps_2.11.0.s390x.xml | 3 - .../caps_2.11.0.x86_64.xml | 3 - .../caps_2.12.0.aarch64.xml | 3 - .../caps_2.12.0.ppc64.xml | 3 - .../caps_2.12.0.s390x.xml | 3 - .../caps_2.12.0.x86_64.xml | 3 - .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 3 - .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 3 - .../caps_3.0.0.x86_64.xml | 3 - .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 3 - .../caps_3.1.0.x86_64.xml | 3 - .../caps_4.0.0.aarch64.xml | 3 - .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 3 - .../caps_4.0.0.riscv32.xml | 3 - .../caps_4.0.0.riscv64.xml | 3 - .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 3 - .../caps_4.0.0.x86_64.xml | 3 - .../caps_4.1.0.x86_64.xml | 3 - .../caps_4.2.0.aarch64.xml | 3 - .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 3 - .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 3 - .../caps_4.2.0.x86_64.xml | 3 - .../caps_5.0.0.aarch64.xml | 3 - .../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 3 - .../caps_5.0.0.riscv64.xml | 3 - .../caps_5.0.0.x86_64.xml | 3 - .../caps_5.1.0.x86_64.xml | 3 - .../caps_5.2.0.aarch64.xml | 3 - .../qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 3 - .../caps_5.2.0.riscv64.xml | 3 - .../qemucapabilitiesdata/caps_5.2.0.s390x.xml | 3 - .../caps_5.2.0.x86_64.xml | 3 - .../caps_6.0.0.aarch64.xml | 3 - .../qemucapabilitiesdata/caps_6.0.0.s390x.xml | 3 - .../caps_6.0.0.x86_64.xml | 3 - .../caps_6.1.0.x86_64.xml | 3 - tests/qemumonitorjsontest.c | 2 - ...fault-cpu-kvm-virt-4.2.aarch64-latest.args | 4 +- ...fault-cpu-tcg-virt-4.2.aarch64-latest.args | 4 +- .../qemuxml2argvdata/aarch64-pci-serial.args | 2 +- .../aarch64-traditional-pci.args | 4 +- .../aarch64-video-default.args | 2 +- .../aarch64-video-virtio-gpu-pci.args | 6 +- .../aarch64-virt-2.6-virtio-pci-default.args | 2 +- .../aarch64-virt-graphics.aarch64-latest.args | 16 +- .../aarch64-virt-headless.aarch64-latest.args | 14 +- .../aarch64-virtio-pci-default.args | 12 +- tests/qemuxml2argvdata/autoindex.args | 22 +- .../qemuxml2argvdata/balloon-ccw-deflate.args | 2 +- .../balloon-device-deflate-off.args | 2 +- .../balloon-device-deflate.args | 2 +- tests/qemuxml2argvdata/bios-nvram-secure.args | 2 +- tests/qemuxml2argvdata/boot-complex.args | 2 +- tests/qemuxml2argvdata/boot-order.args | 2 +- tests/qemuxml2argvdata/controller-order.args | 2 +- tests/qemuxml2argvdata/cpu-host-model.args | 2 +- .../cpu-host-model.x86_64-2.11.0.args | 6 +- .../cpu-host-model.x86_64-2.12.0.args | 6 +- .../cpu-host-model.x86_64-3.0.0.args | 6 +- .../cpu-host-model.x86_64-3.1.0.args | 6 +- .../cpu-host-model.x86_64-4.0.0.args | 6 +- .../cpu-host-model.x86_64-4.1.0.args | 6 +- .../cpu-host-model.x86_64-4.2.0.args | 6 +- .../cpu-host-model.x86_64-5.0.0.args | 6 +- .../cpu-host-model.x86_64-5.1.0.args | 6 +- .../cpu-host-model.x86_64-5.2.0.args | 6 +- .../cpu-host-model.x86_64-6.0.0.args | 6 +- .../cpu-host-model.x86_64-6.1.0.args | 6 +- .../cpu-host-model.x86_64-latest.args | 6 +- ...ult-video-type-aarch64.aarch64-latest.args | 4 +- ...ult-video-type-riscv64.riscv64-latest.args | 4 +- .../disk-floppy-q35-2_11.x86_64-2.12.0.args | 4 +- .../disk-floppy-q35-2_11.x86_64-latest.args | 4 +- .../disk-floppy-q35-2_9.x86_64-2.12.0.args | 4 +- .../disk-floppy-q35-2_9.x86_64-latest.args | 4 +- .../disk-ide-wwn.x86_64-latest.args | 2 +- .../disk-scsi-disk-wwn.x86_64-latest.args | 4 +- .../disk-scsi.x86_64-latest.args | 4 +- ...tdev-mdev-display-ramfb.x86_64-latest.args | 2 +- .../hostdev-scsi-lsi.x86_64-4.1.0.args | 12 +- .../hostdev-scsi-lsi.x86_64-latest.args | 12 +- .../hostdev-scsi-vhost-scsi-pcie.args | 4 +- ...hostdev-scsi-virtio-scsi.x86_64-4.1.0.args | 14 +- ...ostdev-scsi-virtio-scsi.x86_64-latest.args | 14 +- ...ubsys-mdev-vfio-ccw-boot.s390x-latest.args | 2 +- .../mach-virt-serial-pci.args | 2 +- .../mach-virt-serial-usb.args | 4 +- ...ine-loadparm-multiple-disks-nets-s390.args | 2 +- .../machine-loadparm-net-s390.args | 2 +- tests/qemuxml2argvdata/machine-smm-opt.args | 2 +- tests/qemuxml2argvdata/name-escape.args | 2 +- .../net-virtio-teaming-hostdev.args | 4 +- .../qemuxml2argvdata/net-virtio-teaming.args | 4 +- .../os-firmware-bios.x86_64-latest.args | 2 +- ...re-efi-no-enrolled-keys.x86_64-latest.args | 4 +- ...os-firmware-efi-secboot.x86_64-latest.args | 2 +- .../os-firmware-efi.x86_64-latest.args | 2 +- ...e.args => panic-double.x86_64-latest.args} | 16 +- tests/qemuxml2argvdata/panic-isa.xml | 33 - tests/qemuxml2argvdata/panic-no-address.args | 33 - .../panic-no-address.x86_64-latest.args | 37 + tests/qemuxml2argvdata/panic.args | 33 - .../qemuxml2argvdata/panic.x86_64-latest.args | 37 + tests/qemuxml2argvdata/pcie-expander-bus.args | 66 +- .../pcie-root-port-model-generic.args | 6 +- .../pcie-root-port-model-ioh3420.args | 4 +- ...cie-root-port-nohotplug.x86_64-latest.args | 14 +- tests/qemuxml2argvdata/pcie-root-port.args | 4 +- .../pcie-switch-downstream-port.args | 16 +- .../pcie-switch-upstream-port.args | 4 +- ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args | 2 +- ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args | 2 +- ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args | 2 +- ...ault-cpu-tcg-pseries-2.7.ppc64-latest.args | 2 +- ...ault-cpu-tcg-pseries-3.1.ppc64-latest.args | 2 +- ...ault-cpu-tcg-pseries-4.2.ppc64-latest.args | 2 +- .../ppc64-pseries-graphics.ppc64-latest.args | 2 +- .../ppc64-pseries-headless.ppc64-latest.args | 2 +- .../ppc64-tpmproxy-with-tpm.ppc64-latest.args | 2 +- tests/qemuxml2argvdata/pseries-basic.args | 2 +- .../pseries-cpu-compat-power9.args | 2 +- .../qemuxml2argvdata/pseries-cpu-compat.args | 2 +- tests/qemuxml2argvdata/pseries-cpu-exact.args | 2 +- tests/qemuxml2argvdata/pseries-cpu-le.args | 2 +- .../pseries-panic-missing.args | 2 +- .../pseries-panic-no-address.args | 2 +- .../pseries-serial-native.args | 2 +- .../qemuxml2argvdata/pseries-usb-default.args | 2 +- tests/qemuxml2argvdata/pseries-usb-kbd.args | 2 +- tests/qemuxml2argvdata/pseries-usb-multi.args | 2 +- .../pseries-vio-user-assigned.args | 8 +- tests/qemuxml2argvdata/pseries-vio.args | 8 +- .../q35-default-devices-only.args | 6 +- tests/qemuxml2argvdata/q35-multifunction.args | 36 +- .../q35-pci-force-address.args | 2 +- tests/qemuxml2argvdata/q35-pcie-autoadd.args | 28 +- tests/qemuxml2argvdata/q35-pcie.args | 26 +- .../q35-pm-disable-fallback.args | 2 +- tests/qemuxml2argvdata/q35-pm-disable.args | 2 +- .../q35-virt-manager-basic.args | 12 +- tests/qemuxml2argvdata/q35-virtio-pci.args | 26 +- .../riscv64-virt-graphics.riscv64-latest.args | 16 +- .../riscv64-virt-headless.riscv64-latest.args | 14 +- .../qemuxml2argvdata/s390-panic-missing.args | 2 +- .../serial-dev-chardev-iobase.args | 2 +- .../tpm-emulator-spapr.ppc64-latest.args | 10 +- .../tseg-explicit-size.x86_64-latest.args | 6 +- ...sb-controller-explicit-unavailable-q35.err | 2 +- .../usb-controller-qemu-xhci-unavailable.err | 2 +- ...vhost-user-fs-hugepages.x86_64-latest.args | 8 +- .../vhost-vsock-ccw-iommu.s390x-latest.args | 2 +- ...eo-bochs-display-device.x86_64-latest.args | 2 +- .../virtio-non-transitional.x86_64-3.1.0.args | 22 +- ...virtio-non-transitional.x86_64-latest.args | 22 +- ...-options-controller-ats.x86_64-latest.args | 4 +- ...ptions-controller-iommu.x86_64-latest.args | 4 +- ...tions-controller-packed.x86_64-latest.args | 4 +- .../virtio-options-fs-ats.x86_64-latest.args | 4 +- ...virtio-options-fs-iommu.x86_64-latest.args | 4 +- ...irtio-options-fs-packed.x86_64-latest.args | 4 +- ...irtio-options-input-ats.x86_64-latest.args | 4 +- ...tio-options-input-iommu.x86_64-latest.args | 4 +- ...io-options-input-packed.x86_64-latest.args | 4 +- ...-options-memballoon-ats.x86_64-latest.args | 2 +- ...loon-freepage-reporting.x86_64-latest.args | 2 +- ...ptions-memballoon-iommu.x86_64-latest.args | 2 +- ...tions-memballoon-packed.x86_64-latest.args | 2 +- .../virtio-options-net-ats.x86_64-latest.args | 4 +- ...irtio-options-net-iommu.x86_64-latest.args | 4 +- ...rtio-options-net-packed.x86_64-latest.args | 4 +- .../virtio-options-rng-ats.x86_64-latest.args | 4 +- ...irtio-options-rng-iommu.x86_64-latest.args | 4 +- ...rtio-options-rng-packed.x86_64-latest.args | 4 +- ...irtio-options-video-ats.x86_64-latest.args | 4 +- ...tio-options-video-iommu.x86_64-latest.args | 4 +- ...io-options-video-packed.x86_64-latest.args | 4 +- .../virtio-options.x86_64-latest.args | 22 +- .../virtio-transitional.x86_64-3.1.0.args | 4 +- .../virtio-transitional.x86_64-latest.args | 4 +- tests/qemuxml2argvdata/watchdog-device.args | 34 - .../watchdog-device.x86_64-latest.args | 38 + tests/qemuxml2argvdata/watchdog-device.xml | 2 +- tests/qemuxml2argvdata/watchdog-dump.args | 34 - .../watchdog-dump.x86_64-latest.args | 38 + .../qemuxml2argvdata/watchdog-injectnmi.args | 34 - .../watchdog-injectnmi.x86_64-latest.args | 38 + tests/qemuxml2argvdata/watchdog.args | 33 - .../watchdog.x86_64-latest.args | 37 + ...default-cpu-kvm-q35-4.2.x86_64-latest.args | 8 +- ...default-cpu-tcg-q35-4.2.x86_64-latest.args | 8 +- .../x86_64-q35-graphics.x86_64-latest.args | 14 +- .../x86_64-q35-headless.x86_64-latest.args | 14 +- tests/qemuxml2argvtest.c | 155 +- tests/qemuxml2xmltest.c | 1 - 218 files changed, 3425 insertions(+), 3484 deletions(-) rename tests/qemuxml2argvdata/{panic-double.args => panic-double.x86_64-latest.args} (52%) delete mode 100644 tests/qemuxml2argvdata/panic-isa.xml delete mode 100644 tests/qemuxml2argvdata/panic-no-address.args create mode 100644 tests/qemuxml2argvdata/panic-no-address.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/panic.args create mode 100644 tests/qemuxml2argvdata/panic.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/watchdog-device.args create mode 100644 tests/qemuxml2argvdata/watchdog-device.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/watchdog-dump.args create mode 100644 tests/qemuxml2argvdata/watchdog-dump.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/watchdog-injectnmi.args create mode 100644 tests/qemuxml2argvdata/watchdog-injectnmi.x86_64-latest.args delete mode 100644 tests/qemuxml2argvdata/watchdog.args create mode 100644 tests/qemuxml2argvdata/watchdog.x86_64-latest.args -- 2.31.1