[libvirt] [PATCH v2 0/7] Switch over qemu command line capabilities to virBitmap

There are two main reasons behind this patchset: - we are getting very close to 64 flags which is the maximum we can use with unsigned long long - by using LL constants in enum we already violates C99 constraint that enum values have to fit into int Patches 3/7 and 5/7 are fully and 4/7 mostly mechanical. 6/7 and 7/7 need to be squashed into a single patch but are provided separately for easier review. Changes in version 2 are described in each patch separately. Jiri Denemark (7): util: Use unsigned long as a base type for virBitmap util: Add API for converting virBitmap into printable string qemu: Rename QEMUD_CMD_FLAG_* to QEMU_CAPS_* qemu: Use helper functions for handling cmd line capabilities qemu: Rename qemud\?CmdFlags to qemuCaps qemu: Switch over command line capabilities to virBitmap tests: Use virBitmap for qemu command line caps cfg.mk | 3 +- src/libvirt_private.syms | 1 + src/qemu/qemu_capabilities.c | 238 +++++++++----- src/qemu/qemu_capabilities.h | 152 +++++---- src/qemu/qemu_command.c | 392 +++++++++++----------- src/qemu/qemu_command.h | 30 +- src/qemu/qemu_driver.c | 48 ++-- src/qemu/qemu_hotplug.c | 162 +++++----- src/qemu/qemu_hotplug.h | 32 +- src/qemu/qemu_migration.c | 22 +- src/qemu/qemu_process.c | 29 +- src/util/bitmap.c | 51 +++- src/util/bitmap.h | 3 + tests/qemuargv2xmltest.c | 2 +- tests/qemuhelptest.c | 747 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 474 +++++++++++++------------- 16 files changed, 1263 insertions(+), 1123 deletions(-) -- 1.7.4.1

--- Notes: Version 2: - new patch src/util/bitmap.c | 18 +++++++----------- 1 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/util/bitmap.c b/src/util/bitmap.c index 9741668..978ec9b 100644 --- a/src/util/bitmap.c +++ b/src/util/bitmap.c @@ -1,7 +1,7 @@ /* * bitmap.h: Simple bitmap operations * - * Copyright (C) 2010 Red Hat, Inc. + * Copyright (C) 2010-2011 Red Hat, Inc. * Copyright (C) 2010 Novell, Inc. * * This library is free software; you can redistribute it and/or @@ -36,13 +36,14 @@ struct _virBitmap { size_t size; - uint32_t *map; + unsigned long *map; }; -#define VIR_BITMAP_BITS_PER_UNIT (sizeof(uint32_t) * CHAR_BIT) +#define VIR_BITMAP_BITS_PER_UNIT ((int) sizeof(unsigned long) * CHAR_BIT) #define VIR_BITMAP_UNIT_OFFSET(b) ((b) / VIR_BITMAP_BITS_PER_UNIT) #define VIR_BITMAP_BIT_OFFSET(b) ((b) % VIR_BITMAP_BITS_PER_UNIT) +#define VIR_BITMAP_BIT(b) (1UL << VIR_BITMAP_BIT_OFFSET(b)) /** @@ -105,7 +106,7 @@ int virBitmapSetBit(virBitmapPtr bitmap, size_t b) if (bitmap->size <= b) return -1; - bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] |= (1 << VIR_BITMAP_BIT_OFFSET(b)); + bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] |= VIR_BITMAP_BIT(b); return 0; } @@ -123,7 +124,7 @@ int virBitmapClearBit(virBitmapPtr bitmap, size_t b) if (bitmap->size <= b) return -1; - bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] &= ~(1 << VIR_BITMAP_BIT_OFFSET(b)); + bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] &= ~VIR_BITMAP_BIT(b); return 0; } @@ -140,14 +141,9 @@ int virBitmapClearBit(virBitmapPtr bitmap, size_t b) */ int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result) { - uint32_t bit; - if (bitmap->size <= b) return -1; - bit = bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] & - (1 << VIR_BITMAP_BIT_OFFSET(b)); - - *result = bit != 0; + *result = !!(bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] & VIR_BITMAP_BIT(b)); return 0; } -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
--- Notes: Version 2: - new patch
src/util/bitmap.c | 18 +++++++----------- 1 files changed, 7 insertions(+), 11 deletions(-)
ACK, and nice ratio in lines of code, thanks to...
+#define VIR_BITMAP_BIT(b) (1UL << VIR_BITMAP_BIT_OFFSET(b))
...this useful addition. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:03:43 -0700, Eric Blake wrote:
On 02/22/2011 09:48 AM, Jiri Denemark wrote:
--- Notes: Version 2: - new patch
src/util/bitmap.c | 18 +++++++----------- 1 files changed, 7 insertions(+), 11 deletions(-)
ACK, and nice ratio in lines of code, thanks to...
Pushed. Jirka

--- Notes: Version 2: - modified for unsigned long base type src/libvirt_private.syms | 1 + src/util/bitmap.c | 33 +++++++++++++++++++++++++++++++++ src/util/bitmap.h | 3 +++ 3 files changed, 37 insertions(+), 0 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 797a670..66917ca 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -16,6 +16,7 @@ virBitmapClearBit; virBitmapFree; virBitmapGetBit; virBitmapSetBit; +virBitmapString; # buf.h diff --git a/src/util/bitmap.c b/src/util/bitmap.c index 978ec9b..2edb2db 100644 --- a/src/util/bitmap.c +++ b/src/util/bitmap.c @@ -32,6 +32,7 @@ #include "bitmap.h" #include "memory.h" +#include "buf.h" struct _virBitmap { @@ -147,3 +148,35 @@ int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result) *result = !!(bitmap->map[VIR_BITMAP_UNIT_OFFSET(b)] & VIR_BITMAP_BIT(b)); return 0; } + +/** + * virBitmapString: + * @bitmap: Pointer to bitmap + * + * Convert @bitmap to printable string. + * + * Returns pointer to the string or NULL on error. + */ +char *virBitmapString(virBitmapPtr bitmap) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + size_t sz; + + virBufferAddLit(&buf, "0x"); + + sz = (bitmap->size + VIR_BITMAP_BITS_PER_UNIT - 1) / + VIR_BITMAP_BITS_PER_UNIT; + + while (sz--) { + virBufferVSprintf(&buf, "%0*lx", + VIR_BITMAP_BITS_PER_UNIT / 4, + bitmap->map[sz]); + } + + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + return NULL; + } + + return virBufferContentAndReset(&buf); +} diff --git a/src/util/bitmap.h b/src/util/bitmap.h index 08515d1..db297b6 100644 --- a/src/util/bitmap.h +++ b/src/util/bitmap.h @@ -60,4 +60,7 @@ int virBitmapClearBit(virBitmapPtr bitmap, size_t b) int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK; +char *virBitmapString(virBitmapPtr bitmap) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; + #endif -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
--- Notes: Version 2: - modified for unsigned long base type
+ while (sz--) { + virBufferVSprintf(&buf, "%0*lx", + VIR_BITMAP_BITS_PER_UNIT / 4, + bitmap->map[sz]);
Yep, that (int) cast in patch 1 makes sense now (I guessed this would be the reason for the cast, which is why I didn't point it out on patch 1). ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:07:35 -0700, Eric Blake wrote:
On 02/22/2011 09:48 AM, Jiri Denemark wrote:
--- Notes: Version 2: - modified for unsigned long base type
+ while (sz--) { + virBufferVSprintf(&buf, "%0*lx", + VIR_BITMAP_BITS_PER_UNIT / 4, + bitmap->map[sz]);
Yep, that (int) cast in patch 1 makes sense now (I guessed this would be the reason for the cast, which is why I didn't point it out on patch 1).
ACK.
Thanks, pushed. Jirka

The new names comply more with the fact that they are all members of enum qemuCapsFlags. --- Notes: Version 2: - rebased to current master, no additional changes src/qemu/qemu_capabilities.c | 132 +++++----- src/qemu/qemu_capabilities.h | 122 ++++---- src/qemu/qemu_command.c | 248 ++++++++-------- src/qemu/qemu_hotplug.c | 86 +++--- src/qemu/qemu_migration.c | 12 +- src/qemu/qemu_process.c | 10 +- tests/qemuargv2xmltest.c | 2 +- tests/qemuhelptest.c | 656 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 310 ++++++++++---------- 9 files changed, 789 insertions(+), 789 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 5f08a20..6959cec 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -400,7 +400,7 @@ qemuCapsProbeCPUModels(const char *qemu, } cmd = virCommandNewArgList(qemu, "-cpu", "?", NULL); - if (qemuCmdFlags & QEMUD_CMD_FLAG_NODEFCONFIG) + if (qemuCmdFlags & QEMU_CAPS_NODEFCONFIG) virCommandAddArg(cmd, "-nodefconfig"); virCommandAddEnvPassCommon(cmd); virCommandSetOutputBuffer(cmd, &output); @@ -559,7 +559,7 @@ qemuCapsInitGuest(virCapsPtr caps, goto error; if (qemuCapsExtractVersionInfo(binary, info->arch, NULL, &qemuCmdFlags) < 0 || - ((qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX) && + ((qemuCmdFlags & QEMU_CAPS_BOOTINDEX) && !virCapabilitiesAddGuestFeature(guest, "deviceboot", 1, 0))) goto error; @@ -791,119 +791,119 @@ qemuCapsComputeCmdFlags(const char *help, const char *p; if (strstr(help, "-no-kqemu")) - flags |= QEMUD_CMD_FLAG_KQEMU; + flags |= QEMU_CAPS_KQEMU; if (strstr(help, "-enable-kqemu")) - flags |= QEMUD_CMD_FLAG_ENABLE_KQEMU; + flags |= QEMU_CAPS_ENABLE_KQEMU; if (strstr(help, "-no-kvm")) - flags |= QEMUD_CMD_FLAG_KVM; + flags |= QEMU_CAPS_KVM; if (strstr(help, "-enable-kvm")) - flags |= QEMUD_CMD_FLAG_ENABLE_KVM; + flags |= QEMU_CAPS_ENABLE_KVM; if (strstr(help, "-no-reboot")) - flags |= QEMUD_CMD_FLAG_NO_REBOOT; + flags |= QEMU_CAPS_NO_REBOOT; if (strstr(help, "-name")) { - flags |= QEMUD_CMD_FLAG_NAME; + flags |= QEMU_CAPS_NAME; if (strstr(help, ",process=")) - flags |= QEMUD_CMD_FLAG_NAME_PROCESS; + flags |= QEMU_CAPS_NAME_PROCESS; } if (strstr(help, "-uuid")) - flags |= QEMUD_CMD_FLAG_UUID; + flags |= QEMU_CAPS_UUID; if (strstr(help, "-xen-domid")) - flags |= QEMUD_CMD_FLAG_XEN_DOMID; + flags |= QEMU_CAPS_XEN_DOMID; else if (strstr(help, "-domid")) - flags |= QEMUD_CMD_FLAG_DOMID; + flags |= QEMU_CAPS_DOMID; if (strstr(help, "-drive")) { - flags |= QEMUD_CMD_FLAG_DRIVE; + flags |= QEMU_CAPS_DRIVE; if (strstr(help, "cache=") && !strstr(help, "cache=on|off")) - flags |= QEMUD_CMD_FLAG_DRIVE_CACHE_V2; + flags |= QEMU_CAPS_DRIVE_CACHE_V2; if (strstr(help, "format=")) - flags |= QEMUD_CMD_FLAG_DRIVE_FORMAT; + flags |= QEMU_CAPS_DRIVE_FORMAT; if (strstr(help, "readonly=")) - flags |= QEMUD_CMD_FLAG_DRIVE_READONLY; + flags |= QEMU_CAPS_DRIVE_READONLY; if (strstr(help, "aio=threads|native")) - flags |= QEMUD_CMD_FLAG_DRIVE_AIO; + flags |= QEMU_CAPS_DRIVE_AIO; } if ((p = strstr(help, "-vga")) && !strstr(help, "-std-vga")) { const char *nl = strstr(p, "\n"); - flags |= QEMUD_CMD_FLAG_VGA; + flags |= QEMU_CAPS_VGA; if (strstr(p, "|qxl")) - flags |= QEMUD_CMD_FLAG_VGA_QXL; + flags |= QEMU_CAPS_VGA_QXL; if ((p = strstr(p, "|none")) && p < nl) - flags |= QEMUD_CMD_FLAG_VGA_NONE; + flags |= QEMU_CAPS_VGA_NONE; } if (strstr(help, "-spice")) - flags |= QEMUD_CMD_FLAG_SPICE; + flags |= QEMU_CAPS_SPICE; if (strstr(help, "boot=on")) - flags |= QEMUD_CMD_FLAG_DRIVE_BOOT; + flags |= QEMU_CAPS_DRIVE_BOOT; if (strstr(help, "serial=s")) - flags |= QEMUD_CMD_FLAG_DRIVE_SERIAL; + flags |= QEMU_CAPS_DRIVE_SERIAL; if (strstr(help, "-pcidevice")) - flags |= QEMUD_CMD_FLAG_PCIDEVICE; + flags |= QEMU_CAPS_PCIDEVICE; if (strstr(help, "-mem-path")) - flags |= QEMUD_CMD_FLAG_MEM_PATH; + flags |= QEMU_CAPS_MEM_PATH; if (strstr(help, "-chardev")) { - flags |= QEMUD_CMD_FLAG_CHARDEV; + flags |= QEMU_CAPS_CHARDEV; if (strstr(help, "-chardev spicevmc")) - flags |= QEMUD_CMD_FLAG_CHARDEV_SPICEVMC; + flags |= QEMU_CAPS_CHARDEV_SPICEVMC; } if (strstr(help, "-balloon")) - flags |= QEMUD_CMD_FLAG_BALLOON; + flags |= QEMU_CAPS_BALLOON; if (strstr(help, "-device")) { - flags |= QEMUD_CMD_FLAG_DEVICE; + flags |= QEMU_CAPS_DEVICE; /* * When -device was introduced, qemu already supported drive's * readonly option but didn't advertise that. */ - flags |= QEMUD_CMD_FLAG_DRIVE_READONLY; + flags |= QEMU_CAPS_DRIVE_READONLY; } if (strstr(help, "-nodefconfig")) - flags |= QEMUD_CMD_FLAG_NODEFCONFIG; + flags |= QEMU_CAPS_NODEFCONFIG; /* The trailing ' ' is important to avoid a bogus match */ if (strstr(help, "-rtc ")) - flags |= QEMUD_CMD_FLAG_RTC; + flags |= QEMU_CAPS_RTC; /* to wit */ if (strstr(help, "-rtc-td-hack")) - flags |= QEMUD_CMD_FLAG_RTC_TD_HACK; + flags |= QEMU_CAPS_RTC_TD_HACK; if (strstr(help, "-no-hpet")) - flags |= QEMUD_CMD_FLAG_NO_HPET; + flags |= QEMU_CAPS_NO_HPET; if (strstr(help, "-no-kvm-pit-reinjection")) - flags |= QEMUD_CMD_FLAG_NO_KVM_PIT; + flags |= QEMU_CAPS_NO_KVM_PIT; if (strstr(help, "-tdf")) - flags |= QEMUD_CMD_FLAG_TDF; + flags |= QEMU_CAPS_TDF; if (strstr(help, "-enable-nesting")) - flags |= QEMUD_CMD_FLAG_NESTING; + flags |= QEMU_CAPS_NESTING; if (strstr(help, ",menu=on")) - flags |= QEMUD_CMD_FLAG_BOOT_MENU; + flags |= QEMU_CAPS_BOOT_MENU; if (strstr(help, "-fsdev")) - flags |= QEMUD_CMD_FLAG_FSDEV; + flags |= QEMU_CAPS_FSDEV; if (strstr(help, "-smbios type")) - flags |= QEMUD_CMD_FLAG_SMBIOS_TYPE; + flags |= QEMU_CAPS_SMBIOS_TYPE; if (strstr(help, "-netdev")) { /* Disable -netdev on 0.12 since although it exists, * the corresponding netdev_add/remove monitor commands * do not, and we need them to be able todo hotplug */ if (version >= 13000) - flags |= QEMUD_CMD_FLAG_NETDEV; + flags |= QEMU_CAPS_NETDEV; } if (strstr(help, "-sdl")) - flags |= QEMUD_CMD_FLAG_SDL; + flags |= QEMU_CAPS_SDL; if (strstr(help, "cores=") && strstr(help, "threads=") && strstr(help, "sockets=")) - flags |= QEMUD_CMD_FLAG_SMP_TOPOLOGY; + flags |= QEMU_CAPS_SMP_TOPOLOGY; if (version >= 9000) - flags |= QEMUD_CMD_FLAG_VNC_COLON; + flags |= QEMU_CAPS_VNC_COLON; if (is_kvm && (version >= 10000 || kvm_version >= 74)) - flags |= QEMUD_CMD_FLAG_VNET_HDR; + flags |= QEMU_CAPS_VNET_HDR; if (is_kvm && strstr(help, ",vhost=")) { - flags |= QEMUD_CMD_FLAG_VNET_HOST; + flags |= QEMU_CAPS_VNET_HOST; } /* @@ -919,22 +919,22 @@ qemuCapsComputeCmdFlags(const char *help, * while waiting for data, so pretend it doesn't exist */ if (version >= 10000) { - flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP; - flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC; + flags |= QEMU_CAPS_MIGRATE_QEMU_TCP; + flags |= QEMU_CAPS_MIGRATE_QEMU_EXEC; if (version >= 12000) { - flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX; - flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_FD; + flags |= QEMU_CAPS_MIGRATE_QEMU_UNIX; + flags |= QEMU_CAPS_MIGRATE_QEMU_FD; } } else if (kvm_version >= 79) { - flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP; + flags |= QEMU_CAPS_MIGRATE_QEMU_TCP; if (kvm_version >= 80) - flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC; + flags |= QEMU_CAPS_MIGRATE_QEMU_EXEC; } else if (kvm_version > 0) { - flags |= QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO; + flags |= QEMU_CAPS_MIGRATE_KVM_STDIO; } if (version >= 10000) - flags |= QEMUD_CMD_FLAG_0_10; + flags |= QEMU_CAPS_0_10; /* While JSON mode was available in 0.12.0, it was too * incomplete to contemplate using. The 0.13.0 release @@ -943,7 +943,7 @@ qemuCapsComputeCmdFlags(const char *help, * the downside. */ if (version >= 13000) - flags |= QEMUD_CMD_FLAG_MONITOR_JSON; + flags |= QEMU_CAPS_MONITOR_JSON; return flags; } @@ -1098,26 +1098,26 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags) { /* Which devices exist. */ if (strstr(str, "name \"hda-duplex\"")) - *flags |= QEMUD_CMD_FLAG_HDA_DUPLEX; + *flags |= QEMU_CAPS_HDA_DUPLEX; if (strstr(str, "name \"ccid-card-emulated\"")) - *flags |= QEMUD_CMD_FLAG_CCID_EMULATED; + *flags |= QEMU_CAPS_CCID_EMULATED; if (strstr(str, "name \"ccid-card-passthru\"")) - *flags |= QEMUD_CMD_FLAG_CCID_PASSTHRU; + *flags |= QEMU_CAPS_CCID_PASSTHRU; /* Prefer -chardev spicevmc (detected earlier) over -device spicevmc */ - if (!(*flags & QEMUD_CMD_FLAG_CHARDEV_SPICEVMC) && + if (!(*flags & QEMU_CAPS_CHARDEV_SPICEVMC) && strstr(str, "name \"spicevmc\"")) - *flags |= QEMUD_CMD_FLAG_DEVICE_SPICEVMC; + *flags |= QEMU_CAPS_DEVICE_SPICEVMC; /* Features of given devices. */ if (strstr(str, "pci-assign.configfd")) - *flags |= QEMUD_CMD_FLAG_PCI_CONFIGFD; + *flags |= QEMU_CAPS_PCI_CONFIGFD; if (strstr(str, "virtio-blk-pci.bootindex")) { - *flags |= QEMUD_CMD_FLAG_BOOTINDEX; + *flags |= QEMU_CAPS_BOOTINDEX; if (strstr(str, "pci-assign.bootindex")) - *flags |= QEMUD_CMD_FLAG_PCI_BOOTINDEX; + *flags |= QEMU_CAPS_PCI_BOOTINDEX; } if (strstr(str, "virtio-net-pci.tx=")) - *flags |= QEMUD_CMD_FLAG_VIRTIO_TX_ALG; + *flags |= QEMU_CAPS_VIRTIO_TX_ALG; return 0; } @@ -1161,12 +1161,12 @@ int qemuCapsExtractVersionInfo(const char *qemu, const char *arch, /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(arch, "x86_64", 6) || STREQLEN(arch, "i686", 4)) { - flags |= QEMUD_CMD_FLAG_PCI_MULTIBUS; + flags |= QEMU_CAPS_PCI_MULTIBUS; } /* qemuCapsExtractDeviceStr will only set additional flags if qemu * understands the 0.13.0+ notion of "-device driver,". */ - if ((flags & QEMUD_CMD_FLAG_DEVICE) && + if ((flags & QEMU_CAPS_DEVICE) && strstr(help, "-device driver,?") && qemuCapsExtractDeviceStr(qemu, &flags) < 0) goto cleanup; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 63cbbb3..9a7898a 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -28,71 +28,71 @@ /* Internal flags to keep track of qemu command line capabilities */ enum qemuCapsFlags { - QEMUD_CMD_FLAG_KQEMU = (1 << 0), /* Whether KQEMU is compiled in */ - QEMUD_CMD_FLAG_VNC_COLON = (1 << 1), /* Does the VNC take just port, or address + display */ - QEMUD_CMD_FLAG_NO_REBOOT = (1 << 2), /* Is the -no-reboot flag available */ - QEMUD_CMD_FLAG_DRIVE = (1 << 3), /* Is the new -drive arg available */ - QEMUD_CMD_FLAG_DRIVE_BOOT = (1 << 4), /* Does -drive support boot=on */ - QEMUD_CMD_FLAG_NAME = (1 << 5), /* Is the -name flag available */ - QEMUD_CMD_FLAG_UUID = (1 << 6), /* Is the -uuid flag available */ - QEMUD_CMD_FLAG_DOMID = (1 << 7), /* Xenner only, special -domid flag available */ - QEMUD_CMD_FLAG_VNET_HDR = (1 << 8), - QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO = (1 << 9), /* Original migration code from KVM. Also had tcp, but we can't use that + QEMU_CAPS_KQEMU = (1 << 0), /* Whether KQEMU is compiled in */ + QEMU_CAPS_VNC_COLON = (1 << 1), /* Does the VNC take just port, or address + display */ + QEMU_CAPS_NO_REBOOT = (1 << 2), /* Is the -no-reboot flag available */ + QEMU_CAPS_DRIVE = (1 << 3), /* Is the new -drive arg available */ + QEMU_CAPS_DRIVE_BOOT = (1 << 4), /* Does -drive support boot=on */ + QEMU_CAPS_NAME = (1 << 5), /* Is the -name flag available */ + QEMU_CAPS_UUID = (1 << 6), /* Is the -uuid flag available */ + QEMU_CAPS_DOMID = (1 << 7), /* Xenner only, special -domid flag available */ + QEMU_CAPS_VNET_HDR = (1 << 8), + QEMU_CAPS_MIGRATE_KVM_STDIO = (1 << 9), /* Original migration code from KVM. Also had tcp, but we can't use that * since it had a design bug blocking the entire monitor console */ - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP = (1 << 10), /* New migration syntax after merge to QEMU with TCP transport */ - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC = (1 << 11), /* New migration syntax after merge to QEMU with EXEC transport */ - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 = (1 << 12), /* Is the cache= flag wanting new v2 values */ - QEMUD_CMD_FLAG_KVM = (1 << 13), /* Whether KVM is compiled in */ - QEMUD_CMD_FLAG_DRIVE_FORMAT = (1 << 14), /* Is -drive format= avail */ - QEMUD_CMD_FLAG_VGA = (1 << 15), /* Is -vga avail */ + QEMU_CAPS_MIGRATE_QEMU_TCP = (1 << 10), /* New migration syntax after merge to QEMU with TCP transport */ + QEMU_CAPS_MIGRATE_QEMU_EXEC = (1 << 11), /* New migration syntax after merge to QEMU with EXEC transport */ + QEMU_CAPS_DRIVE_CACHE_V2 = (1 << 12), /* Is the cache= flag wanting new v2 values */ + QEMU_CAPS_KVM = (1 << 13), /* Whether KVM is compiled in */ + QEMU_CAPS_DRIVE_FORMAT = (1 << 14), /* Is -drive format= avail */ + QEMU_CAPS_VGA = (1 << 15), /* Is -vga avail */ /* features added in qemu-0.10.0 or later */ - QEMUD_CMD_FLAG_0_10 = (1 << 16), - QEMUD_CMD_FLAG_NET_NAME = QEMUD_CMD_FLAG_0_10, /* -net ...,name=str */ - QEMUD_CMD_FLAG_HOST_NET_ADD = QEMUD_CMD_FLAG_0_10, /* host_net_add monitor command */ + QEMU_CAPS_0_10 = (1 << 16), + QEMU_CAPS_NET_NAME = QEMU_CAPS_0_10, /* -net ...,name=str */ + QEMU_CAPS_HOST_NET_ADD = QEMU_CAPS_0_10, /* host_net_add monitor command */ - QEMUD_CMD_FLAG_PCIDEVICE = (1 << 17), /* PCI device assignment only supported by qemu-kvm */ - QEMUD_CMD_FLAG_MEM_PATH = (1 << 18), /* mmap'ped guest backing supported */ - QEMUD_CMD_FLAG_DRIVE_SERIAL = (1 << 19), /* -driver serial= available */ - QEMUD_CMD_FLAG_XEN_DOMID = (1 << 20), /* -xen-domid (new style xen integration) */ - QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */ - QEMUD_CMD_FLAG_CHARDEV = (1 << 22), /* Is the new -chardev arg available */ - QEMUD_CMD_FLAG_ENABLE_KVM = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */ - QEMUD_CMD_FLAG_MONITOR_JSON = (1 << 24), /* JSON mode for monitor */ - QEMUD_CMD_FLAG_BALLOON = (1 << 25), /* -balloon available */ - QEMUD_CMD_FLAG_DEVICE = (1 << 26), /* Is the new -device arg available */ - QEMUD_CMD_FLAG_SDL = (1 << 27), /* Is the new -sdl arg available */ - QEMUD_CMD_FLAG_SMP_TOPOLOGY = (1 << 28), /* Is sockets=s,cores=c,threads=t available for -smp? */ - QEMUD_CMD_FLAG_NETDEV = (1 << 29), /* The -netdev flag & netdev_add/remove monitor commands */ - QEMUD_CMD_FLAG_RTC = (1 << 30), /* The -rtc flag for clock options */ - QEMUD_CMD_FLAG_VNET_HOST = (1LL << 31), /* vnet-host support is available in qemu */ - QEMUD_CMD_FLAG_RTC_TD_HACK = (1LL << 32), /* -rtc-td-hack available */ - QEMUD_CMD_FLAG_NO_HPET = (1LL << 33), /* -no-hpet flag is supported */ - QEMUD_CMD_FLAG_NO_KVM_PIT = (1LL << 34), /* -no-kvm-pit-reinjection supported */ - QEMUD_CMD_FLAG_TDF = (1LL << 35), /* -tdf flag (user-mode pit catchup) */ - QEMUD_CMD_FLAG_PCI_CONFIGFD = (1LL << 36), /* pci-assign.configfd */ - QEMUD_CMD_FLAG_NODEFCONFIG = (1LL << 37), /* -nodefconfig */ - QEMUD_CMD_FLAG_BOOT_MENU = (1LL << 38), /* -boot menu=on support */ - QEMUD_CMD_FLAG_ENABLE_KQEMU = (1LL << 39), /* -enable-kqemu flag */ - QEMUD_CMD_FLAG_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */ - QEMUD_CMD_FLAG_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */ - QEMUD_CMD_FLAG_NAME_PROCESS = (1LL << 42), /* Is -name process= available */ - QEMUD_CMD_FLAG_DRIVE_READONLY= (1LL << 43), /* -drive readonly=on|off */ - QEMUD_CMD_FLAG_SMBIOS_TYPE = (1LL << 44), /* Is -smbios type= available */ - QEMUD_CMD_FLAG_VGA_QXL = (1LL << 45), /* The 'qxl' arg for '-vga' */ - QEMUD_CMD_FLAG_SPICE = (1LL << 46), /* Is -spice avail */ - QEMUD_CMD_FLAG_VGA_NONE = (1LL << 47), /* The 'none' arg for '-vga' */ - QEMUD_CMD_FLAG_MIGRATE_QEMU_FD = (1LL << 48), /* -incoming fd:n */ - QEMUD_CMD_FLAG_BOOTINDEX = (1LL << 49), /* -device bootindex property */ - QEMUD_CMD_FLAG_HDA_DUPLEX = (1LL << 50), /* -device hda-duplex */ - QEMUD_CMD_FLAG_DRIVE_AIO = (1LL << 51), /* -drive aio= supported */ - QEMUD_CMD_FLAG_PCI_MULTIBUS = (1LL << 52), /* bus=pci.0 vs bus=pci */ - QEMUD_CMD_FLAG_PCI_BOOTINDEX = (1LL << 53), /* pci-assign.bootindex */ - QEMUD_CMD_FLAG_CCID_EMULATED = (1LL << 54), /* -device ccid-card-emulated */ - QEMUD_CMD_FLAG_CCID_PASSTHRU = (1LL << 55), /* -device ccid-card-passthru */ - QEMUD_CMD_FLAG_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ - QEMUD_CMD_FLAG_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ - QEMUD_CMD_FLAG_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */ + QEMU_CAPS_PCIDEVICE = (1 << 17), /* PCI device assignment only supported by qemu-kvm */ + QEMU_CAPS_MEM_PATH = (1 << 18), /* mmap'ped guest backing supported */ + QEMU_CAPS_DRIVE_SERIAL = (1 << 19), /* -driver serial= available */ + QEMU_CAPS_XEN_DOMID = (1 << 20), /* -xen-domid (new style xen integration) */ + QEMU_CAPS_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */ + QEMU_CAPS_CHARDEV = (1 << 22), /* Is the new -chardev arg available */ + QEMU_CAPS_ENABLE_KVM = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */ + QEMU_CAPS_MONITOR_JSON = (1 << 24), /* JSON mode for monitor */ + QEMU_CAPS_BALLOON = (1 << 25), /* -balloon available */ + QEMU_CAPS_DEVICE = (1 << 26), /* Is the new -device arg available */ + QEMU_CAPS_SDL = (1 << 27), /* Is the new -sdl arg available */ + QEMU_CAPS_SMP_TOPOLOGY = (1 << 28), /* Is sockets=s,cores=c,threads=t available for -smp? */ + QEMU_CAPS_NETDEV = (1 << 29), /* The -netdev flag & netdev_add/remove monitor commands */ + QEMU_CAPS_RTC = (1 << 30), /* The -rtc flag for clock options */ + QEMU_CAPS_VNET_HOST = (1LL << 31), /* vnet-host support is available in qemu */ + QEMU_CAPS_RTC_TD_HACK = (1LL << 32), /* -rtc-td-hack available */ + QEMU_CAPS_NO_HPET = (1LL << 33), /* -no-hpet flag is supported */ + QEMU_CAPS_NO_KVM_PIT = (1LL << 34), /* -no-kvm-pit-reinjection supported */ + QEMU_CAPS_TDF = (1LL << 35), /* -tdf flag (user-mode pit catchup) */ + QEMU_CAPS_PCI_CONFIGFD = (1LL << 36), /* pci-assign.configfd */ + QEMU_CAPS_NODEFCONFIG = (1LL << 37), /* -nodefconfig */ + QEMU_CAPS_BOOT_MENU = (1LL << 38), /* -boot menu=on support */ + QEMU_CAPS_ENABLE_KQEMU = (1LL << 39), /* -enable-kqemu flag */ + QEMU_CAPS_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */ + QEMU_CAPS_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */ + QEMU_CAPS_NAME_PROCESS = (1LL << 42), /* Is -name process= available */ + QEMU_CAPS_DRIVE_READONLY= (1LL << 43), /* -drive readonly=on|off */ + QEMU_CAPS_SMBIOS_TYPE = (1LL << 44), /* Is -smbios type= available */ + QEMU_CAPS_VGA_QXL = (1LL << 45), /* The 'qxl' arg for '-vga' */ + QEMU_CAPS_SPICE = (1LL << 46), /* Is -spice avail */ + QEMU_CAPS_VGA_NONE = (1LL << 47), /* The 'none' arg for '-vga' */ + QEMU_CAPS_MIGRATE_QEMU_FD = (1LL << 48), /* -incoming fd:n */ + QEMU_CAPS_BOOTINDEX = (1LL << 49), /* -device bootindex property */ + QEMU_CAPS_HDA_DUPLEX = (1LL << 50), /* -device hda-duplex */ + QEMU_CAPS_DRIVE_AIO = (1LL << 51), /* -drive aio= supported */ + QEMU_CAPS_PCI_MULTIBUS = (1LL << 52), /* bus=pci.0 vs bus=pci */ + QEMU_CAPS_PCI_BOOTINDEX = (1LL << 53), /* pci-assign.bootindex */ + QEMU_CAPS_CCID_EMULATED = (1LL << 54), /* -device ccid-card-emulated */ + QEMU_CAPS_CCID_PASSTHRU = (1LL << 55), /* -device ccid-card-passthru */ + QEMU_CAPS_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ + QEMU_CAPS_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ + QEMU_CAPS_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */ }; virCapsPtr qemuCapsInit(virCapsPtr old_caps); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a41859c..983ccfa 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -119,7 +119,7 @@ qemuPhysIfaceConnect(virConnectPtr conn, int vnet_hdr = 0; int err; - if (qemuCmdFlags & QEMUD_CMD_FLAG_VNET_HDR && + if (qemuCmdFlags & QEMU_CAPS_VNET_HDR && net->model && STREQ(net->model, "virtio")) vnet_hdr = 1; @@ -241,7 +241,7 @@ qemuNetworkIfaceConnect(virConnectPtr conn, template_ifname = 1; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_VNET_HDR && + if (qemuCmdFlags & QEMU_CAPS_VNET_HDR && net->model && STREQ(net->model, "virtio")) vnet_hdr = 1; @@ -319,9 +319,9 @@ qemuOpenVhostNet(virDomainNetDefPtr net, /* If qemu doesn't support vhost-net mode (including the -netdev command * option), don't try to open the device. */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_VNET_HOST && - qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV && - qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_VNET_HOST && + qemuCmdFlags & QEMU_CAPS_NETDEV && + qemuCmdFlags & QEMU_CAPS_DEVICE)) { if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is not supported with " @@ -407,7 +407,7 @@ char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, { char *ret; - if (qemudCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemudCmdFlags & QEMU_CAPS_DEVICE) { if (virAsprintf(&ret, "%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias) < 0) { virReportOOMError(); return NULL; @@ -503,8 +503,8 @@ no_memory: int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCmdFlags) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) + if (qemuCmdFlags & QEMU_CAPS_DRIVE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) return qemuAssignDeviceDiskAliasCustom(def); else return qemuAssignDeviceDiskAliasFixed(def); @@ -592,15 +592,15 @@ qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCmdFlags) if (qemuAssignDeviceDiskAlias(def->disks[i], qemuCmdFlags) < 0) return -1; } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NET_NAME) || - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NET_NAME) || + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { for (i = 0; i < def->nnets ; i++) { if (qemuAssignDeviceNetAlias(def, def->nets[i], i) < 0) return -1; } } - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) return 0; for (i = 0; i < def->nfss ; i++) { @@ -728,7 +728,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def) &qemuCmdFlags) < 0) goto cleanup; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (!(addrs = qemuDomainPCIAddressSetCreate(def))) goto cleanup; @@ -1151,7 +1151,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, * When QEMU grows support for > 1 PCI domain, then pci.0 change * to pciNN.0 where NN is the domain number */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_PCI_MULTIBUS) + if (qemuCmdFlags & QEMU_CAPS_PCI_MULTIBUS) virBufferVSprintf(buf, ",bus=pci.0,addr=0x%x", info->addr.pci.slot); else virBufferVSprintf(buf, ",bus=pci,addr=0x%x", info->addr.pci.slot); @@ -1311,7 +1311,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferVSprintf(&opt, "file=%s,", disk->src); } } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) + if (qemuCmdFlags & QEMU_CAPS_DEVICE) virBufferAddLit(&opt, "if=none"); else virBufferVSprintf(&opt, "if=%s", bus); @@ -1319,7 +1319,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) virBufferAddLit(&opt, ",media=cdrom"); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { virBufferVSprintf(&opt, ",id=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); } else { if (busid == -1 && unitid == -1) { @@ -1337,14 +1337,14 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, disk->bus != VIR_DOMAIN_DISK_BUS_IDE) virBufferAddLit(&opt, ",boot=on"); if (disk->readonly && - qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_READONLY) + qemuCmdFlags & QEMU_CAPS_DRIVE_READONLY) virBufferAddLit(&opt, ",readonly=on"); if (disk->driverType && *disk->driverType != '\0' && disk->type != VIR_DOMAIN_DISK_TYPE_DIR && - qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_FORMAT) + qemuCmdFlags & QEMU_CAPS_DRIVE_FORMAT) virBufferVSprintf(&opt, ",format=%s", disk->driverType); if (disk->serial && - (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_SERIAL)) { + (qemuCmdFlags & QEMU_CAPS_DRIVE_SERIAL)) { if (qemuSafeSerialParamValue(disk->serial) < 0) goto error; virBufferVSprintf(&opt, ",serial=%s", disk->serial); @@ -1352,7 +1352,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->cachemode) { const char *mode = - (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_CACHE_V2) ? + (qemuCmdFlags & QEMU_CAPS_DRIVE_CACHE_V2) ? qemuDiskCacheV2TypeToString(disk->cachemode) : qemuDiskCacheV1TypeToString(disk->cachemode); @@ -1361,7 +1361,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferAddLit(&opt, ",cache=off"); } - if (qemuCmdFlags & QEMUD_CMD_FLAG_MONITOR_JSON) { + if (qemuCmdFlags & QEMU_CAPS_MONITOR_JSON) { if (disk->error_policy) { virBufferVSprintf(&opt, ",werror=%s,rerror=%s", virDomainDiskErrorPolicyTypeToString(disk->error_policy), @@ -1370,7 +1370,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, } if (disk->iomode) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_AIO) { + if (qemuCmdFlags & QEMU_CAPS_DRIVE_AIO) { virBufferVSprintf(&opt, ",aio=%s", virDomainDiskIoTypeToString(disk->iomode)); } else { @@ -1436,7 +1436,7 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk, } virBufferVSprintf(&opt, ",drive=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); virBufferVSprintf(&opt, ",id=%s", disk->info.alias); - if (disk->bootIndex && (qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX)) + if (disk->bootIndex && (qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) virBufferVSprintf(&opt, ",bootindex=%d", disk->bootIndex); if (virBufferError(&opt)) { @@ -1622,7 +1622,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, virBufferAdd(&buf, nic, strlen(nic)); if (usingVirtio && net->driver.virtio.txmode) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_VIRTIO_TX_ALG) { + if (qemuCmdFlags & QEMU_CAPS_VIRTIO_TX_ALG) { virBufferAddLit(&buf, ",tx="); switch (net->driver.virtio.txmode) { case VIR_DOMAIN_NET_VIRTIO_TX_MODE_IOTHREAD: @@ -1657,7 +1657,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, net->mac[4], net->mac[5]); if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCmdFlags) < 0) goto error; - if (net->bootIndex && (qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX)) + if (net->bootIndex && (qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) virBufferVSprintf(&buf, ",bootindex=%d", net->bootIndex); if (virBufferError(&buf)) { @@ -2134,7 +2134,7 @@ qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias, break; case VIR_DOMAIN_CHR_TYPE_SPICEVMC: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV_SPICEVMC)) { + if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV_SPICEVMC)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("spicevmc not supported in this QEMU binary")); goto error; @@ -2249,7 +2249,7 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, virBuffer buf = VIR_BUFFER_INITIALIZER; if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE) virBufferAddLit(&buf, "virtconsole"); - else if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE_SPICEVMC) && + else if ((qemuCmdFlags & QEMU_CAPS_DEVICE_SPICEVMC) && dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) virBufferAddLit(&buf, "spicevmc"); else @@ -2282,7 +2282,7 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, dev->target.name); goto error; } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE_SPICEVMC) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE_SPICEVMC) && dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { virBufferVSprintf(&buf, ",id=%s", dev->info.alias); } else { @@ -2613,7 +2613,7 @@ qemuBuildSmpArgStr(const virDomainDefPtr def, virBufferVSprintf(&buf, "%u", def->vcpus); - if ((qemuCmdFlags & QEMUD_CMD_FLAG_SMP_TOPOLOGY)) { + if ((qemuCmdFlags & QEMU_CAPS_SMP_TOPOLOGY)) { if (def->vcpus != def->maxvcpus) virBufferVSprintf(&buf, ",maxcpus=%u", def->maxvcpus); /* sockets, cores, and threads are either all zero @@ -2696,26 +2696,26 @@ qemuBuildCommandLine(virConnectPtr conn, * do not use boot=on for drives when not using KVM since this * is not supported at all in upstream QEmu. */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_KVM) && + if ((qemuCmdFlags & QEMU_CAPS_KVM) && (def->virtType == VIR_DOMAIN_VIRT_QEMU) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_BOOT)) - qemuCmdFlags -= QEMUD_CMD_FLAG_DRIVE_BOOT; + (qemuCmdFlags & QEMU_CAPS_DRIVE_BOOT)) + qemuCmdFlags -= QEMU_CAPS_DRIVE_BOOT; switch (def->virtType) { case VIR_DOMAIN_VIRT_QEMU: - if (qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU) + if (qemuCmdFlags & QEMU_CAPS_KQEMU) disableKQEMU = 1; - if (qemuCmdFlags & QEMUD_CMD_FLAG_KVM) + if (qemuCmdFlags & QEMU_CAPS_KVM) disableKVM = 1; break; case VIR_DOMAIN_VIRT_KQEMU: - if (qemuCmdFlags & QEMUD_CMD_FLAG_KVM) + if (qemuCmdFlags & QEMU_CAPS_KVM) disableKVM = 1; - if (qemuCmdFlags & QEMUD_CMD_FLAG_ENABLE_KQEMU) { + if (qemuCmdFlags & QEMU_CAPS_ENABLE_KQEMU) { enableKQEMU = 1; - } else if (!(qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU)) { + } else if (!(qemuCmdFlags & QEMU_CAPS_KQEMU)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support kqemu"), emulator); @@ -2723,12 +2723,12 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_VIRT_KVM: - if (qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU) + if (qemuCmdFlags & QEMU_CAPS_KQEMU) disableKQEMU = 1; - if (qemuCmdFlags & QEMUD_CMD_FLAG_ENABLE_KVM) { + if (qemuCmdFlags & QEMU_CAPS_ENABLE_KVM) { enableKVM = 1; - } else if (!(qemuCmdFlags & QEMUD_CMD_FLAG_KVM)) { + } else if (!(qemuCmdFlags & QEMU_CAPS_KVM)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support kvm"), emulator); @@ -2765,7 +2765,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArgList(cmd, "-cpu", cpu, NULL); VIR_FREE(cpu); - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NESTING) && + if ((qemuCmdFlags & QEMU_CAPS_NESTING) && hasHwVirt) virCommandAddArg(cmd, "-enable-nesting"); } @@ -2796,7 +2796,7 @@ qemuBuildCommandLine(virConnectPtr conn, "%s", _("hugepages are disabled by administrator config")); goto error; } - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_MEM_PATH)) { + if (!(qemuCmdFlags & QEMU_CAPS_MEM_PATH)) { qemuReportError(VIR_ERR_INTERNAL_ERROR, _("hugepage backing not supported by '%s'"), def->emulator); @@ -2812,25 +2812,25 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, smp); VIR_FREE(smp); - if (qemuCmdFlags & QEMUD_CMD_FLAG_NAME) { + if (qemuCmdFlags & QEMU_CAPS_NAME) { virCommandAddArg(cmd, "-name"); if (driver->setProcessName && - (qemuCmdFlags & QEMUD_CMD_FLAG_NAME_PROCESS)) { + (qemuCmdFlags & QEMU_CAPS_NAME_PROCESS)) { virCommandAddArgFormat(cmd, "%s,process=qemu:%s", def->name, def->name); } else { virCommandAddArg(cmd, def->name); } } - if (qemuCmdFlags & QEMUD_CMD_FLAG_UUID) + if (qemuCmdFlags & QEMU_CAPS_UUID) virCommandAddArgList(cmd, "-uuid", uuid, NULL); if (def->virtType == VIR_DOMAIN_VIRT_XEN || STREQ(def->os.type, "xen") || STREQ(def->os.type, "linux")) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DOMID) { + if (qemuCmdFlags & QEMU_CAPS_DOMID) { virCommandAddArg(cmd, "-domid"); virCommandAddArgFormat(cmd, "%d", def->id); - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_XEN_DOMID) { + } else if (qemuCmdFlags & QEMU_CAPS_XEN_DOMID) { virCommandAddArg(cmd, "-xen-attach"); virCommandAddArg(cmd, "-xen-domid"); virCommandAddArgFormat(cmd, "%d", def->id); @@ -2847,7 +2847,7 @@ qemuBuildCommandLine(virConnectPtr conn, virSysinfoDefPtr source = NULL; bool skip_uuid = false; - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_SMBIOS_TYPE)) { + if (!(qemuCmdFlags & QEMU_CAPS_SMBIOS_TYPE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support smbios settings"), emulator); @@ -2900,8 +2900,8 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->graphics) virCommandAddArg(cmd, "-nographic"); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_NODEFCONFIG) + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_NODEFCONFIG) virCommandAddArg(cmd, "-nodefconfig"); /* Disable global config files */ virCommandAddArg(cmd, @@ -2911,7 +2911,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (monitor_chr) { char *chrdev; /* Use -chardev if it's available */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) { + if (qemuCmdFlags & QEMU_CAPS_CHARDEV) { virCommandAddArg(cmd, "-chardev"); if (!(chrdev = qemuBuildChrChardevStr(monitor_chr, "monitor", @@ -2937,7 +2937,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCmdFlags & QEMUD_CMD_FLAG_RTC) { + if (qemuCmdFlags & QEMU_CAPS_RTC) { const char *rtcopt; virCommandAddArg(cmd, "-rtc"); if (!(rtcopt = qemuBuildClockArgStr(&def->clock))) @@ -2979,9 +2979,9 @@ qemuBuildCommandLine(virConnectPtr conn, case VIR_DOMAIN_TIMER_NAME_RTC: /* This has already been taken care of (in qemuBuildClockArgStr) - if QEMUD_CMD_FLAG_RTC is set (mutually exclusive with + if QEMU_CAPS_RTC is set (mutually exclusive with QEMUD_FLAG_RTC_TD_HACK) */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_RTC_TD_HACK) { + if (qemuCmdFlags & QEMU_CAPS_RTC_TD_HACK) { switch (def->clock.timers[i]->tickpolicy) { case -1: case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY: @@ -2997,7 +2997,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainTimerTickpolicyTypeToString(def->clock.timers[i]->tickpolicy)); goto error; } - } else if (!(qemuCmdFlags & QEMUD_CMD_FLAG_RTC) + } else if (!(qemuCmdFlags & QEMU_CAPS_RTC) && (def->clock.timers[i]->tickpolicy != VIR_DOMAIN_TIMER_TICKPOLICY_DELAY) && (def->clock.timers[i]->tickpolicy != -1)) { @@ -3016,13 +3016,13 @@ qemuBuildCommandLine(virConnectPtr conn, case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY: /* delay is the default if we don't have kernel (-no-kvm-pit), otherwise, the default is catchup. */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_NO_KVM_PIT) + if (qemuCmdFlags & QEMU_CAPS_NO_KVM_PIT) virCommandAddArg(cmd, "-no-kvm-pit-reinjection"); break; case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP: - if (qemuCmdFlags & QEMUD_CMD_FLAG_NO_KVM_PIT) { + if (qemuCmdFlags & QEMU_CAPS_NO_KVM_PIT) { /* do nothing - this is default for kvm-pit */ - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_TDF) { + } else if (qemuCmdFlags & QEMU_CAPS_TDF) { /* -tdf switches to 'catchup' with userspace pit. */ virCommandAddArg(cmd, "-tdf"); } else { @@ -3051,7 +3051,7 @@ qemuBuildCommandLine(virConnectPtr conn, * and when -no-hpet doesn't exist is "no". "confusing"? * "yes"! */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_NO_HPET) { + if (qemuCmdFlags & QEMU_CAPS_NO_HPET) { if (def->clock.timers[i]->present == 0) virCommandAddArg(cmd, "-no-hpet"); } else { @@ -3066,7 +3066,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT) && + if ((qemuCmdFlags & QEMU_CAPS_NO_REBOOT) && def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART) virCommandAddArg(cmd, "-no-reboot"); @@ -3099,7 +3099,7 @@ qemuBuildCommandLine(virConnectPtr conn, boot[def->os.nBootDevs] = '\0'; - if (qemuCmdFlags & QEMUD_CMD_FLAG_BOOT_MENU && + if (qemuCmdFlags & QEMU_CAPS_BOOT_MENU && def->os.bootmenu != VIR_DOMAIN_BOOT_MENU_DEFAULT) { if (def->os.bootmenu == VIR_DOMAIN_BOOT_MENU_ENABLED) virBufferVSprintf(&boot_buf, "order=%s,menu=on", boot); @@ -3110,7 +3110,7 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArgBuffer(cmd, &boot_buf); - } else if (!(qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX)) { + } else if (!(qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) { /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot * configuration is used */ @@ -3141,7 +3141,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { for (i = 0 ; i < def->ncontrollers ; i++) { virDomainControllerDefPtr cont = def->controllers[i]; @@ -3171,11 +3171,11 @@ qemuBuildCommandLine(virConnectPtr conn, } /* If QEMU supports -drive param instead of old -hda, -hdb, -cdrom .. */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE) { + if (qemuCmdFlags & QEMU_CAPS_DRIVE) { int bootCD = 0, bootFloppy = 0, bootDisk = 0; /* If QEMU supports boot=on for -drive param... */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_BOOT && !def->os.kernel) { + if (qemuCmdFlags & QEMU_CAPS_DRIVE_BOOT && !def->os.kernel) { for (i = 0 ; i < def->os.nBootDevs ; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_CDROM: @@ -3201,7 +3201,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* Unless we have -device, then USB disks need special handling */ if ((disk->bus == VIR_DOMAIN_DISK_BUS_USB) && - !(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + !(qemuCmdFlags & QEMU_CAPS_DEVICE)) { if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) { virCommandAddArg(cmd, "-usbdevice"); virCommandAddArgFormat(cmd, "disk:%s", disk->src); @@ -3236,12 +3236,12 @@ qemuBuildCommandLine(virConnectPtr conn, devices. Fortunately, those don't need static PCI addresses, so we don't really care that we can't use -device */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && (disk->bus != VIR_DOMAIN_DISK_BUS_XEN)) withDeviceArg = 1; if (!(optstr = qemuBuildDriveStr(disk, bootable, (withDeviceArg ? qemuCmdFlags : - (qemuCmdFlags & ~QEMUD_CMD_FLAG_DEVICE))))) + (qemuCmdFlags & ~QEMU_CAPS_DEVICE))))) goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); @@ -3276,7 +3276,7 @@ qemuBuildCommandLine(virConnectPtr conn, disk->info.alias); if (disk->bootIndex && - (qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX)) { + (qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) { virCommandAddArg(cmd, "-global"); virCommandAddArgFormat(cmd, "isa-fdc.bootindex%c=%d", disk->info.addr.drive.unit @@ -3401,7 +3401,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (has_rbd_hosts) virCommandAddEnvBuffer(cmd, &rbd_hosts); - if (qemuCmdFlags & QEMUD_CMD_FLAG_FSDEV) { + if (qemuCmdFlags & QEMU_CAPS_FSDEV) { for (i = 0 ; i < def->nfss ; i++) { char *optstr; virDomainFSDefPtr fs = def->fss[i]; @@ -3428,7 +3428,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nnets) { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-net", "none", NULL); } else { for (i = 0 ; i < def->nnets ; i++) { @@ -3439,8 +3439,8 @@ qemuBuildCommandLine(virConnectPtr conn, int vlan; /* VLANs are not used with -netdev, so don't record them */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) vlan = -1; else vlan = i; @@ -3499,8 +3499,8 @@ qemuBuildCommandLine(virConnectPtr conn, * * NB, no support for -netdev without use of -device */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-netdev"); if (!(host = qemuBuildHostNetStr(net, ',', vlan, tapfd_name, vhostfd_name))) @@ -3508,7 +3508,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, host); VIR_FREE(host); } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { virCommandAddArg(cmd, "-device"); if (!(nic = qemuBuildNicDevStr(net, vlan, qemuCmdFlags))) goto error; @@ -3521,8 +3521,8 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, nic); VIR_FREE(nic); } - if (!((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE))) { + if (!((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE))) { virCommandAddArg(cmd, "-net"); if (!(host = qemuBuildHostNetStr(net, ',', vlan, tapfd_name, vhostfd_name))) @@ -3555,8 +3555,8 @@ qemuBuildCommandLine(virConnectPtr conn, switch (smartcard->type) { case VIR_DOMAIN_SMARTCARD_TYPE_HOST: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) || - !(qemuCmdFlags & QEMUD_CMD_FLAG_CCID_EMULATED)) { + if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || + !(qemuCmdFlags & QEMU_CAPS_CCID_EMULATED)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard host " "mode support")); @@ -3567,8 +3567,8 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) || - !(qemuCmdFlags & QEMUD_CMD_FLAG_CCID_EMULATED)) { + if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || + !(qemuCmdFlags & QEMU_CAPS_CCID_EMULATED)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard host " "mode support")); @@ -3603,8 +3603,8 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) || - !(qemuCmdFlags & QEMUD_CMD_FLAG_CCID_PASSTHRU)) { + if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || + !(qemuCmdFlags & QEMU_CAPS_CCID_PASSTHRU)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard " "passthrough mode support")); @@ -3639,7 +3639,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nserials) { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-serial", "none", NULL); } else { for (i = 0 ; i < def->nserials ; i++) { @@ -3647,8 +3647,8 @@ qemuBuildCommandLine(virConnectPtr conn, char *devstr; /* Use -chardev with -device if they are available */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_CHARDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&serial->source, serial->info.alias, @@ -3672,7 +3672,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nparallels) { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-parallel", "none", NULL); } else { for (i = 0 ; i < def->nparallels ; i++) { @@ -3680,8 +3680,8 @@ qemuBuildCommandLine(virConnectPtr conn, char *devstr; /* Use -chardev with -device if they are available */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_CHARDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(¶llel->source, parallel->info.alias, @@ -3710,8 +3710,8 @@ qemuBuildCommandLine(virConnectPtr conn, switch(channel->targetType) { case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) || - !(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || + !(qemuCmdFlags & QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("guestfwd requires QEMU to support -chardev & -device")); goto error; @@ -3739,13 +3739,13 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("virtio channel requires QEMU to support -device")); goto error; } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE_SPICEVMC) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE_SPICEVMC) && channel->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { /* spicevmc was originally introduced via a -device * with a backend internal to qemu; although we prefer @@ -3778,7 +3778,7 @@ qemuBuildCommandLine(virConnectPtr conn, switch(console->targetType) { case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO: - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_NO_SUPPORT, "%s", _("virtio channel requires QEMU to support -device")); goto error; @@ -3816,7 +3816,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainInputDefPtr input = def->inputs[i]; if (input->bus == VIR_DOMAIN_INPUT_BUS_USB) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { char *optstr; virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildUSBInputDevStr(input))) @@ -3853,7 +3853,7 @@ qemuBuildCommandLine(virConnectPtr conn, virBufferVSprintf(&opt, "unix:%s", def->graphics[0]->data.vnc.socket); - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) { + } else if (qemuCmdFlags & QEMU_CAPS_VNC_COLON) { if (def->graphics[0]->data.vnc.listenAddr) virBufferAdd(&opt, def->graphics[0]->data.vnc.listenAddr, -1); else if (driver->vncListen) @@ -3867,7 +3867,7 @@ qemuBuildCommandLine(virConnectPtr conn, def->graphics[0]->data.vnc.port - 5900); } - if (qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) { + if (qemuCmdFlags & QEMU_CAPS_VNC_COLON) { if (def->graphics[0]->data.vnc.auth.passwd || driver->vncPassword) virBufferAddLit(&opt, ",password"); @@ -3912,8 +3912,8 @@ qemuBuildCommandLine(virConnectPtr conn, } } else if ((def->ngraphics == 1) && def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { - if ((qemuCmdFlags & QEMUD_CMD_FLAG_0_10) && - !(qemuCmdFlags & QEMUD_CMD_FLAG_SDL)) { + if ((qemuCmdFlags & QEMU_CAPS_0_10) && + !(qemuCmdFlags & QEMU_CAPS_SDL)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("sdl not supported by '%s'"), def->emulator); @@ -3939,14 +3939,14 @@ qemuBuildCommandLine(virConnectPtr conn, /* New QEMU has this flag to let us explicitly ask for * SDL graphics. This is better than relying on the * default, since the default changes :-( */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_SDL) + if (qemuCmdFlags & QEMU_CAPS_SDL) virCommandAddArg(cmd, "-sdl"); } else if ((def->ngraphics == 1) && def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { virBuffer opt = VIR_BUFFER_INITIALIZER; - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_SPICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_SPICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("spice graphics are not supported with this QEMU")); goto error; @@ -4005,12 +4005,12 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->nvideos > 0) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_VGA) { + if (qemuCmdFlags & QEMU_CAPS_VGA) { if (def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_XEN) { /* nothing - vga has no effect on Xen pvfb */ } else { if ((def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_QXL) && - !(qemuCmdFlags & QEMUD_CMD_FLAG_VGA_QXL)) { + !(qemuCmdFlags & QEMU_CAPS_VGA_QXL)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU does not support QXL graphics adapters")); goto error; @@ -4051,7 +4051,7 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->nvideos > 1) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { for (i = 1 ; i < def->nvideos ; i++) { char *str; if (def->videos[i]->type != VIR_DOMAIN_VIDEO_TYPE_QXL) { @@ -4078,15 +4078,15 @@ qemuBuildCommandLine(virConnectPtr conn, } else { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && - (qemuCmdFlags & QEMUD_CMD_FLAG_VGA) && - (qemuCmdFlags & QEMUD_CMD_FLAG_VGA_NONE)) + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE) && + (qemuCmdFlags & QEMU_CAPS_VGA) && + (qemuCmdFlags & QEMU_CAPS_VGA_NONE)) virCommandAddArgList(cmd, "-vga", "none", NULL); } /* Add sound hardware */ if (def->nsounds) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { for (i = 0 ; i < def->nsounds ; i++) { virDomainSoundDefPtr sound = def->sounds[i]; char *str = NULL; @@ -4105,7 +4105,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (sound->model == VIR_DOMAIN_SOUND_MODEL_ICH6) { char *codecstr = NULL; - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_HDA_DUPLEX)) { + if (!(qemuCmdFlags & QEMU_CAPS_HDA_DUPLEX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks hda support")); goto error; @@ -4161,7 +4161,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainWatchdogDefPtr watchdog = def->watchdog; char *optstr; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { virCommandAddArg(cmd, "-device"); optstr = qemuBuildWatchdogDevStr(watchdog, qemuCmdFlags); @@ -4207,7 +4207,7 @@ qemuBuildCommandLine(virConnectPtr conn, _("booting from assigned devices is only" " supported for PCI devices")); goto error; - } else if (!(qemuCmdFlags & QEMUD_CMD_FLAG_PCI_BOOTINDEX)) { + } else if (!(qemuCmdFlags & QEMU_CAPS_PCI_BOOTINDEX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("booting from assigned PCI devices is not" " supported with this version of qemu")); @@ -4219,7 +4219,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildUSBHostdevDevStr(hostdev))) goto error; @@ -4237,9 +4237,9 @@ qemuBuildCommandLine(virConnectPtr conn, /* PCI */ if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { char *configfd_name = NULL; - if (qemuCmdFlags & QEMUD_CMD_FLAG_PCI_CONFIGFD) { + if (qemuCmdFlags & QEMU_CAPS_PCI_CONFIGFD) { int configfd = qemuOpenPCIConfig(hostdev); if (configfd >= 0) { @@ -4258,7 +4258,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_PCIDEVICE) { + } else if (qemuCmdFlags & QEMU_CAPS_PCIDEVICE) { virCommandAddArg(cmd, "-pcidevice"); if (!(devstr = qemuBuildPCIHostdevPCIDevStr(hostdev))) goto error; @@ -4278,7 +4278,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (migrateFrom) { virCommandAddArg(cmd, "-incoming"); if (STRPREFIX(migrateFrom, "tcp")) { - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP)) { + if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_TCP)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("TCP migration is not supported with " "this QEMU binary")); @@ -4286,13 +4286,13 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, migrateFrom); } else if (STREQ(migrateFrom, "stdio")) { - if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_FD) { + if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_FD) { virCommandAddArgFormat(cmd, "fd:%d", migrateFd); virCommandPreserveFD(cmd, migrateFd); - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) { + } else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC) { virCommandAddArg(cmd, "exec:cat"); virCommandSetInputFD(cmd, migrateFd); - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO) { + } else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_KVM_STDIO) { virCommandAddArg(cmd, migrateFrom); virCommandSetInputFD(cmd, migrateFd); } else { @@ -4302,7 +4302,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; } } else if (STRPREFIX(migrateFrom, "exec")) { - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC)) { + if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("EXEC migration is not supported " "with this QEMU binary")); @@ -4310,7 +4310,7 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, migrateFrom); } else if (STRPREFIX(migrateFrom, "fd")) { - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_FD)) { + if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_FD)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("FD migration is not supported " "with this QEMU binary")); @@ -4319,7 +4319,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, migrateFrom); virCommandPreserveFD(cmd, migrateFd); } else if (STRPREFIX(migrateFrom, "unix")) { - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX)) { + if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("UNIX migration is not supported " "with this QEMU binary")); @@ -4347,7 +4347,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainMemballoonModelTypeToString(def->memballoon->model)); goto error; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { char *optstr; virCommandAddArg(cmd, "-device"); @@ -4356,7 +4356,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); - } else if (qemuCmdFlags & QEMUD_CMD_FLAG_BALLOON) { + } else if (qemuCmdFlags & QEMU_CAPS_BALLOON) { virCommandAddArgList(cmd, "-balloon", "virtio", NULL); } } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 2c8bc3b..499880b 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -160,7 +160,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, vm, disk) < 0) return -1; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0) goto error; if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) @@ -179,7 +179,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -219,7 +219,7 @@ error: VIR_FREE(devstr); VIR_FREE(drivestr); - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &disk->info) < 0) VIR_WARN("Unable to release PCI address on %s", disk->src); @@ -253,7 +253,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, } } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0) goto cleanup; if (qemuAssignDeviceControllerAlias(controller) < 0) @@ -270,7 +270,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { ret = qemuMonitorAddDevice(priv->mon, devstr); } else { ret = qemuMonitorAttachPCIDiskController(priv->mon, @@ -286,7 +286,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, cleanup: if ((ret != 0) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + (qemuCmdFlags & QEMU_CAPS_DEVICE) && (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &controller->info) < 0) VIR_WARN0("Unable to release PCI address on controller"); @@ -376,7 +376,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, goto error; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) goto error; if (!(devstr = qemuBuildDriveDevStr(disk, qemuCmdFlags))) @@ -409,7 +409,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -487,7 +487,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, goto error; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) goto error; if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags))) @@ -502,7 +502,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -558,7 +558,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, virDomainDevicePCIAddress guestAddr; int vlan; - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_HOST_NET_ADD)) { + if (!(qemuCmdFlags & QEMU_CAPS_HOST_NET_ADD)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("installed qemu version does not support host_net_add")); return -1; @@ -595,18 +595,18 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets+1) < 0) goto no_memory; - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NET_NAME) || - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NET_NAME) || + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0) goto cleanup; } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &net->info) < 0) goto cleanup; - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { vlan = -1; } else { vlan = qemuDomainNetVLAN(net); @@ -637,8 +637,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } /* FIXME - need to support vhost-net here (5th arg) */ - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { if (!(netstr = qemuBuildHostNetStr(net, ',', -1, tapfd_name, 0))) goto try_tapfd_close; @@ -649,8 +649,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { if (qemuMonitorAddNetdev(priv->mon, netstr) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, NULL, net, "attach", false); @@ -673,7 +673,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, goto cleanup; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (!(nicstr = qemuBuildNicDevStr(net, vlan, qemuCmdFlags))) goto try_remove; } else { @@ -682,7 +682,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, NULL, net, "attach", false); @@ -708,7 +708,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, cleanup: if ((ret != 0) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + (qemuCmdFlags & QEMU_CAPS_DEVICE) && (net->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &net->info) < 0) VIR_WARN0("Unable to release PCI address on NIC"); @@ -728,8 +728,8 @@ try_remove: goto cleanup; if (vlan < 0) { - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { char *netdev_name; if (virAsprintf(&netdev_name, "host%s", net->info.alias) < 0) goto no_memory; @@ -793,12 +793,12 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, if (qemuPrepareHostdevPCIDevices(driver, &hostdev, 1) < 0) return -1; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) goto error; if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &hostdev->info) < 0) goto error; - if (qemuCmdFlags & QEMUD_CMD_FLAG_PCI_CONFIGFD) { + if (qemuCmdFlags & QEMU_CAPS_PCI_CONFIGFD) { configfd = qemuOpenPCIConfig(hostdev); if (configfd >= 0) { if (virAsprintf(&configfd_name, "fd-%s", @@ -854,7 +854,7 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, return 0; error: - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && (hostdev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &hostdev->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); @@ -878,7 +878,7 @@ int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, qemuDomainObjPrivatePtr priv = vm->privateData; char *devstr = NULL; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) goto error; if (!(devstr = qemuBuildUSBHostdevDevStr(hostdev))) @@ -910,7 +910,7 @@ int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) + if (qemuCmdFlags & QEMU_CAPS_DEVICE) ret = qemuMonitorAddDevice(priv->mon, devstr); else ret = qemuMonitorAddUSBDeviceExact(priv->mon, @@ -1173,7 +1173,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); goto cleanup; @@ -1193,7 +1193,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, qemuDomainDiskAudit(vm, detach, NULL, "detach", ret >= 0); - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN("Unable to release PCI address on %s", dev->data.disk->src); @@ -1237,7 +1237,7 @@ int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, goto cleanup; } - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Underlying qemu does not support SCSI disk removal")); goto cleanup; @@ -1385,13 +1385,13 @@ int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, goto cleanup; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuAssignDeviceControllerAlias(detach) < 0) goto cleanup; } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { qemuDomainObjExitMonitor(vm); goto cleanup; @@ -1419,7 +1419,7 @@ int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, vm->def->ncontrollers = 0; } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on controller"); @@ -1479,7 +1479,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); qemuDomainNetAudit(vm, detach, NULL, "detach", false); @@ -1494,8 +1494,8 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, } } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_NETDEV) && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { if (qemuMonitorRemoveNetdev(priv->mon, hostnet_name) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, detach, NULL, "detach", false); @@ -1512,7 +1512,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, qemuDomainNetAudit(vm, detach, NULL, "detach", true); - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on NIC"); @@ -1605,7 +1605,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); return -1; @@ -1636,7 +1636,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, pciFreeDevice(pci); } - if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) && + if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); @@ -1707,7 +1707,7 @@ int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, return -1; } - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("device cannot be detached with this QEMU version")); return -1; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 84bf36a..569723b 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -304,9 +304,9 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver, vm->def->emulator); goto endjob; } - if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX) + if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX) internalret = virAsprintf(&migrateFrom, "unix:%s", unixfile); - else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) + else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC) internalret = virAsprintf(&migrateFrom, "exec:nc -U -l %s", unixfile); else { qemuReportError(VIR_ERR_OPERATION_FAILED, @@ -777,8 +777,8 @@ static int doTunnelMigrate(struct qemud_driver *driver, goto cleanup; } - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX) && - !(qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC)) { + if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX) && + !(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Source qemu is too old to support tunnelled migration")); goto cleanup; @@ -820,11 +820,11 @@ static int doTunnelMigrate(struct qemud_driver *driver, background_flags |= QEMU_MONITOR_MIGRATE_NON_SHARED_DISK; if (flags & VIR_MIGRATE_NON_SHARED_INC) background_flags |= QEMU_MONITOR_MIGRATE_NON_SHARED_INC; - if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX){ + if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX){ internalret = qemuMonitorMigrateToUnix(priv->mon, background_flags, unixfile); } - else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) { + else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC) { const char *args[] = { "nc", "-U", unixfile, NULL }; internalret = qemuMonitorMigrateToCommand(priv->mon, QEMU_MONITOR_MIGRATE_BACKGROUND, args); } else { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 9c5ea63..0cb717d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1159,7 +1159,7 @@ qemuProcessInitPasswords(virConnectPtr conn, if (ret < 0) goto cleanup; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { int i; for (i = 0 ; i < vm->def->ndisks ; i++) { @@ -1816,7 +1816,7 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa if (qemuCapsExtractVersionInfo(obj->def->emulator, obj->def->os.arch, NULL, &qemuCmdFlags) >= 0 && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { priv->persistentAddrs = 1; if (!(priv->pciaddrs = qemuDomainPCIAddressSetCreate(obj->def)) || @@ -2027,7 +2027,7 @@ int qemuProcessStart(virConnectPtr conn, goto cleanup; #if HAVE_YAJL - if (qemuCmdFlags & QEMUD_CMD_FLAG_MONITOR_JSON) + if (qemuCmdFlags & QEMU_CAPS_MONITOR_JSON) priv->monJSON = 1; else #endif @@ -2056,7 +2056,7 @@ int qemuProcessStart(virConnectPtr conn, * we also need to populate the PCi address set cache for later * use in hotplug */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { VIR_DEBUG0("Assigning domain PCI addresses"); /* Populate cache with current addresses */ if (priv->pciaddrs) { @@ -2190,7 +2190,7 @@ int qemuProcessStart(virConnectPtr conn, /* If we have -device, then addresses are assigned explicitly. * If not, then we have to detect dynamic ones here */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { VIR_DEBUG0("Determining domain device PCI addresses"); if (qemuProcessInitPCIAddresses(driver, vm) < 0) goto cleanup; diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c index 7499ba0..74bc763 100644 --- a/tests/qemuargv2xmltest.c +++ b/tests/qemuargv2xmltest.c @@ -145,7 +145,7 @@ mymain(int argc, char **argv) unsetenv("LD_LIBRARY_PATH"); /* Can't roundtrip vcpu cpuset attribute */ - /*DO_TEST("minimal", QEMUD_CMD_FLAG_NAME);*/ + /*DO_TEST("minimal", QEMU_CAPS_NAME);*/ DO_TEST("boot-cdrom"); DO_TEST("boot-network"); DO_TEST("boot-floppy"); diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c index 11890ab..11f1a67 100644 --- a/tests/qemuhelptest.c +++ b/tests/qemuhelptest.c @@ -57,7 +57,7 @@ static int testHelpStrParsing(const void *data) &version, &is_kvm, &kvm_version) == -1) goto cleanup; - if (info->flags & QEMUD_CMD_FLAG_DEVICE) { + if (info->flags & QEMU_CAPS_DEVICE) { VIR_FREE(path); if (virAsprintf(&path, "%s/qemuhelpdata/%s-device", abs_srcdir, info->name) < 0) @@ -133,355 +133,355 @@ mymain(int argc, char **argv) } while (0) DO_TEST("qemu-0.9.1", - QEMUD_CMD_FLAG_KQEMU | - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_NAME, + QEMU_CAPS_KQEMU | + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_NAME, 9001, 0, 0); DO_TEST("kvm-74", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_TDF, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_KVM_STDIO | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_TDF, 9001, 1, 74); DO_TEST("kvm-83-rhel56", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_RTC_TD_HACK | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_DRIVE_READONLY | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_SPICE, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_VGA | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_BALLOON | + QEMU_CAPS_RTC_TD_HACK | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_DRIVE_READONLY | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_SPICE, 9001, 1, 83); DO_TEST("qemu-0.10.5", - QEMUD_CMD_FLAG_KQEMU | - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_ENABLE_KVM | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_RTC_TD_HACK | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_VGA_NONE, + QEMU_CAPS_KQEMU | + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_ENABLE_KVM | + QEMU_CAPS_SDL | + QEMU_CAPS_RTC_TD_HACK | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_VGA_NONE, 10005, 0, 0); DO_TEST("qemu-kvm-0.10.5", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_RTC_TD_HACK | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_VGA_NONE, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_SDL | + QEMU_CAPS_RTC_TD_HACK | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_NESTING | + QEMU_CAPS_VGA_NONE, 10005, 1, 0); DO_TEST("kvm-86", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_RTC_TD_HACK | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_VGA_NONE, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_SDL | + QEMU_CAPS_RTC_TD_HACK | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_NESTING | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_VGA_NONE, 10050, 1, 0); DO_TEST("qemu-kvm-0.11.0-rc2", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_ENABLE_KVM | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_RTC_TD_HACK | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_BOOT_MENU | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_NAME_PROCESS | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_VGA_NONE, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_ENABLE_KVM | + QEMU_CAPS_BALLOON | + QEMU_CAPS_SDL | + QEMU_CAPS_RTC_TD_HACK | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_BOOT_MENU | + QEMU_CAPS_NESTING | + QEMU_CAPS_NAME_PROCESS | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_VGA_NONE, 10092, 1, 0); DO_TEST("qemu-0.12.1", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_DRIVE_READONLY | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_ENABLE_KVM | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_XEN_DOMID | - QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX | - QEMUD_CMD_FLAG_CHARDEV | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_SMP_TOPOLOGY | - QEMUD_CMD_FLAG_RTC | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_BOOT_MENU | - QEMUD_CMD_FLAG_NAME_PROCESS | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_VGA_NONE | - QEMUD_CMD_FLAG_MIGRATE_QEMU_FD | - QEMUD_CMD_FLAG_DRIVE_AIO, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_DRIVE_READONLY | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_ENABLE_KVM | + QEMU_CAPS_SDL | + QEMU_CAPS_XEN_DOMID | + QEMU_CAPS_MIGRATE_QEMU_UNIX | + QEMU_CAPS_CHARDEV | + QEMU_CAPS_BALLOON | + QEMU_CAPS_DEVICE | + QEMU_CAPS_SMP_TOPOLOGY | + QEMU_CAPS_RTC | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_BOOT_MENU | + QEMU_CAPS_NAME_PROCESS | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_VGA_NONE | + QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_DRIVE_AIO, 12001, 0, 0); DO_TEST("qemu-kvm-0.12.1.2-rhel60", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_DRIVE_READONLY | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX | - QEMUD_CMD_FLAG_CHARDEV | - QEMUD_CMD_FLAG_ENABLE_KVM | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_SMP_TOPOLOGY | - QEMUD_CMD_FLAG_RTC | - QEMUD_CMD_FLAG_VNET_HOST | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_PCI_CONFIGFD | - QEMUD_CMD_FLAG_NODEFCONFIG | - QEMUD_CMD_FLAG_BOOT_MENU | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_NAME_PROCESS | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_VGA_QXL | - QEMUD_CMD_FLAG_SPICE | - QEMUD_CMD_FLAG_VGA_NONE | - QEMUD_CMD_FLAG_MIGRATE_QEMU_FD | - QEMUD_CMD_FLAG_DRIVE_AIO | - QEMUD_CMD_FLAG_DEVICE_SPICEVMC, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_DRIVE_READONLY | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_MIGRATE_QEMU_UNIX | + QEMU_CAPS_CHARDEV | + QEMU_CAPS_ENABLE_KVM | + QEMU_CAPS_BALLOON | + QEMU_CAPS_DEVICE | + QEMU_CAPS_SMP_TOPOLOGY | + QEMU_CAPS_RTC | + QEMU_CAPS_VNET_HOST | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_PCI_CONFIGFD | + QEMU_CAPS_NODEFCONFIG | + QEMU_CAPS_BOOT_MENU | + QEMU_CAPS_NESTING | + QEMU_CAPS_NAME_PROCESS | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_VGA_QXL | + QEMU_CAPS_SPICE | + QEMU_CAPS_VGA_NONE | + QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_DRIVE_AIO | + QEMU_CAPS_DEVICE_SPICEVMC, 12001, 1, 0); DO_TEST("qemu-kvm-0.12.3", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_DRIVE_READONLY | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX | - QEMUD_CMD_FLAG_CHARDEV | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_SMP_TOPOLOGY | - QEMUD_CMD_FLAG_RTC | - QEMUD_CMD_FLAG_VNET_HOST | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_BOOT_MENU | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_NAME_PROCESS | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_VGA_NONE | - QEMUD_CMD_FLAG_MIGRATE_QEMU_FD | - QEMUD_CMD_FLAG_DRIVE_AIO, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_DRIVE_READONLY | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_SDL | + QEMU_CAPS_MIGRATE_QEMU_UNIX | + QEMU_CAPS_CHARDEV | + QEMU_CAPS_BALLOON | + QEMU_CAPS_DEVICE | + QEMU_CAPS_SMP_TOPOLOGY | + QEMU_CAPS_RTC | + QEMU_CAPS_VNET_HOST | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_BOOT_MENU | + QEMU_CAPS_NESTING | + QEMU_CAPS_NAME_PROCESS | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_VGA_NONE | + QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_DRIVE_AIO, 12003, 1, 0); DO_TEST("qemu-kvm-0.13.0", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_XEN_DOMID | - QEMUD_CMD_FLAG_DRIVE_READONLY | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_SDL | - QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX | - QEMUD_CMD_FLAG_CHARDEV | - QEMUD_CMD_FLAG_ENABLE_KVM | - QEMUD_CMD_FLAG_MONITOR_JSON | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_SMP_TOPOLOGY | - QEMUD_CMD_FLAG_NETDEV | - QEMUD_CMD_FLAG_RTC | - QEMUD_CMD_FLAG_VNET_HOST | - QEMUD_CMD_FLAG_NO_HPET | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_PCI_CONFIGFD | - QEMUD_CMD_FLAG_NODEFCONFIG | - QEMUD_CMD_FLAG_BOOT_MENU | - QEMUD_CMD_FLAG_FSDEV | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_NAME_PROCESS | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_SPICE | - QEMUD_CMD_FLAG_VGA_NONE | - QEMUD_CMD_FLAG_MIGRATE_QEMU_FD | - QEMUD_CMD_FLAG_DRIVE_AIO | - QEMUD_CMD_FLAG_DEVICE_SPICEVMC, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_XEN_DOMID | + QEMU_CAPS_DRIVE_READONLY | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_SDL | + QEMU_CAPS_MIGRATE_QEMU_UNIX | + QEMU_CAPS_CHARDEV | + QEMU_CAPS_ENABLE_KVM | + QEMU_CAPS_MONITOR_JSON | + QEMU_CAPS_BALLOON | + QEMU_CAPS_DEVICE | + QEMU_CAPS_SMP_TOPOLOGY | + QEMU_CAPS_NETDEV | + QEMU_CAPS_RTC | + QEMU_CAPS_VNET_HOST | + QEMU_CAPS_NO_HPET | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_PCI_CONFIGFD | + QEMU_CAPS_NODEFCONFIG | + QEMU_CAPS_BOOT_MENU | + QEMU_CAPS_FSDEV | + QEMU_CAPS_NESTING | + QEMU_CAPS_NAME_PROCESS | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_SPICE | + QEMU_CAPS_VGA_NONE | + QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_DRIVE_AIO | + QEMU_CAPS_DEVICE_SPICEVMC, 13000, 1, 0); DO_TEST("qemu-kvm-0.12.1.2-rhel61", - QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | - QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID | - QEMUD_CMD_FLAG_VNET_HDR | - QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP | - QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | - QEMUD_CMD_FLAG_KVM | - QEMUD_CMD_FLAG_DRIVE_FORMAT | - QEMUD_CMD_FLAG_DRIVE_SERIAL | - QEMUD_CMD_FLAG_DRIVE_READONLY | - QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_0_10 | - QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_MEM_PATH | - QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX | - QEMUD_CMD_FLAG_CHARDEV | - QEMUD_CMD_FLAG_ENABLE_KVM | - QEMUD_CMD_FLAG_BALLOON | - QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_SMP_TOPOLOGY | - QEMUD_CMD_FLAG_RTC | - QEMUD_CMD_FLAG_VNET_HOST | - QEMUD_CMD_FLAG_NO_KVM_PIT | - QEMUD_CMD_FLAG_TDF | - QEMUD_CMD_FLAG_PCI_CONFIGFD | - QEMUD_CMD_FLAG_NODEFCONFIG | - QEMUD_CMD_FLAG_BOOT_MENU | - QEMUD_CMD_FLAG_NESTING | - QEMUD_CMD_FLAG_NAME_PROCESS | - QEMUD_CMD_FLAG_SMBIOS_TYPE | - QEMUD_CMD_FLAG_VGA_QXL | - QEMUD_CMD_FLAG_SPICE | - QEMUD_CMD_FLAG_VGA_NONE | - QEMUD_CMD_FLAG_MIGRATE_QEMU_FD | - QEMUD_CMD_FLAG_HDA_DUPLEX | - QEMUD_CMD_FLAG_DRIVE_AIO | - QEMUD_CMD_FLAG_CCID_PASSTHRU | - QEMUD_CMD_FLAG_CHARDEV_SPICEVMC | - QEMUD_CMD_FLAG_VIRTIO_TX_ALG, + QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | + QEMU_CAPS_DRIVE | + QEMU_CAPS_NAME | + QEMU_CAPS_UUID | + QEMU_CAPS_VNET_HDR | + QEMU_CAPS_MIGRATE_QEMU_TCP | + QEMU_CAPS_MIGRATE_QEMU_EXEC | + QEMU_CAPS_DRIVE_CACHE_V2 | + QEMU_CAPS_KVM | + QEMU_CAPS_DRIVE_FORMAT | + QEMU_CAPS_DRIVE_SERIAL | + QEMU_CAPS_DRIVE_READONLY | + QEMU_CAPS_VGA | + QEMU_CAPS_0_10 | + QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_MEM_PATH | + QEMU_CAPS_MIGRATE_QEMU_UNIX | + QEMU_CAPS_CHARDEV | + QEMU_CAPS_ENABLE_KVM | + QEMU_CAPS_BALLOON | + QEMU_CAPS_DEVICE | + QEMU_CAPS_SMP_TOPOLOGY | + QEMU_CAPS_RTC | + QEMU_CAPS_VNET_HOST | + QEMU_CAPS_NO_KVM_PIT | + QEMU_CAPS_TDF | + QEMU_CAPS_PCI_CONFIGFD | + QEMU_CAPS_NODEFCONFIG | + QEMU_CAPS_BOOT_MENU | + QEMU_CAPS_NESTING | + QEMU_CAPS_NAME_PROCESS | + QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_VGA_QXL | + QEMU_CAPS_SPICE | + QEMU_CAPS_VGA_NONE | + QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_HDA_DUPLEX | + QEMU_CAPS_DRIVE_AIO | + QEMU_CAPS_CCID_PASSTHRU | + QEMU_CAPS_CHARDEV_SPICEVMC | + QEMU_CAPS_VIRTIO_TX_ALG, 12001, 1, 0); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4817d51..2f9e80c 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -79,7 +79,7 @@ static int testCompareXMLToArgvFiles(const char *xml, goto fail; } - if (extraFlags & QEMUD_CMD_FLAG_DOMID) + if (extraFlags & QEMU_CAPS_DOMID) vmdef->id = 6; else vmdef->id = -1; @@ -89,14 +89,14 @@ static int testCompareXMLToArgvFiles(const char *xml, monitor_chr.data.nix.path = (char *)"/tmp/test-monitor"; monitor_chr.data.nix.listen = true; - flags = QEMUD_CMD_FLAG_VNC_COLON | - QEMUD_CMD_FLAG_NO_REBOOT | + flags = QEMU_CAPS_VNC_COLON | + QEMU_CAPS_NO_REBOOT | extraFlags; if (qemudCanonicalizeMachine(&driver, vmdef) < 0) goto fail; - if (flags & QEMUD_CMD_FLAG_DEVICE) { + if (flags & QEMU_CAPS_DEVICE) { qemuDomainPCIAddressSetPtr pciaddrs; if (!(pciaddrs = qemuDomainPCIAddressSetCreate(vmdef))) goto fail; @@ -112,12 +112,12 @@ static int testCompareXMLToArgvFiles(const char *xml, virResetLastError(); /* We do not call qemuCapsExtractVersionInfo() before calling - * qemuBuildCommandLine(), so we should set QEMUD_CMD_FLAG_PCI_MULTIBUS for + * qemuBuildCommandLine(), so we should set QEMU_CAPS_PCI_MULTIBUS for * x86_64 and i686 architectures here. */ if (STREQLEN(vmdef->os.arch, "x86_64", 6) || STREQLEN(vmdef->os.arch, "i686", 4)) { - flags |= QEMUD_CMD_FLAG_PCI_MULTIBUS; + flags |= QEMU_CAPS_PCI_MULTIBUS; } if (!(cmd = qemuBuildCommandLine(conn, &driver, @@ -256,87 +256,87 @@ mymain(int argc, char **argv) unsetenv("QEMU_AUDIO_DRV"); unsetenv("SDL_AUDIODRIVER"); - DO_TEST("minimal", QEMUD_CMD_FLAG_NAME, false); + DO_TEST("minimal", QEMU_CAPS_NAME, false); DO_TEST("machine-aliases1", 0, false); DO_TEST("machine-aliases2", 0, true); DO_TEST("boot-cdrom", 0, false); DO_TEST("boot-network", 0, false); DO_TEST("boot-floppy", 0, false); - DO_TEST("boot-multi", QEMUD_CMD_FLAG_BOOT_MENU, false); - DO_TEST("boot-menu-disable", QEMUD_CMD_FLAG_BOOT_MENU, false); - DO_TEST("boot-order", QEMUD_CMD_FLAG_BOOTINDEX | - QEMUD_CMD_FLAG_DRIVE | QEMUD_CMD_FLAG_DEVICE, false); - DO_TEST("bootloader", QEMUD_CMD_FLAG_DOMID, true); + DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU, false); + DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU, false); + DO_TEST("boot-order", QEMU_CAPS_BOOTINDEX | + QEMU_CAPS_DRIVE | QEMU_CAPS_DEVICE, false); + DO_TEST("bootloader", QEMU_CAPS_DOMID, true); DO_TEST("clock-utc", 0, false); DO_TEST("clock-localtime", 0, false); /* * Can't be enabled since the absolute timestamp changes every time - DO_TEST("clock-variable", QEMUD_CMD_FLAG_RTC, false); + DO_TEST("clock-variable", QEMU_CAPS_RTC, false); */ - DO_TEST("clock-france", QEMUD_CMD_FLAG_RTC, false); + DO_TEST("clock-france", QEMU_CAPS_RTC, false); - DO_TEST("hugepages", QEMUD_CMD_FLAG_MEM_PATH, false); + DO_TEST("hugepages", QEMU_CAPS_MEM_PATH, false); DO_TEST("disk-cdrom", 0, false); - DO_TEST("disk-cdrom-empty", QEMUD_CMD_FLAG_DRIVE, false); + DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE, false); DO_TEST("disk-floppy", 0, false); DO_TEST("disk-many", 0, false); - DO_TEST("disk-virtio", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT, false); - DO_TEST("disk-xenvbd", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT, false); - DO_TEST("disk-drive-boot-disk", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT, false); - DO_TEST("disk-drive-boot-cdrom", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT, false); - DO_TEST("floppy-drive-fat", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-fat", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-readonly-disk", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("disk-drive-readonly-no-device", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_READONLY | QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("disk-drive-fmt-qcow", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_BOOT | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-shared", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT | QEMUD_CMD_FLAG_DRIVE_SERIAL, false); - DO_TEST("disk-drive-cache-v1-wt", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v1-wb", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v1-none", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-error-policy-stop", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_MONITOR_JSON | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v2-wt", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v2-wb", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v2-none", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-network-nbd", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-network-rbd", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); - DO_TEST("disk-drive-network-sheepdog", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DRIVE_FORMAT, false); + DO_TEST("disk-virtio", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT, false); + DO_TEST("disk-xenvbd", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT, false); + DO_TEST("disk-drive-boot-disk", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT, false); + DO_TEST("disk-drive-boot-cdrom", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT, false); + DO_TEST("floppy-drive-fat", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-fat", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-readonly-disk", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("disk-drive-readonly-no-device", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("disk-drive-fmt-qcow", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-shared", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT | QEMU_CAPS_DRIVE_SERIAL, false); + DO_TEST("disk-drive-cache-v1-wt", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-cache-v1-wb", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-cache-v1-none", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-error-policy-stop", QEMU_CAPS_DRIVE | + QEMU_CAPS_MONITOR_JSON | + QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-cache-v2-wt", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-cache-v2-wb", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-cache-v2-none", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-network-nbd", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-network-rbd", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT, false); + DO_TEST("disk-drive-network-sheepdog", QEMU_CAPS_DRIVE | + QEMU_CAPS_DRIVE_FORMAT, false); DO_TEST("disk-usb", 0, false); - DO_TEST("disk-usb-device", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("disk-scsi-device", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("disk-scsi-device-auto", QEMUD_CMD_FLAG_DRIVE | - QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("disk-aio", QEMUD_CMD_FLAG_DRIVE | QEMUD_CMD_FLAG_DRIVE_AIO | - QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); + DO_TEST("disk-usb-device", QEMU_CAPS_DRIVE | + QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("disk-scsi-device", QEMU_CAPS_DRIVE | + QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("disk-scsi-device-auto", QEMU_CAPS_DRIVE | + QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("disk-aio", QEMU_CAPS_DRIVE | QEMU_CAPS_DRIVE_AIO | + QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); DO_TEST("graphics-vnc", 0, false); DO_TEST("graphics-vnc-socket", 0, false); driver.vncSASL = 1; driver.vncSASLdir = strdup("/root/.sasl2"); - DO_TEST("graphics-vnc-sasl", QEMUD_CMD_FLAG_VGA, false); + DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VGA, false); driver.vncTLS = 1; driver.vncTLSx509verify = 1; driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu"); @@ -348,29 +348,29 @@ mymain(int argc, char **argv) DO_TEST("graphics-sdl", 0, false); DO_TEST("graphics-sdl-fullscreen", 0, false); - DO_TEST("nographics", QEMUD_CMD_FLAG_VGA, false); - DO_TEST("nographics-vga", QEMUD_CMD_FLAG_VGA | - QEMUD_CMD_FLAG_VGA_NONE, false); + DO_TEST("nographics", QEMU_CAPS_VGA, false); + DO_TEST("nographics-vga", QEMU_CAPS_VGA | + QEMU_CAPS_VGA_NONE, false); DO_TEST("graphics-spice", - QEMUD_CMD_FLAG_VGA | QEMUD_CMD_FLAG_VGA_QXL | - QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_SPICE, false); + QEMU_CAPS_VGA | QEMU_CAPS_VGA_QXL | + QEMU_CAPS_DEVICE | QEMU_CAPS_SPICE, false); DO_TEST("input-usbmouse", 0, false); DO_TEST("input-usbtablet", 0, false); - DO_TEST("input-xen", QEMUD_CMD_FLAG_DOMID, true); + DO_TEST("input-xen", QEMU_CAPS_DOMID, true); DO_TEST("misc-acpi", 0, false); DO_TEST("misc-no-reboot", 0, false); - DO_TEST("misc-uuid", QEMUD_CMD_FLAG_NAME | - QEMUD_CMD_FLAG_UUID, false); + DO_TEST("misc-uuid", QEMU_CAPS_NAME | + QEMU_CAPS_UUID, false); DO_TEST("net-user", 0, false); DO_TEST("net-virtio", 0, false); - DO_TEST("net-virtio-device", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_VIRTIO_TX_ALG, false); - DO_TEST("net-virtio-netdev", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NETDEV | QEMUD_CMD_FLAG_NODEFCONFIG, false); + DO_TEST("net-virtio-device", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_VIRTIO_TX_ALG, false); + DO_TEST("net-virtio-netdev", QEMU_CAPS_DEVICE | + QEMU_CAPS_NETDEV | QEMU_CAPS_NODEFCONFIG, false); DO_TEST("net-eth", 0, false); DO_TEST("net-eth-ifname", 0, false); - DO_TEST("net-eth-names", QEMUD_CMD_FLAG_NET_NAME, false); + DO_TEST("net-eth-names", QEMU_CAPS_NET_NAME, false); DO_TEST("serial-vc", 0, false); DO_TEST("serial-pty", 0, false); @@ -385,103 +385,103 @@ mymain(int argc, char **argv) DO_TEST("console-compat", 0, false); DO_TEST("console-compat-auto", 0, false); - DO_TEST("serial-vc-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-pty-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-dev-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-file-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-unix-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-tcp-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-udp-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-tcp-telnet-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("serial-many-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("parallel-tcp-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("console-compat-chardev", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - - DO_TEST("channel-guestfwd", QEMUD_CMD_FLAG_CHARDEV|QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("channel-virtio", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("channel-virtio-auto", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("console-virtio", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("channel-spicevmc", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_SPICE | - QEMUD_CMD_FLAG_CHARDEV_SPICEVMC, false); - DO_TEST("channel-spicevmc-old", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_SPICE | - QEMUD_CMD_FLAG_DEVICE_SPICEVMC, false); + DO_TEST("serial-vc-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-pty-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-dev-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-file-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-unix-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-udp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-tcp-telnet-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("serial-many-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("parallel-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("console-compat-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + + DO_TEST("channel-guestfwd", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("channel-virtio", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("channel-virtio-auto", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("console-virtio", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("channel-spicevmc", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE | + QEMU_CAPS_CHARDEV_SPICEVMC, false); + DO_TEST("channel-spicevmc-old", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE | + QEMU_CAPS_DEVICE_SPICEVMC, false); DO_TEST("smartcard-host", - QEMUD_CMD_FLAG_CHARDEV | QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_CCID_EMULATED, false); + QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false); DO_TEST("smartcard-host-certificates", - QEMUD_CMD_FLAG_CHARDEV | QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_CCID_EMULATED, false); + QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false); DO_TEST("smartcard-passthrough-tcp", - QEMUD_CMD_FLAG_CHARDEV | QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_CCID_PASSTHRU, false); + QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU, false); DO_TEST("smartcard-passthrough-spicevmc", - QEMUD_CMD_FLAG_CHARDEV | QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_CCID_PASSTHRU | - QEMUD_CMD_FLAG_CHARDEV_SPICEVMC, false); + QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU | + QEMU_CAPS_CHARDEV_SPICEVMC, false); DO_TEST("smartcard-controller", - QEMUD_CMD_FLAG_CHARDEV | QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_CCID_EMULATED, false); + QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false); - DO_TEST("smbios", QEMUD_CMD_FLAG_SMBIOS_TYPE, false); + DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE, false); DO_TEST("watchdog", 0, false); - DO_TEST("watchdog-device", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); + DO_TEST("watchdog-device", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); DO_TEST("watchdog-dump", 0, false); - DO_TEST("balloon-device", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("balloon-device-auto", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); + DO_TEST("balloon-device", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("balloon-device-auto", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); DO_TEST("sound", 0, false); - DO_TEST("sound-device", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_HDA_DUPLEX, false); - DO_TEST("fs9p", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG | QEMUD_CMD_FLAG_FSDEV, false); + DO_TEST("sound-device", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_HDA_DUPLEX, false); + DO_TEST("fs9p", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_FSDEV, false); DO_TEST("hostdev-usb-address", 0, false); - DO_TEST("hostdev-usb-address-device", QEMUD_CMD_FLAG_DEVICE | - QEMUD_CMD_FLAG_NODEFCONFIG, false); - DO_TEST("hostdev-pci-address", QEMUD_CMD_FLAG_PCIDEVICE, false); - DO_TEST("hostdev-pci-address-device", QEMUD_CMD_FLAG_PCIDEVICE | - QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); + DO_TEST("hostdev-usb-address-device", QEMU_CAPS_DEVICE | + QEMU_CAPS_NODEFCONFIG, false); + DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE, false); + DO_TEST("hostdev-pci-address-device", QEMU_CAPS_PCIDEVICE | + QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); - DO_TEST_FULL("restore-v1", QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO, "stdio", 7, + DO_TEST_FULL("restore-v1", QEMU_CAPS_MIGRATE_KVM_STDIO, "stdio", 7, false); - DO_TEST_FULL("restore-v2", QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC, "stdio", 7, + DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "stdio", 7, false); - DO_TEST_FULL("restore-v2", QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC, "exec:cat", 7, + DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "exec:cat", 7, false); - DO_TEST_FULL("restore-v2-fd", QEMUD_CMD_FLAG_MIGRATE_QEMU_FD, "stdio", 7, + DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "stdio", 7, false); - DO_TEST_FULL("restore-v2-fd", QEMUD_CMD_FLAG_MIGRATE_QEMU_FD, "fd:7", 7, + DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "fd:7", 7, false); - DO_TEST_FULL("migrate", QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP, + DO_TEST_FULL("migrate", QEMU_CAPS_MIGRATE_QEMU_TCP, "tcp:10.0.0.1:5000", -1, false); DO_TEST("qemu-ns", 0, false); - DO_TEST("smp", QEMUD_CMD_FLAG_SMP_TOPOLOGY, false); + DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY, false); - DO_TEST("cpu-topology1", QEMUD_CMD_FLAG_SMP_TOPOLOGY, false); - DO_TEST("cpu-topology2", QEMUD_CMD_FLAG_SMP_TOPOLOGY, false); + DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY, false); + DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY, false); DO_TEST("cpu-topology3", 0, false); DO_TEST("cpu-minimum1", 0, false); DO_TEST("cpu-minimum2", 0, false); @@ -489,8 +489,8 @@ mymain(int argc, char **argv) DO_TEST("cpu-exact2", 0, false); DO_TEST("cpu-strict1", 0, false); - DO_TEST("memtune", QEMUD_CMD_FLAG_NAME, false); - DO_TEST("blkiotune", QEMUD_CMD_FLAG_NAME, false); + DO_TEST("memtune", QEMU_CAPS_NAME, false); + DO_TEST("blkiotune", QEMU_CAPS_NAME, false); free(driver.stateDir); virCapabilitiesFree(driver.caps); -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
The new names comply more with the fact that they are all members of enum qemuCapsFlags.
--- Notes: Version 2: - rebased to current master, no additional changes
src/qemu/qemu_capabilities.c | 132 +++++----- src/qemu/qemu_capabilities.h | 122 ++++---- src/qemu/qemu_command.c | 248 ++++++++-------- src/qemu/qemu_hotplug.c | 86 +++--- src/qemu/qemu_migration.c | 12 +- src/qemu/qemu_process.c | 10 +- tests/qemuargv2xmltest.c | 2 +- tests/qemuhelptest.c | 656 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 310 ++++++++++---------- 9 files changed, 789 insertions(+), 789 deletions(-)
The diffstat agrees that this was completely mechanical, and the compiler confirms you didn't miss any cases (renames are sometimes quite easy to verify without re-reading the entire patch :)
- QEMUD_CMD_FLAG_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ - QEMUD_CMD_FLAG_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ - QEMUD_CMD_FLAG_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */
+ QEMU_CAPS_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ + QEMU_CAPS_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ + QEMU_CAPS_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */
And you picked up the VIRTIO_TX_ALG flag added since your v1, so: ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:12:36 -0700, Eric Blake wrote:
On 02/22/2011 09:48 AM, Jiri Denemark wrote:
The new names comply more with the fact that they are all members of enum qemuCapsFlags.
The diffstat agrees that this was completely mechanical, and the compiler confirms you didn't miss any cases (renames are sometimes quite easy to verify without re-reading the entire patch :)
- QEMUD_CMD_FLAG_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ - QEMUD_CMD_FLAG_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ - QEMUD_CMD_FLAG_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */
+ QEMU_CAPS_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ + QEMU_CAPS_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ + QEMU_CAPS_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */
And you picked up the VIRTIO_TX_ALG flag added since your v1, so:
ACK.
Thanks, pushed. Jirka

--- Notes: Version 2: - rebased to current master src/qemu/qemu_capabilities.c | 156 ++++++++++++++----------- src/qemu/qemu_capabilities.h | 9 ++ src/qemu/qemu_command.c | 263 +++++++++++++++++++++-------------------- src/qemu/qemu_hotplug.c | 86 +++++++------- src/qemu/qemu_migration.c | 12 +- src/qemu/qemu_process.c | 10 +- tests/qemuhelptest.c | 2 +- tests/qemuxml2argvtest.c | 4 +- 8 files changed, 291 insertions(+), 251 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 6959cec..94a2289 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -400,7 +400,7 @@ qemuCapsProbeCPUModels(const char *qemu, } cmd = virCommandNewArgList(qemu, "-cpu", "?", NULL); - if (qemuCmdFlags & QEMU_CAPS_NODEFCONFIG) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NODEFCONFIG)) virCommandAddArg(cmd, "-nodefconfig"); virCommandAddEnvPassCommon(cmd); virCommandSetOutputBuffer(cmd, &output); @@ -559,7 +559,7 @@ qemuCapsInitGuest(virCapsPtr caps, goto error; if (qemuCapsExtractVersionInfo(binary, info->arch, NULL, &qemuCmdFlags) < 0 || - ((qemuCmdFlags & QEMU_CAPS_BOOTINDEX) && + (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX) && !virCapabilitiesAddGuestFeature(guest, "deviceboot", 1, 0))) goto error; @@ -791,119 +791,119 @@ qemuCapsComputeCmdFlags(const char *help, const char *p; if (strstr(help, "-no-kqemu")) - flags |= QEMU_CAPS_KQEMU; + qemuCapsSet(&flags, QEMU_CAPS_KQEMU); if (strstr(help, "-enable-kqemu")) - flags |= QEMU_CAPS_ENABLE_KQEMU; + qemuCapsSet(&flags, QEMU_CAPS_ENABLE_KQEMU); if (strstr(help, "-no-kvm")) - flags |= QEMU_CAPS_KVM; + qemuCapsSet(&flags, QEMU_CAPS_KVM); if (strstr(help, "-enable-kvm")) - flags |= QEMU_CAPS_ENABLE_KVM; + qemuCapsSet(&flags, QEMU_CAPS_ENABLE_KVM); if (strstr(help, "-no-reboot")) - flags |= QEMU_CAPS_NO_REBOOT; + qemuCapsSet(&flags, QEMU_CAPS_NO_REBOOT); if (strstr(help, "-name")) { - flags |= QEMU_CAPS_NAME; + qemuCapsSet(&flags, QEMU_CAPS_NAME); if (strstr(help, ",process=")) - flags |= QEMU_CAPS_NAME_PROCESS; + qemuCapsSet(&flags, QEMU_CAPS_NAME_PROCESS); } if (strstr(help, "-uuid")) - flags |= QEMU_CAPS_UUID; + qemuCapsSet(&flags, QEMU_CAPS_UUID); if (strstr(help, "-xen-domid")) - flags |= QEMU_CAPS_XEN_DOMID; + qemuCapsSet(&flags, QEMU_CAPS_XEN_DOMID); else if (strstr(help, "-domid")) - flags |= QEMU_CAPS_DOMID; + qemuCapsSet(&flags, QEMU_CAPS_DOMID); if (strstr(help, "-drive")) { - flags |= QEMU_CAPS_DRIVE; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE); if (strstr(help, "cache=") && !strstr(help, "cache=on|off")) - flags |= QEMU_CAPS_DRIVE_CACHE_V2; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_CACHE_V2); if (strstr(help, "format=")) - flags |= QEMU_CAPS_DRIVE_FORMAT; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_FORMAT); if (strstr(help, "readonly=")) - flags |= QEMU_CAPS_DRIVE_READONLY; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_READONLY); if (strstr(help, "aio=threads|native")) - flags |= QEMU_CAPS_DRIVE_AIO; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_AIO); } if ((p = strstr(help, "-vga")) && !strstr(help, "-std-vga")) { const char *nl = strstr(p, "\n"); - flags |= QEMU_CAPS_VGA; + qemuCapsSet(&flags, QEMU_CAPS_VGA); if (strstr(p, "|qxl")) - flags |= QEMU_CAPS_VGA_QXL; + qemuCapsSet(&flags, QEMU_CAPS_VGA_QXL); if ((p = strstr(p, "|none")) && p < nl) - flags |= QEMU_CAPS_VGA_NONE; + qemuCapsSet(&flags, QEMU_CAPS_VGA_NONE); } if (strstr(help, "-spice")) - flags |= QEMU_CAPS_SPICE; + qemuCapsSet(&flags, QEMU_CAPS_SPICE); if (strstr(help, "boot=on")) - flags |= QEMU_CAPS_DRIVE_BOOT; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_BOOT); if (strstr(help, "serial=s")) - flags |= QEMU_CAPS_DRIVE_SERIAL; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_SERIAL); if (strstr(help, "-pcidevice")) - flags |= QEMU_CAPS_PCIDEVICE; + qemuCapsSet(&flags, QEMU_CAPS_PCIDEVICE); if (strstr(help, "-mem-path")) - flags |= QEMU_CAPS_MEM_PATH; + qemuCapsSet(&flags, QEMU_CAPS_MEM_PATH); if (strstr(help, "-chardev")) { - flags |= QEMU_CAPS_CHARDEV; + qemuCapsSet(&flags, QEMU_CAPS_CHARDEV); if (strstr(help, "-chardev spicevmc")) - flags |= QEMU_CAPS_CHARDEV_SPICEVMC; + qemuCapsSet(&flags, QEMU_CAPS_CHARDEV_SPICEVMC); } if (strstr(help, "-balloon")) - flags |= QEMU_CAPS_BALLOON; + qemuCapsSet(&flags, QEMU_CAPS_BALLOON); if (strstr(help, "-device")) { - flags |= QEMU_CAPS_DEVICE; + qemuCapsSet(&flags, QEMU_CAPS_DEVICE); /* * When -device was introduced, qemu already supported drive's * readonly option but didn't advertise that. */ - flags |= QEMU_CAPS_DRIVE_READONLY; + qemuCapsSet(&flags, QEMU_CAPS_DRIVE_READONLY); } if (strstr(help, "-nodefconfig")) - flags |= QEMU_CAPS_NODEFCONFIG; + qemuCapsSet(&flags, QEMU_CAPS_NODEFCONFIG); /* The trailing ' ' is important to avoid a bogus match */ if (strstr(help, "-rtc ")) - flags |= QEMU_CAPS_RTC; + qemuCapsSet(&flags, QEMU_CAPS_RTC); /* to wit */ if (strstr(help, "-rtc-td-hack")) - flags |= QEMU_CAPS_RTC_TD_HACK; + qemuCapsSet(&flags, QEMU_CAPS_RTC_TD_HACK); if (strstr(help, "-no-hpet")) - flags |= QEMU_CAPS_NO_HPET; + qemuCapsSet(&flags, QEMU_CAPS_NO_HPET); if (strstr(help, "-no-kvm-pit-reinjection")) - flags |= QEMU_CAPS_NO_KVM_PIT; + qemuCapsSet(&flags, QEMU_CAPS_NO_KVM_PIT); if (strstr(help, "-tdf")) - flags |= QEMU_CAPS_TDF; + qemuCapsSet(&flags, QEMU_CAPS_TDF); if (strstr(help, "-enable-nesting")) - flags |= QEMU_CAPS_NESTING; + qemuCapsSet(&flags, QEMU_CAPS_NESTING); if (strstr(help, ",menu=on")) - flags |= QEMU_CAPS_BOOT_MENU; + qemuCapsSet(&flags, QEMU_CAPS_BOOT_MENU); if (strstr(help, "-fsdev")) - flags |= QEMU_CAPS_FSDEV; + qemuCapsSet(&flags, QEMU_CAPS_FSDEV); if (strstr(help, "-smbios type")) - flags |= QEMU_CAPS_SMBIOS_TYPE; + qemuCapsSet(&flags, QEMU_CAPS_SMBIOS_TYPE); if (strstr(help, "-netdev")) { /* Disable -netdev on 0.12 since although it exists, * the corresponding netdev_add/remove monitor commands * do not, and we need them to be able todo hotplug */ if (version >= 13000) - flags |= QEMU_CAPS_NETDEV; + qemuCapsSet(&flags, QEMU_CAPS_NETDEV); } if (strstr(help, "-sdl")) - flags |= QEMU_CAPS_SDL; + qemuCapsSet(&flags, QEMU_CAPS_SDL); if (strstr(help, "cores=") && strstr(help, "threads=") && strstr(help, "sockets=")) - flags |= QEMU_CAPS_SMP_TOPOLOGY; + qemuCapsSet(&flags, QEMU_CAPS_SMP_TOPOLOGY); if (version >= 9000) - flags |= QEMU_CAPS_VNC_COLON; + qemuCapsSet(&flags, QEMU_CAPS_VNC_COLON); if (is_kvm && (version >= 10000 || kvm_version >= 74)) - flags |= QEMU_CAPS_VNET_HDR; + qemuCapsSet(&flags, QEMU_CAPS_VNET_HDR); if (is_kvm && strstr(help, ",vhost=")) { - flags |= QEMU_CAPS_VNET_HOST; + qemuCapsSet(&flags, QEMU_CAPS_VNET_HOST); } /* @@ -919,22 +919,22 @@ qemuCapsComputeCmdFlags(const char *help, * while waiting for data, so pretend it doesn't exist */ if (version >= 10000) { - flags |= QEMU_CAPS_MIGRATE_QEMU_TCP; - flags |= QEMU_CAPS_MIGRATE_QEMU_EXEC; + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_TCP); + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_EXEC); if (version >= 12000) { - flags |= QEMU_CAPS_MIGRATE_QEMU_UNIX; - flags |= QEMU_CAPS_MIGRATE_QEMU_FD; + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_UNIX); + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_FD); } } else if (kvm_version >= 79) { - flags |= QEMU_CAPS_MIGRATE_QEMU_TCP; + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_TCP); if (kvm_version >= 80) - flags |= QEMU_CAPS_MIGRATE_QEMU_EXEC; + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_EXEC); } else if (kvm_version > 0) { - flags |= QEMU_CAPS_MIGRATE_KVM_STDIO; + qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_KVM_STDIO); } if (version >= 10000) - flags |= QEMU_CAPS_0_10; + qemuCapsSet(&flags, QEMU_CAPS_0_10); /* While JSON mode was available in 0.12.0, it was too * incomplete to contemplate using. The 0.13.0 release @@ -943,7 +943,7 @@ qemuCapsComputeCmdFlags(const char *help, * the downside. */ if (version >= 13000) - flags |= QEMU_CAPS_MONITOR_JSON; + qemuCapsSet(&flags, QEMU_CAPS_MONITOR_JSON); return flags; } @@ -1098,26 +1098,26 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags) { /* Which devices exist. */ if (strstr(str, "name \"hda-duplex\"")) - *flags |= QEMU_CAPS_HDA_DUPLEX; + qemuCapsSet(flags, QEMU_CAPS_HDA_DUPLEX); if (strstr(str, "name \"ccid-card-emulated\"")) - *flags |= QEMU_CAPS_CCID_EMULATED; + qemuCapsSet(flags, QEMU_CAPS_CCID_EMULATED); if (strstr(str, "name \"ccid-card-passthru\"")) - *flags |= QEMU_CAPS_CCID_PASSTHRU; + qemuCapsSet(flags, QEMU_CAPS_CCID_PASSTHRU); /* Prefer -chardev spicevmc (detected earlier) over -device spicevmc */ - if (!(*flags & QEMU_CAPS_CHARDEV_SPICEVMC) && + if (!qemuCapsGet(*flags, QEMU_CAPS_CHARDEV_SPICEVMC) && strstr(str, "name \"spicevmc\"")) - *flags |= QEMU_CAPS_DEVICE_SPICEVMC; + qemuCapsSet(flags, QEMU_CAPS_DEVICE_SPICEVMC); /* Features of given devices. */ if (strstr(str, "pci-assign.configfd")) - *flags |= QEMU_CAPS_PCI_CONFIGFD; + qemuCapsSet(flags, QEMU_CAPS_PCI_CONFIGFD); if (strstr(str, "virtio-blk-pci.bootindex")) { - *flags |= QEMU_CAPS_BOOTINDEX; + qemuCapsSet(flags, QEMU_CAPS_BOOTINDEX); if (strstr(str, "pci-assign.bootindex")) - *flags |= QEMU_CAPS_PCI_BOOTINDEX; + qemuCapsSet(flags, QEMU_CAPS_PCI_BOOTINDEX); } if (strstr(str, "virtio-net-pci.tx=")) - *flags |= QEMU_CAPS_VIRTIO_TX_ALG; + qemuCapsSet(flags, QEMU_CAPS_VIRTIO_TX_ALG); return 0; } @@ -1161,12 +1161,12 @@ int qemuCapsExtractVersionInfo(const char *qemu, const char *arch, /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(arch, "x86_64", 6) || STREQLEN(arch, "i686", 4)) { - flags |= QEMU_CAPS_PCI_MULTIBUS; + qemuCapsSet(&flags, QEMU_CAPS_PCI_MULTIBUS); } /* qemuCapsExtractDeviceStr will only set additional flags if qemu * understands the 0.13.0+ notion of "-device driver,". */ - if ((flags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(flags, QEMU_CAPS_DEVICE) && strstr(help, "-device driver,?") && qemuCapsExtractDeviceStr(qemu, &flags) < 0) goto cleanup; @@ -1231,3 +1231,27 @@ int qemuCapsExtractVersion(virCapsPtr caps, return 0; } + + +void +qemuCapsSet(unsigned long long *caps, + enum qemuCapsFlags flag) +{ + *caps |= flag; +} + + +void +qemuCapsClear(unsigned long long *caps, + enum qemuCapsFlags flag) +{ + *caps &= ~flag; +} + + +bool +qemuCapsGet(unsigned long long caps, + enum qemuCapsFlags flag) +{ + return !!(caps & flag); +} diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 9a7898a..6752136 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -95,6 +95,15 @@ enum qemuCapsFlags { QEMU_CAPS_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */ }; +void qemuCapsSet(unsigned long long *caps, + enum qemuCapsFlags flag); + +void qemuCapsClear(unsigned long long *caps, + enum qemuCapsFlags flag); + +bool qemuCapsGet(unsigned long long caps, + enum qemuCapsFlags flag); + virCapsPtr qemuCapsInit(virCapsPtr old_caps); int qemuCapsProbeMachineTypes(const char *binary, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 983ccfa..b8bdbb1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -119,7 +119,7 @@ qemuPhysIfaceConnect(virConnectPtr conn, int vnet_hdr = 0; int err; - if (qemuCmdFlags & QEMU_CAPS_VNET_HDR && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNET_HDR) && net->model && STREQ(net->model, "virtio")) vnet_hdr = 1; @@ -241,7 +241,7 @@ qemuNetworkIfaceConnect(virConnectPtr conn, template_ifname = 1; } - if (qemuCmdFlags & QEMU_CAPS_VNET_HDR && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNET_HDR) && net->model && STREQ(net->model, "virtio")) vnet_hdr = 1; @@ -319,9 +319,9 @@ qemuOpenVhostNet(virDomainNetDefPtr net, /* If qemu doesn't support vhost-net mode (including the -netdev command * option), don't try to open the device. */ - if (!(qemuCmdFlags & QEMU_CAPS_VNET_HOST && - qemuCmdFlags & QEMU_CAPS_NETDEV && - qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!(qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNET_HOST) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE))) { if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is not supported with " @@ -407,7 +407,7 @@ char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, { char *ret; - if (qemudCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemudCmdFlags, QEMU_CAPS_DEVICE)) { if (virAsprintf(&ret, "%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias) < 0) { virReportOOMError(); return NULL; @@ -503,8 +503,8 @@ no_memory: int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCmdFlags) { - if (qemuCmdFlags & QEMU_CAPS_DRIVE) { - if (qemuCmdFlags & QEMU_CAPS_DEVICE) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) return qemuAssignDeviceDiskAliasCustom(def); else return qemuAssignDeviceDiskAliasFixed(def); @@ -592,15 +592,15 @@ qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCmdFlags) if (qemuAssignDeviceDiskAlias(def->disks[i], qemuCmdFlags) < 0) return -1; } - if ((qemuCmdFlags & QEMU_CAPS_NET_NAME) || - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NET_NAME) || + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { for (i = 0; i < def->nnets ; i++) { if (qemuAssignDeviceNetAlias(def, def->nets[i], i) < 0) return -1; } } - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) return 0; for (i = 0; i < def->nfss ; i++) { @@ -728,7 +728,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def) &qemuCmdFlags) < 0) goto cleanup; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (!(addrs = qemuDomainPCIAddressSetCreate(def))) goto cleanup; @@ -1151,7 +1151,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, * When QEMU grows support for > 1 PCI domain, then pci.0 change * to pciNN.0 where NN is the domain number */ - if (qemuCmdFlags & QEMU_CAPS_PCI_MULTIBUS) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_MULTIBUS)) virBufferVSprintf(buf, ",bus=pci.0,addr=0x%x", info->addr.pci.slot); else virBufferVSprintf(buf, ",bus=pci,addr=0x%x", info->addr.pci.slot); @@ -1311,7 +1311,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferVSprintf(&opt, "file=%s,", disk->src); } } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) virBufferAddLit(&opt, "if=none"); else virBufferVSprintf(&opt, "if=%s", bus); @@ -1319,7 +1319,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) virBufferAddLit(&opt, ",media=cdrom"); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virBufferVSprintf(&opt, ",id=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); } else { if (busid == -1 && unitid == -1) { @@ -1337,14 +1337,14 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, disk->bus != VIR_DOMAIN_DISK_BUS_IDE) virBufferAddLit(&opt, ",boot=on"); if (disk->readonly && - qemuCmdFlags & QEMU_CAPS_DRIVE_READONLY) + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_READONLY)) virBufferAddLit(&opt, ",readonly=on"); if (disk->driverType && *disk->driverType != '\0' && disk->type != VIR_DOMAIN_DISK_TYPE_DIR && - qemuCmdFlags & QEMU_CAPS_DRIVE_FORMAT) + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_FORMAT)) virBufferVSprintf(&opt, ",format=%s", disk->driverType); if (disk->serial && - (qemuCmdFlags & QEMU_CAPS_DRIVE_SERIAL)) { + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_SERIAL)) { if (qemuSafeSerialParamValue(disk->serial) < 0) goto error; virBufferVSprintf(&opt, ",serial=%s", disk->serial); @@ -1352,7 +1352,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->cachemode) { const char *mode = - (qemuCmdFlags & QEMU_CAPS_DRIVE_CACHE_V2) ? + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_CACHE_V2) ? qemuDiskCacheV2TypeToString(disk->cachemode) : qemuDiskCacheV1TypeToString(disk->cachemode); @@ -1361,7 +1361,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferAddLit(&opt, ",cache=off"); } - if (qemuCmdFlags & QEMU_CAPS_MONITOR_JSON) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MONITOR_JSON)) { if (disk->error_policy) { virBufferVSprintf(&opt, ",werror=%s,rerror=%s", virDomainDiskErrorPolicyTypeToString(disk->error_policy), @@ -1370,7 +1370,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, } if (disk->iomode) { - if (qemuCmdFlags & QEMU_CAPS_DRIVE_AIO) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_AIO)) { virBufferVSprintf(&opt, ",aio=%s", virDomainDiskIoTypeToString(disk->iomode)); } else { @@ -1436,7 +1436,7 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk, } virBufferVSprintf(&opt, ",drive=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); virBufferVSprintf(&opt, ",id=%s", disk->info.alias); - if (disk->bootIndex && (qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) + if (disk->bootIndex && qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) virBufferVSprintf(&opt, ",bootindex=%d", disk->bootIndex); if (virBufferError(&opt)) { @@ -1622,7 +1622,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, virBufferAdd(&buf, nic, strlen(nic)); if (usingVirtio && net->driver.virtio.txmode) { - if (qemuCmdFlags & QEMU_CAPS_VIRTIO_TX_ALG) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VIRTIO_TX_ALG)) { virBufferAddLit(&buf, ",tx="); switch (net->driver.virtio.txmode) { case VIR_DOMAIN_NET_VIRTIO_TX_MODE_IOTHREAD: @@ -1657,7 +1657,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, net->mac[4], net->mac[5]); if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCmdFlags) < 0) goto error; - if (net->bootIndex && (qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) + if (net->bootIndex && qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) virBufferVSprintf(&buf, ",bootindex=%d", net->bootIndex); if (virBufferError(&buf)) { @@ -2134,7 +2134,7 @@ qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias, break; case VIR_DOMAIN_CHR_TYPE_SPICEVMC: - if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV_SPICEVMC)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV_SPICEVMC)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("spicevmc not supported in this QEMU binary")); goto error; @@ -2249,7 +2249,7 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, virBuffer buf = VIR_BUFFER_INITIALIZER; if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE) virBufferAddLit(&buf, "virtconsole"); - else if ((qemuCmdFlags & QEMU_CAPS_DEVICE_SPICEVMC) && + else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE_SPICEVMC) && dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) virBufferAddLit(&buf, "spicevmc"); else @@ -2282,7 +2282,7 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, dev->target.name); goto error; } - if ((qemuCmdFlags & QEMU_CAPS_DEVICE_SPICEVMC) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE_SPICEVMC) && dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { virBufferVSprintf(&buf, ",id=%s", dev->info.alias); } else { @@ -2613,7 +2613,7 @@ qemuBuildSmpArgStr(const virDomainDefPtr def, virBufferVSprintf(&buf, "%u", def->vcpus); - if ((qemuCmdFlags & QEMU_CAPS_SMP_TOPOLOGY)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SMP_TOPOLOGY)) { if (def->vcpus != def->maxvcpus) virBufferVSprintf(&buf, ",maxcpus=%u", def->maxvcpus); /* sockets, cores, and threads are either all zero @@ -2696,26 +2696,25 @@ qemuBuildCommandLine(virConnectPtr conn, * do not use boot=on for drives when not using KVM since this * is not supported at all in upstream QEmu. */ - if ((qemuCmdFlags & QEMU_CAPS_KVM) && - (def->virtType == VIR_DOMAIN_VIRT_QEMU) && - (qemuCmdFlags & QEMU_CAPS_DRIVE_BOOT)) - qemuCmdFlags -= QEMU_CAPS_DRIVE_BOOT; + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM) && + (def->virtType == VIR_DOMAIN_VIRT_QEMU)) + qemuCapsClear(&qemuCmdFlags, QEMU_CAPS_DRIVE_BOOT); switch (def->virtType) { case VIR_DOMAIN_VIRT_QEMU: - if (qemuCmdFlags & QEMU_CAPS_KQEMU) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KQEMU)) disableKQEMU = 1; - if (qemuCmdFlags & QEMU_CAPS_KVM) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM)) disableKVM = 1; break; case VIR_DOMAIN_VIRT_KQEMU: - if (qemuCmdFlags & QEMU_CAPS_KVM) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM)) disableKVM = 1; - if (qemuCmdFlags & QEMU_CAPS_ENABLE_KQEMU) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_ENABLE_KQEMU)) { enableKQEMU = 1; - } else if (!(qemuCmdFlags & QEMU_CAPS_KQEMU)) { + } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KQEMU)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support kqemu"), emulator); @@ -2723,12 +2722,12 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_VIRT_KVM: - if (qemuCmdFlags & QEMU_CAPS_KQEMU) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KQEMU)) disableKQEMU = 1; - if (qemuCmdFlags & QEMU_CAPS_ENABLE_KVM) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_ENABLE_KVM)) { enableKVM = 1; - } else if (!(qemuCmdFlags & QEMU_CAPS_KVM)) { + } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support kvm"), emulator); @@ -2765,7 +2764,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArgList(cmd, "-cpu", cpu, NULL); VIR_FREE(cpu); - if ((qemuCmdFlags & QEMU_CAPS_NESTING) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NESTING) && hasHwVirt) virCommandAddArg(cmd, "-enable-nesting"); } @@ -2796,7 +2795,7 @@ qemuBuildCommandLine(virConnectPtr conn, "%s", _("hugepages are disabled by administrator config")); goto error; } - if (!(qemuCmdFlags & QEMU_CAPS_MEM_PATH)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MEM_PATH)) { qemuReportError(VIR_ERR_INTERNAL_ERROR, _("hugepage backing not supported by '%s'"), def->emulator); @@ -2812,25 +2811,25 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, smp); VIR_FREE(smp); - if (qemuCmdFlags & QEMU_CAPS_NAME) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NAME)) { virCommandAddArg(cmd, "-name"); if (driver->setProcessName && - (qemuCmdFlags & QEMU_CAPS_NAME_PROCESS)) { + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NAME_PROCESS)) { virCommandAddArgFormat(cmd, "%s,process=qemu:%s", def->name, def->name); } else { virCommandAddArg(cmd, def->name); } } - if (qemuCmdFlags & QEMU_CAPS_UUID) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_UUID)) virCommandAddArgList(cmd, "-uuid", uuid, NULL); if (def->virtType == VIR_DOMAIN_VIRT_XEN || STREQ(def->os.type, "xen") || STREQ(def->os.type, "linux")) { - if (qemuCmdFlags & QEMU_CAPS_DOMID) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DOMID)) { virCommandAddArg(cmd, "-domid"); virCommandAddArgFormat(cmd, "%d", def->id); - } else if (qemuCmdFlags & QEMU_CAPS_XEN_DOMID) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_XEN_DOMID)) { virCommandAddArg(cmd, "-xen-attach"); virCommandAddArg(cmd, "-xen-domid"); virCommandAddArgFormat(cmd, "%d", def->id); @@ -2847,7 +2846,7 @@ qemuBuildCommandLine(virConnectPtr conn, virSysinfoDefPtr source = NULL; bool skip_uuid = false; - if (!(qemuCmdFlags & QEMU_CAPS_SMBIOS_TYPE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SMBIOS_TYPE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support smbios settings"), emulator); @@ -2900,8 +2899,8 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->graphics) virCommandAddArg(cmd, "-nographic"); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { - if (qemuCmdFlags & QEMU_CAPS_NODEFCONFIG) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NODEFCONFIG)) virCommandAddArg(cmd, "-nodefconfig"); /* Disable global config files */ virCommandAddArg(cmd, @@ -2911,7 +2910,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (monitor_chr) { char *chrdev; /* Use -chardev if it's available */ - if (qemuCmdFlags & QEMU_CAPS_CHARDEV) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV)) { virCommandAddArg(cmd, "-chardev"); if (!(chrdev = qemuBuildChrChardevStr(monitor_chr, "monitor", @@ -2937,7 +2936,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCmdFlags & QEMU_CAPS_RTC) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_RTC)) { const char *rtcopt; virCommandAddArg(cmd, "-rtc"); if (!(rtcopt = qemuBuildClockArgStr(&def->clock))) @@ -2981,7 +2980,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* This has already been taken care of (in qemuBuildClockArgStr) if QEMU_CAPS_RTC is set (mutually exclusive with QEMUD_FLAG_RTC_TD_HACK) */ - if (qemuCmdFlags & QEMU_CAPS_RTC_TD_HACK) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_RTC_TD_HACK)) { switch (def->clock.timers[i]->tickpolicy) { case -1: case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY: @@ -2997,7 +2996,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainTimerTickpolicyTypeToString(def->clock.timers[i]->tickpolicy)); goto error; } - } else if (!(qemuCmdFlags & QEMU_CAPS_RTC) + } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_RTC) && (def->clock.timers[i]->tickpolicy != VIR_DOMAIN_TIMER_TICKPOLICY_DELAY) && (def->clock.timers[i]->tickpolicy != -1)) { @@ -3016,13 +3015,13 @@ qemuBuildCommandLine(virConnectPtr conn, case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY: /* delay is the default if we don't have kernel (-no-kvm-pit), otherwise, the default is catchup. */ - if (qemuCmdFlags & QEMU_CAPS_NO_KVM_PIT) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_KVM_PIT)) virCommandAddArg(cmd, "-no-kvm-pit-reinjection"); break; case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP: - if (qemuCmdFlags & QEMU_CAPS_NO_KVM_PIT) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_KVM_PIT)) { /* do nothing - this is default for kvm-pit */ - } else if (qemuCmdFlags & QEMU_CAPS_TDF) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_TDF)) { /* -tdf switches to 'catchup' with userspace pit. */ virCommandAddArg(cmd, "-tdf"); } else { @@ -3051,7 +3050,7 @@ qemuBuildCommandLine(virConnectPtr conn, * and when -no-hpet doesn't exist is "no". "confusing"? * "yes"! */ - if (qemuCmdFlags & QEMU_CAPS_NO_HPET) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_HPET)) { if (def->clock.timers[i]->present == 0) virCommandAddArg(cmd, "-no-hpet"); } else { @@ -3066,7 +3065,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if ((qemuCmdFlags & QEMU_CAPS_NO_REBOOT) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_REBOOT) && def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART) virCommandAddArg(cmd, "-no-reboot"); @@ -3099,7 +3098,7 @@ qemuBuildCommandLine(virConnectPtr conn, boot[def->os.nBootDevs] = '\0'; - if (qemuCmdFlags & QEMU_CAPS_BOOT_MENU && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOT_MENU) && def->os.bootmenu != VIR_DOMAIN_BOOT_MENU_DEFAULT) { if (def->os.bootmenu == VIR_DOMAIN_BOOT_MENU_ENABLED) virBufferVSprintf(&boot_buf, "order=%s,menu=on", boot); @@ -3110,7 +3109,7 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArgBuffer(cmd, &boot_buf); - } else if (!(qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) { + } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) { /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot * configuration is used */ @@ -3141,7 +3140,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { for (i = 0 ; i < def->ncontrollers ; i++) { virDomainControllerDefPtr cont = def->controllers[i]; @@ -3171,11 +3170,12 @@ qemuBuildCommandLine(virConnectPtr conn, } /* If QEMU supports -drive param instead of old -hda, -hdb, -cdrom .. */ - if (qemuCmdFlags & QEMU_CAPS_DRIVE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE)) { int bootCD = 0, bootFloppy = 0, bootDisk = 0; /* If QEMU supports boot=on for -drive param... */ - if (qemuCmdFlags & QEMU_CAPS_DRIVE_BOOT && !def->os.kernel) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_BOOT) && + !def->os.kernel) { for (i = 0 ; i < def->os.nBootDevs ; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_CDROM: @@ -3196,12 +3196,13 @@ qemuBuildCommandLine(virConnectPtr conn, int bootable = 0; virDomainDiskDefPtr disk = def->disks[i]; int withDeviceArg = 0; + bool deviceFlagMasked = false; int j; /* Unless we have -device, then USB disks need special handling */ if ((disk->bus == VIR_DOMAIN_DISK_BUS_USB) && - !(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) { virCommandAddArg(cmd, "-usbdevice"); virCommandAddArgFormat(cmd, "disk:%s", disk->src); @@ -3236,12 +3237,18 @@ qemuBuildCommandLine(virConnectPtr conn, devices. Fortunately, those don't need static PCI addresses, so we don't really care that we can't use -device */ - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && - (disk->bus != VIR_DOMAIN_DISK_BUS_XEN)) - withDeviceArg = 1; - if (!(optstr = qemuBuildDriveStr(disk, bootable, - (withDeviceArg ? qemuCmdFlags : - (qemuCmdFlags & ~QEMU_CAPS_DEVICE))))) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (disk->bus != VIR_DOMAIN_DISK_BUS_XEN) { + withDeviceArg = 1; + } else { + qemuCapsClear(&qemuCmdFlags, QEMU_CAPS_DEVICE); + deviceFlagMasked = true; + } + } + optstr = qemuBuildDriveStr(disk, bootable, qemuCmdFlags); + if (deviceFlagMasked) + qemuCapsSet(&qemuCmdFlags, QEMU_CAPS_DEVICE); + if (!optstr) goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); @@ -3276,7 +3283,7 @@ qemuBuildCommandLine(virConnectPtr conn, disk->info.alias); if (disk->bootIndex && - (qemuCmdFlags & QEMU_CAPS_BOOTINDEX)) { + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) { virCommandAddArg(cmd, "-global"); virCommandAddArgFormat(cmd, "isa-fdc.bootindex%c=%d", disk->info.addr.drive.unit @@ -3401,7 +3408,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (has_rbd_hosts) virCommandAddEnvBuffer(cmd, &rbd_hosts); - if (qemuCmdFlags & QEMU_CAPS_FSDEV) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_FSDEV)) { for (i = 0 ; i < def->nfss ; i++) { char *optstr; virDomainFSDefPtr fs = def->fss[i]; @@ -3428,7 +3435,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nnets) { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-net", "none", NULL); } else { for (i = 0 ; i < def->nnets ; i++) { @@ -3439,8 +3446,8 @@ qemuBuildCommandLine(virConnectPtr conn, int vlan; /* VLANs are not used with -netdev, so don't record them */ - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) vlan = -1; else vlan = i; @@ -3499,8 +3506,8 @@ qemuBuildCommandLine(virConnectPtr conn, * * NB, no support for -netdev without use of -device */ - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-netdev"); if (!(host = qemuBuildHostNetStr(net, ',', vlan, tapfd_name, vhostfd_name))) @@ -3508,7 +3515,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, host); VIR_FREE(host); } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-device"); if (!(nic = qemuBuildNicDevStr(net, vlan, qemuCmdFlags))) goto error; @@ -3521,8 +3528,8 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, nic); VIR_FREE(nic); } - if (!((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE))) { + if (!(qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE))) { virCommandAddArg(cmd, "-net"); if (!(host = qemuBuildHostNetStr(net, ',', vlan, tapfd_name, vhostfd_name))) @@ -3555,8 +3562,8 @@ qemuBuildCommandLine(virConnectPtr conn, switch (smartcard->type) { case VIR_DOMAIN_SMARTCARD_TYPE_HOST: - if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || - !(qemuCmdFlags & QEMU_CAPS_CCID_EMULATED)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CCID_EMULATED)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard host " "mode support")); @@ -3567,8 +3574,8 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES: - if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || - !(qemuCmdFlags & QEMU_CAPS_CCID_EMULATED)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CCID_EMULATED)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard host " "mode support")); @@ -3603,8 +3610,8 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || - !(qemuCmdFlags & QEMU_CAPS_CCID_PASSTHRU)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CCID_PASSTHRU)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard " "passthrough mode support")); @@ -3639,7 +3646,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nserials) { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-serial", "none", NULL); } else { for (i = 0 ; i < def->nserials ; i++) { @@ -3647,8 +3654,8 @@ qemuBuildCommandLine(virConnectPtr conn, char *devstr; /* Use -chardev with -device if they are available */ - if ((qemuCmdFlags & QEMU_CAPS_CHARDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&serial->source, serial->info.alias, @@ -3672,7 +3679,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nparallels) { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-parallel", "none", NULL); } else { for (i = 0 ; i < def->nparallels ; i++) { @@ -3680,8 +3687,8 @@ qemuBuildCommandLine(virConnectPtr conn, char *devstr; /* Use -chardev with -device if they are available */ - if ((qemuCmdFlags & QEMU_CAPS_CHARDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(¶llel->source, parallel->info.alias, @@ -3710,8 +3717,8 @@ qemuBuildCommandLine(virConnectPtr conn, switch(channel->targetType) { case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD: - if (!(qemuCmdFlags & QEMU_CAPS_CHARDEV) || - !(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("guestfwd requires QEMU to support -chardev & -device")); goto error; @@ -3739,13 +3746,13 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO: - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("virtio channel requires QEMU to support -device")); goto error; } - if ((qemuCmdFlags & QEMU_CAPS_DEVICE_SPICEVMC) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE_SPICEVMC) && channel->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { /* spicevmc was originally introduced via a -device * with a backend internal to qemu; although we prefer @@ -3778,7 +3785,7 @@ qemuBuildCommandLine(virConnectPtr conn, switch(console->targetType) { case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO: - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_NO_SUPPORT, "%s", _("virtio channel requires QEMU to support -device")); goto error; @@ -3816,7 +3823,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainInputDefPtr input = def->inputs[i]; if (input->bus == VIR_DOMAIN_INPUT_BUS_USB) { - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { char *optstr; virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildUSBInputDevStr(input))) @@ -3853,7 +3860,7 @@ qemuBuildCommandLine(virConnectPtr conn, virBufferVSprintf(&opt, "unix:%s", def->graphics[0]->data.vnc.socket); - } else if (qemuCmdFlags & QEMU_CAPS_VNC_COLON) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNC_COLON)) { if (def->graphics[0]->data.vnc.listenAddr) virBufferAdd(&opt, def->graphics[0]->data.vnc.listenAddr, -1); else if (driver->vncListen) @@ -3867,7 +3874,7 @@ qemuBuildCommandLine(virConnectPtr conn, def->graphics[0]->data.vnc.port - 5900); } - if (qemuCmdFlags & QEMU_CAPS_VNC_COLON) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNC_COLON)) { if (def->graphics[0]->data.vnc.auth.passwd || driver->vncPassword) virBufferAddLit(&opt, ",password"); @@ -3912,8 +3919,8 @@ qemuBuildCommandLine(virConnectPtr conn, } } else if ((def->ngraphics == 1) && def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { - if ((qemuCmdFlags & QEMU_CAPS_0_10) && - !(qemuCmdFlags & QEMU_CAPS_SDL)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_0_10) && + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SDL)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("sdl not supported by '%s'"), def->emulator); @@ -3939,14 +3946,14 @@ qemuBuildCommandLine(virConnectPtr conn, /* New QEMU has this flag to let us explicitly ask for * SDL graphics. This is better than relying on the * default, since the default changes :-( */ - if (qemuCmdFlags & QEMU_CAPS_SDL) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SDL)) virCommandAddArg(cmd, "-sdl"); } else if ((def->ngraphics == 1) && def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { virBuffer opt = VIR_BUFFER_INITIALIZER; - if (!(qemuCmdFlags & QEMU_CAPS_SPICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SPICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("spice graphics are not supported with this QEMU")); goto error; @@ -4005,12 +4012,12 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->nvideos > 0) { - if (qemuCmdFlags & QEMU_CAPS_VGA) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA)) { if (def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_XEN) { /* nothing - vga has no effect on Xen pvfb */ } else { if ((def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_QXL) && - !(qemuCmdFlags & QEMU_CAPS_VGA_QXL)) { + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA_QXL)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU does not support QXL graphics adapters")); goto error; @@ -4051,7 +4058,7 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->nvideos > 1) { - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { for (i = 1 ; i < def->nvideos ; i++) { char *str; if (def->videos[i]->type != VIR_DOMAIN_VIDEO_TYPE_QXL) { @@ -4078,15 +4085,15 @@ qemuBuildCommandLine(virConnectPtr conn, } else { /* If we have -device, then we set -nodefault already */ - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE) && - (qemuCmdFlags & QEMU_CAPS_VGA) && - (qemuCmdFlags & QEMU_CAPS_VGA_NONE)) + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA_NONE)) virCommandAddArgList(cmd, "-vga", "none", NULL); } /* Add sound hardware */ if (def->nsounds) { - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { for (i = 0 ; i < def->nsounds ; i++) { virDomainSoundDefPtr sound = def->sounds[i]; char *str = NULL; @@ -4105,7 +4112,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (sound->model == VIR_DOMAIN_SOUND_MODEL_ICH6) { char *codecstr = NULL; - if (!(qemuCmdFlags & QEMU_CAPS_HDA_DUPLEX)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_HDA_DUPLEX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks hda support")); goto error; @@ -4161,7 +4168,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainWatchdogDefPtr watchdog = def->watchdog; char *optstr; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-device"); optstr = qemuBuildWatchdogDevStr(watchdog, qemuCmdFlags); @@ -4207,7 +4214,7 @@ qemuBuildCommandLine(virConnectPtr conn, _("booting from assigned devices is only" " supported for PCI devices")); goto error; - } else if (!(qemuCmdFlags & QEMU_CAPS_PCI_BOOTINDEX)) { + } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_BOOTINDEX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("booting from assigned PCI devices is not" " supported with this version of qemu")); @@ -4219,7 +4226,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildUSBHostdevDevStr(hostdev))) goto error; @@ -4237,9 +4244,9 @@ qemuBuildCommandLine(virConnectPtr conn, /* PCI */ if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) { - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { char *configfd_name = NULL; - if (qemuCmdFlags & QEMU_CAPS_PCI_CONFIGFD) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_CONFIGFD)) { int configfd = qemuOpenPCIConfig(hostdev); if (configfd >= 0) { @@ -4258,7 +4265,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); - } else if (qemuCmdFlags & QEMU_CAPS_PCIDEVICE) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCIDEVICE)) { virCommandAddArg(cmd, "-pcidevice"); if (!(devstr = qemuBuildPCIHostdevPCIDevStr(hostdev))) goto error; @@ -4278,7 +4285,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (migrateFrom) { virCommandAddArg(cmd, "-incoming"); if (STRPREFIX(migrateFrom, "tcp")) { - if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_TCP)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_TCP)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("TCP migration is not supported with " "this QEMU binary")); @@ -4286,13 +4293,13 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, migrateFrom); } else if (STREQ(migrateFrom, "stdio")) { - if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_FD) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_FD)) { virCommandAddArgFormat(cmd, "fd:%d", migrateFd); virCommandPreserveFD(cmd, migrateFd); - } else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { virCommandAddArg(cmd, "exec:cat"); virCommandSetInputFD(cmd, migrateFd); - } else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_KVM_STDIO) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_KVM_STDIO)) { virCommandAddArg(cmd, migrateFrom); virCommandSetInputFD(cmd, migrateFd); } else { @@ -4302,7 +4309,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; } } else if (STRPREFIX(migrateFrom, "exec")) { - if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("EXEC migration is not supported " "with this QEMU binary")); @@ -4310,7 +4317,7 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, migrateFrom); } else if (STRPREFIX(migrateFrom, "fd")) { - if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_FD)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_FD)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("FD migration is not supported " "with this QEMU binary")); @@ -4319,7 +4326,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, migrateFrom); virCommandPreserveFD(cmd, migrateFd); } else if (STRPREFIX(migrateFrom, "unix")) { - if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("UNIX migration is not supported " "with this QEMU binary")); @@ -4347,7 +4354,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainMemballoonModelTypeToString(def->memballoon->model)); goto error; } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { char *optstr; virCommandAddArg(cmd, "-device"); @@ -4356,7 +4363,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); - } else if (qemuCmdFlags & QEMU_CAPS_BALLOON) { + } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BALLOON)) { virCommandAddArgList(cmd, "-balloon", "virtio", NULL); } } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 499880b..642e8f1 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -160,7 +160,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, vm, disk) < 0) return -1; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0) goto error; if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) @@ -179,7 +179,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -219,7 +219,7 @@ error: VIR_FREE(devstr); VIR_FREE(drivestr); - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &disk->info) < 0) VIR_WARN("Unable to release PCI address on %s", disk->src); @@ -253,7 +253,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, } } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0) goto cleanup; if (qemuAssignDeviceControllerAlias(controller) < 0) @@ -270,7 +270,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDevice(priv->mon, devstr); } else { ret = qemuMonitorAttachPCIDiskController(priv->mon, @@ -286,7 +286,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, cleanup: if ((ret != 0) && - (qemuCmdFlags & QEMU_CAPS_DEVICE) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &controller->info) < 0) VIR_WARN0("Unable to release PCI address on controller"); @@ -376,7 +376,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, goto error; } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) goto error; if (!(devstr = qemuBuildDriveDevStr(disk, qemuCmdFlags))) @@ -409,7 +409,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -487,7 +487,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, goto error; } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) goto error; if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags))) @@ -502,7 +502,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -558,7 +558,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, virDomainDevicePCIAddress guestAddr; int vlan; - if (!(qemuCmdFlags & QEMU_CAPS_HOST_NET_ADD)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_HOST_NET_ADD)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("installed qemu version does not support host_net_add")); return -1; @@ -595,18 +595,18 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets+1) < 0) goto no_memory; - if ((qemuCmdFlags & QEMU_CAPS_NET_NAME) || - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NET_NAME) || + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0) goto cleanup; } - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &net->info) < 0) goto cleanup; - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { vlan = -1; } else { vlan = qemuDomainNetVLAN(net); @@ -637,8 +637,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } /* FIXME - need to support vhost-net here (5th arg) */ - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (!(netstr = qemuBuildHostNetStr(net, ',', -1, tapfd_name, 0))) goto try_tapfd_close; @@ -649,8 +649,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorAddNetdev(priv->mon, netstr) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, NULL, net, "attach", false); @@ -673,7 +673,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, goto cleanup; } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (!(nicstr = qemuBuildNicDevStr(net, vlan, qemuCmdFlags))) goto try_remove; } else { @@ -682,7 +682,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, NULL, net, "attach", false); @@ -708,7 +708,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, cleanup: if ((ret != 0) && - (qemuCmdFlags & QEMU_CAPS_DEVICE) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && (net->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &net->info) < 0) VIR_WARN0("Unable to release PCI address on NIC"); @@ -728,8 +728,8 @@ try_remove: goto cleanup; if (vlan < 0) { - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { char *netdev_name; if (virAsprintf(&netdev_name, "host%s", net->info.alias) < 0) goto no_memory; @@ -793,12 +793,12 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, if (qemuPrepareHostdevPCIDevices(driver, &hostdev, 1) < 0) return -1; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) goto error; if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &hostdev->info) < 0) goto error; - if (qemuCmdFlags & QEMU_CAPS_PCI_CONFIGFD) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_CONFIGFD)) { configfd = qemuOpenPCIConfig(hostdev); if (configfd >= 0) { if (virAsprintf(&configfd_name, "fd-%s", @@ -854,7 +854,7 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, return 0; error: - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && (hostdev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &hostdev->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); @@ -878,7 +878,7 @@ int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, qemuDomainObjPrivatePtr priv = vm->privateData; char *devstr = NULL; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) goto error; if (!(devstr = qemuBuildUSBHostdevDevStr(hostdev))) @@ -910,7 +910,7 @@ int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) ret = qemuMonitorAddDevice(priv->mon, devstr); else ret = qemuMonitorAddUSBDeviceExact(priv->mon, @@ -1173,7 +1173,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); goto cleanup; @@ -1193,7 +1193,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, qemuDomainDiskAudit(vm, detach, NULL, "detach", ret >= 0); - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN("Unable to release PCI address on %s", dev->data.disk->src); @@ -1237,7 +1237,7 @@ int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, goto cleanup; } - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Underlying qemu does not support SCSI disk removal")); goto cleanup; @@ -1385,13 +1385,13 @@ int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, goto cleanup; } - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceControllerAlias(detach) < 0) goto cleanup; } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { qemuDomainObjExitMonitor(vm); goto cleanup; @@ -1419,7 +1419,7 @@ int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, vm->def->ncontrollers = 0; } - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on controller"); @@ -1479,7 +1479,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); qemuDomainNetAudit(vm, detach, NULL, "detach", false); @@ -1494,8 +1494,8 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, } } - if ((qemuCmdFlags & QEMU_CAPS_NETDEV) && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorRemoveNetdev(priv->mon, hostnet_name) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, detach, NULL, "detach", false); @@ -1512,7 +1512,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, qemuDomainNetAudit(vm, detach, NULL, "detach", true); - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on NIC"); @@ -1605,7 +1605,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); return -1; @@ -1636,7 +1636,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, pciFreeDevice(pci); } - if ((qemuCmdFlags & QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); @@ -1707,7 +1707,7 @@ int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, return -1; } - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("device cannot be detached with this QEMU version")); return -1; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 569723b..fb16f3a 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -304,9 +304,9 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver, vm->def->emulator); goto endjob; } - if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX)) internalret = virAsprintf(&migrateFrom, "unix:%s", unixfile); - else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC) + else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) internalret = virAsprintf(&migrateFrom, "exec:nc -U -l %s", unixfile); else { qemuReportError(VIR_ERR_OPERATION_FAILED, @@ -777,8 +777,8 @@ static int doTunnelMigrate(struct qemud_driver *driver, goto cleanup; } - if (!(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX) && - !(qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX) && + !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Source qemu is too old to support tunnelled migration")); goto cleanup; @@ -820,11 +820,11 @@ static int doTunnelMigrate(struct qemud_driver *driver, background_flags |= QEMU_MONITOR_MIGRATE_NON_SHARED_DISK; if (flags & VIR_MIGRATE_NON_SHARED_INC) background_flags |= QEMU_MONITOR_MIGRATE_NON_SHARED_INC; - if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_UNIX){ + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX)) { internalret = qemuMonitorMigrateToUnix(priv->mon, background_flags, unixfile); } - else if (qemuCmdFlags & QEMU_CAPS_MIGRATE_QEMU_EXEC) { + else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { const char *args[] = { "nc", "-U", unixfile, NULL }; internalret = qemuMonitorMigrateToCommand(priv->mon, QEMU_MONITOR_MIGRATE_BACKGROUND, args); } else { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 0cb717d..937a840 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1159,7 +1159,7 @@ qemuProcessInitPasswords(virConnectPtr conn, if (ret < 0) goto cleanup; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { int i; for (i = 0 ; i < vm->def->ndisks ; i++) { @@ -1816,7 +1816,7 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa if (qemuCapsExtractVersionInfo(obj->def->emulator, obj->def->os.arch, NULL, &qemuCmdFlags) >= 0 && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { priv->persistentAddrs = 1; if (!(priv->pciaddrs = qemuDomainPCIAddressSetCreate(obj->def)) || @@ -2027,7 +2027,7 @@ int qemuProcessStart(virConnectPtr conn, goto cleanup; #if HAVE_YAJL - if (qemuCmdFlags & QEMU_CAPS_MONITOR_JSON) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MONITOR_JSON)) priv->monJSON = 1; else #endif @@ -2056,7 +2056,7 @@ int qemuProcessStart(virConnectPtr conn, * we also need to populate the PCi address set cache for later * use in hotplug */ - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { VIR_DEBUG0("Assigning domain PCI addresses"); /* Populate cache with current addresses */ if (priv->pciaddrs) { @@ -2190,7 +2190,7 @@ int qemuProcessStart(virConnectPtr conn, /* If we have -device, then addresses are assigned explicitly. * If not, then we have to detect dynamic ones here */ - if (!(qemuCmdFlags & QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { VIR_DEBUG0("Determining domain device PCI addresses"); if (qemuProcessInitPCIAddresses(driver, vm) < 0) goto cleanup; diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c index 11f1a67..75ecf58 100644 --- a/tests/qemuhelptest.c +++ b/tests/qemuhelptest.c @@ -57,7 +57,7 @@ static int testHelpStrParsing(const void *data) &version, &is_kvm, &kvm_version) == -1) goto cleanup; - if (info->flags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(info->flags, QEMU_CAPS_DEVICE)) { VIR_FREE(path); if (virAsprintf(&path, "%s/qemuhelpdata/%s-device", abs_srcdir, info->name) < 0) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 2f9e80c..a4fe43f 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -79,7 +79,7 @@ static int testCompareXMLToArgvFiles(const char *xml, goto fail; } - if (extraFlags & QEMU_CAPS_DOMID) + if (qemuCapsGet(extraFlags, QEMU_CAPS_DOMID)) vmdef->id = 6; else vmdef->id = -1; @@ -96,7 +96,7 @@ static int testCompareXMLToArgvFiles(const char *xml, if (qemudCanonicalizeMachine(&driver, vmdef) < 0) goto fail; - if (flags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(flags, QEMU_CAPS_DEVICE)) { qemuDomainPCIAddressSetPtr pciaddrs; if (!(pciaddrs = qemuDomainPCIAddressSetCreate(vmdef))) goto fail; -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
--- Notes: Version 2: - rebased to current master
I didn't spot any obvious changes from v1. The only remaining hits for 'git grep "qemuCmdFlags &"' were in docs/api_extension; but rewriting past patches is an awkward game to play, so I'm fine with leaving them alone. You missed my comment against v1 about at least mentioning the names of the new helper methods in the commit message, so that 'git log' makes it easier to search for their introduction: https://www.redhat.com/archives/libvir-list/2011-February/msg00264.html 'git grep "|= QEMU_CAPS"' shows that you missed a change that happened since v1: tests/qemuxml2argvtest.c added 'flags |= QEMU.*PCI_MULTIBUS', which should be converted as well (although I'm sure that it gets re-converted later in this series, we might as well make each patch complete rather than relying on later patches to touch it up). ACK with those two nits fixed. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:26:13 -0700, Eric Blake wrote:
I didn't spot any obvious changes from v1. The only remaining hits for 'git grep "qemuCmdFlags &"' were in docs/api_extension; but rewriting past patches is an awkward game to play, so I'm fine with leaving them alone.
Yeah, I left them alone intentionally :-)
You missed my comment against v1 about at least mentioning the names of the new helper methods in the commit message, so that 'git log' makes it easier to search for their introduction: https://www.redhat.com/archives/libvir-list/2011-February/msg00264.html
Oops, I fixed that.
'git grep "|= QEMU_CAPS"' shows that you missed a change that happened since v1: tests/qemuxml2argvtest.c added 'flags |= QEMU.*PCI_MULTIBUS', which should be converted as well (although I'm sure that it gets re-converted later in this series, we might as well make each patch complete rather than relying on later patches to touch it up).
I did a similar git grep but apparently I missed this single instance in the output :-( Thanks for spotting that.
ACK with those two nits fixed.
Thanks and pushed. Jirka

The new name comply more with the fact that it contains a set of qemuCapsFlags. --- Notes: Version 2: - rebased to current master src/qemu/qemu_capabilities.c | 10 +- src/qemu/qemu_capabilities.h | 8 +- src/qemu/qemu_command.c | 374 +++++++++++++++++++++--------------------- src/qemu/qemu_command.h | 28 ++-- src/qemu/qemu_driver.c | 44 +++--- src/qemu/qemu_hotplug.c | 162 +++++++++--------- src/qemu/qemu_hotplug.h | 32 ++-- src/qemu/qemu_migration.c | 20 +- src/qemu/qemu_process.c | 24 ++-- 9 files changed, 351 insertions(+), 351 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 94a2289..fbf426a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -377,7 +377,7 @@ error: int qemuCapsProbeCPUModels(const char *qemu, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const char *arch, unsigned int *count, const char ***cpus) @@ -400,7 +400,7 @@ qemuCapsProbeCPUModels(const char *qemu, } cmd = virCommandNewArgList(qemu, "-cpu", "?", NULL); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NODEFCONFIG)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NODEFCONFIG)) virCommandAddArg(cmd, "-nodefconfig"); virCommandAddEnvPassCommon(cmd); virCommandSetOutputBuffer(cmd, &output); @@ -442,7 +442,7 @@ qemuCapsInitGuest(virCapsPtr caps, int nmachines = 0; struct stat st; unsigned int ncpus; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; int ret = -1; /* Check for existance of base emulator, or alternate base @@ -558,8 +558,8 @@ qemuCapsInitGuest(virCapsPtr caps, !virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0)) goto error; - if (qemuCapsExtractVersionInfo(binary, info->arch, NULL, &qemuCmdFlags) < 0 || - (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX) && + if (qemuCapsExtractVersionInfo(binary, info->arch, NULL, &qemuCaps) < 0 || + (qemuCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX) && !virCapabilitiesAddGuestFeature(guest, "deviceboot", 1, 0))) goto error; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 6752136..d9eb782 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -111,7 +111,7 @@ int qemuCapsProbeMachineTypes(const char *binary, int *nmachines); int qemuCapsProbeCPUModels(const char *qemu, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const char *arch, unsigned int *count, const char ***cpus); @@ -120,16 +120,16 @@ int qemuCapsExtractVersion(virCapsPtr caps, unsigned int *version); int qemuCapsExtractVersionInfo(const char *qemu, const char *arch, unsigned int *version, - unsigned long long *qemuCmdFlags); + unsigned long long *qemuCaps); int qemuCapsParseHelpStr(const char *qemu, const char *str, - unsigned long long *qemuCmdFlags, + unsigned long long *qemuCaps, unsigned int *version, unsigned int *is_kvm, unsigned int *kvm_version); int qemuCapsParseDeviceStr(const char *str, - unsigned long long *qemuCmdFlags); + unsigned long long *qemuCaps); #endif /* __QEMU_CAPABILITIES_H__*/ diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b8bdbb1..99e044a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -100,7 +100,7 @@ uname_normalize (struct utsname *ut) * @conn: pointer to virConnect object * @driver: pointer to the qemud_driver * @net: pointer to he VM's interface description with direct device type - * @qemuCmdFlags: flags for qemu + * @qemuCaps: flags for qemu * @vmuuid: The UUID of the VM (needed by 802.1Qbh) * * Returns a filedescriptor on success or -1 in case of error. @@ -109,7 +109,7 @@ int qemuPhysIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const unsigned char *vmuuid, enum virVMOperationType vmop) { @@ -119,7 +119,7 @@ qemuPhysIfaceConnect(virConnectPtr conn, int vnet_hdr = 0; int err; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNET_HDR) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_VNET_HDR) && net->model && STREQ(net->model, "virtio")) vnet_hdr = 1; @@ -154,7 +154,7 @@ qemuPhysIfaceConnect(virConnectPtr conn, #else (void)conn; (void)net; - (void)qemuCmdFlags; + (void)qemuCaps; (void)driver; (void)vmuuid; (void)vmop; @@ -170,7 +170,7 @@ int qemuNetworkIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { char *brname = NULL; int err; @@ -241,7 +241,7 @@ qemuNetworkIfaceConnect(virConnectPtr conn, template_ifname = 1; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNET_HDR) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_VNET_HDR) && net->model && STREQ(net->model, "virtio")) vnet_hdr = 1; @@ -305,7 +305,7 @@ cleanup: static int qemuOpenVhostNet(virDomainNetDefPtr net, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, int *vhostfd) { @@ -319,9 +319,9 @@ qemuOpenVhostNet(virDomainNetDefPtr net, /* If qemu doesn't support vhost-net mode (including the -netdev command * option), don't try to open the device. */ - if (!(qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNET_HOST) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE))) { + if (!(qemuCapsGet(qemuCaps, QEMU_CAPS_VNET_HOST) && + qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE))) { if (net->driver.virtio.name == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is not supported with " @@ -403,11 +403,11 @@ static int qemuAssignDeviceDiskAliasLegacy(virDomainDiskDefPtr disk) char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, - unsigned long long qemudCmdFlags) + unsigned long long qemuCaps) { char *ret; - if (qemuCapsGet(qemudCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (virAsprintf(&ret, "%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias) < 0) { virReportOOMError(); return NULL; @@ -501,10 +501,10 @@ no_memory: int -qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCmdFlags) +qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCaps) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE)) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) return qemuAssignDeviceDiskAliasCustom(def); else return qemuAssignDeviceDiskAliasFixed(def); @@ -584,23 +584,23 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller) static int -qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCmdFlags) +qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCaps) { int i; for (i = 0; i < def->ndisks ; i++) { - if (qemuAssignDeviceDiskAlias(def->disks[i], qemuCmdFlags) < 0) + if (qemuAssignDeviceDiskAlias(def->disks[i], qemuCaps) < 0) return -1; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NET_NAME) || - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NET_NAME) || + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { for (i = 0; i < def->nnets ; i++) { if (qemuAssignDeviceNetAlias(def, def->nets[i], i) < 0) return -1; } } - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) return 0; for (i = 0; i < def->nfss ; i++) { @@ -720,15 +720,15 @@ int qemuDomainAssignPCIAddresses(virDomainDefPtr def) { int ret = -1; - unsigned long long qemuCmdFlags = 0; + unsigned long long qemuCaps = 0; qemuDomainPCIAddressSetPtr addrs = NULL; if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto cleanup; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (!(addrs = qemuDomainPCIAddressSetCreate(def))) goto cleanup; @@ -1126,7 +1126,7 @@ error: static int qemuBuildDeviceAddressStr(virBufferPtr buf, virDomainDeviceInfoPtr info, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { if (info->addr.pci.domain != 0) { @@ -1151,7 +1151,7 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, * When QEMU grows support for > 1 PCI domain, then pci.0 change * to pciNN.0 where NN is the domain number */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_MULTIBUS)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS)) virBufferVSprintf(buf, ",bus=pci.0,addr=0x%x", info->addr.pci.slot); else virBufferVSprintf(buf, ",bus=pci,addr=0x%x", info->addr.pci.slot); @@ -1180,7 +1180,7 @@ qemuSafeSerialParamValue(const char *value) char * qemuBuildDriveStr(virDomainDiskDefPtr disk, int bootable, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); @@ -1311,7 +1311,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferVSprintf(&opt, "file=%s,", disk->src); } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) virBufferAddLit(&opt, "if=none"); else virBufferVSprintf(&opt, "if=%s", bus); @@ -1319,7 +1319,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) virBufferAddLit(&opt, ",media=cdrom"); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virBufferVSprintf(&opt, ",id=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); } else { if (busid == -1 && unitid == -1) { @@ -1337,14 +1337,14 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, disk->bus != VIR_DOMAIN_DISK_BUS_IDE) virBufferAddLit(&opt, ",boot=on"); if (disk->readonly && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_READONLY)) + qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_READONLY)) virBufferAddLit(&opt, ",readonly=on"); if (disk->driverType && *disk->driverType != '\0' && disk->type != VIR_DOMAIN_DISK_TYPE_DIR && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_FORMAT)) + qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_FORMAT)) virBufferVSprintf(&opt, ",format=%s", disk->driverType); if (disk->serial && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_SERIAL)) { + qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_SERIAL)) { if (qemuSafeSerialParamValue(disk->serial) < 0) goto error; virBufferVSprintf(&opt, ",serial=%s", disk->serial); @@ -1352,7 +1352,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->cachemode) { const char *mode = - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_CACHE_V2) ? + qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_V2) ? qemuDiskCacheV2TypeToString(disk->cachemode) : qemuDiskCacheV1TypeToString(disk->cachemode); @@ -1361,7 +1361,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferAddLit(&opt, ",cache=off"); } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MONITOR_JSON)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_MONITOR_JSON)) { if (disk->error_policy) { virBufferVSprintf(&opt, ",werror=%s,rerror=%s", virDomainDiskErrorPolicyTypeToString(disk->error_policy), @@ -1370,7 +1370,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, } if (disk->iomode) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_AIO)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_AIO)) { virBufferVSprintf(&opt, ",aio=%s", virDomainDiskIoTypeToString(disk->iomode)); } else { @@ -1396,7 +1396,7 @@ error: char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); @@ -1424,7 +1424,7 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk, break; case VIR_DOMAIN_DISK_BUS_VIRTIO: virBufferAddLit(&opt, "virtio-blk-pci"); - qemuBuildDeviceAddressStr(&opt, &disk->info, qemuCmdFlags); + qemuBuildDeviceAddressStr(&opt, &disk->info, qemuCaps); break; case VIR_DOMAIN_DISK_BUS_USB: virBufferAddLit(&opt, "usb-storage"); @@ -1436,7 +1436,7 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk, } virBufferVSprintf(&opt, ",drive=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); virBufferVSprintf(&opt, ",id=%s", disk->info.alias); - if (disk->bootIndex && qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) + if (disk->bootIndex && qemuCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) virBufferVSprintf(&opt, ",bootindex=%d", disk->bootIndex); if (virBufferError(&opt)) { @@ -1453,7 +1453,7 @@ error: char *qemuBuildFSStr(virDomainFSDefPtr fs, - unsigned long long qemuCmdFlags ATTRIBUTE_UNUSED) + unsigned long long qemuCaps ATTRIBUTE_UNUSED) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1489,7 +1489,7 @@ error: char * qemuBuildFSDevStr(virDomainFSDefPtr fs, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1503,7 +1503,7 @@ qemuBuildFSDevStr(virDomainFSDefPtr fs, virBufferVSprintf(&opt, ",id=%s", fs->info.alias); virBufferVSprintf(&opt, ",fsdev=%s%s", QEMU_FSDEV_HOST_PREFIX, fs->info.alias); virBufferVSprintf(&opt, ",mount_tag=%s", fs->dst); - qemuBuildDeviceAddressStr(&opt, &fs->info, qemuCmdFlags); + qemuBuildDeviceAddressStr(&opt, &fs->info, qemuCaps); if (virBufferError(&opt)) { virReportOOMError(); @@ -1520,7 +1520,7 @@ error: char * qemuBuildControllerDevStr(virDomainControllerDefPtr def, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1561,7 +1561,7 @@ qemuBuildControllerDevStr(virDomainControllerDefPtr def, goto error; } - if (qemuBuildDeviceAddressStr(&buf, &def->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &def->info, qemuCaps) < 0) goto error; if (virBufferError(&buf)) { @@ -1605,7 +1605,7 @@ qemuBuildNicStr(virDomainNetDefPtr net, char * qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *nic; @@ -1622,7 +1622,7 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, virBufferAdd(&buf, nic, strlen(nic)); if (usingVirtio && net->driver.virtio.txmode) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VIRTIO_TX_ALG)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_TX_ALG)) { virBufferAddLit(&buf, ",tx="); switch (net->driver.virtio.txmode) { case VIR_DOMAIN_NET_VIRTIO_TX_MODE_IOTHREAD: @@ -1655,9 +1655,9 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, net->mac[0], net->mac[1], net->mac[2], net->mac[3], net->mac[4], net->mac[5]); - if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &net->info, qemuCaps) < 0) goto error; - if (net->bootIndex && qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) + if (net->bootIndex && qemuCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) virBufferVSprintf(&buf, ",bootindex=%d", net->bootIndex); if (virBufferError(&buf)) { @@ -1777,7 +1777,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1790,7 +1790,7 @@ qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, virBufferVSprintf(&buf, "%s", model); virBufferVSprintf(&buf, ",id=%s", dev->info.alias); - if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCaps) < 0) goto error; if (virBufferError(&buf)) { @@ -1808,13 +1808,13 @@ error: char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; virBufferAddLit(&buf, "virtio-balloon-pci"); virBufferVSprintf(&buf, ",id=%s", dev->info.alias); - if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCaps) < 0) goto error; if (virBufferError(&buf)) { @@ -1855,7 +1855,7 @@ error: char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *model = virDomainSoundModelTypeToString(sound->model); @@ -1876,7 +1876,7 @@ qemuBuildSoundDevStr(virDomainSoundDefPtr sound, virBufferVSprintf(&buf, "%s", model); virBufferVSprintf(&buf, ",id=%s", sound->info.alias); - if (qemuBuildDeviceAddressStr(&buf, &sound->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &sound->info, qemuCaps) < 0) goto error; if (virBufferError(&buf)) { @@ -1917,7 +1917,7 @@ error: static char * qemuBuildVideoDevStr(virDomainVideoDefPtr video, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *model = qemuVideoTypeToString(video->type); @@ -1930,7 +1930,7 @@ qemuBuildVideoDevStr(virDomainVideoDefPtr video, virBufferVSprintf(&buf, "%s", model); virBufferVSprintf(&buf, ",id=%s", video->info.alias); - if (qemuBuildDeviceAddressStr(&buf, &video->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &video->info, qemuCaps) < 0) goto error; if (virBufferError(&buf)) { @@ -1973,7 +1973,7 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev) char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1987,7 +1987,7 @@ qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, virBufferVSprintf(&buf, ",configfd=%s", configfd); if (dev->bootIndex) virBufferVSprintf(&buf, ",bootindex=%d", dev->bootIndex); - if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCmdFlags) < 0) + if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCaps) < 0) goto error; if (virBufferError(&buf)) { @@ -2066,7 +2066,7 @@ qemuBuildUSBHostdevUsbDevStr(virDomainHostdevDefPtr dev) * host side of the character device */ static char * qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; bool telnet; @@ -2134,7 +2134,7 @@ qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias, break; case VIR_DOMAIN_CHR_TYPE_SPICEVMC: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV_SPICEVMC)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_SPICEVMC)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("spicevmc not supported in this QEMU binary")); goto error; @@ -2244,12 +2244,12 @@ error: static char * qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE) virBufferAddLit(&buf, "virtconsole"); - else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE_SPICEVMC) && + else if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC) && dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) virBufferAddLit(&buf, "spicevmc"); else @@ -2282,7 +2282,7 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, dev->target.name); goto error; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE_SPICEVMC) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC) && dev->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { virBufferVSprintf(&buf, ",id=%s", dev->info.alias); } else { @@ -2482,7 +2482,7 @@ static int qemuBuildCpuArgStr(const struct qemud_driver *driver, const virDomainDefPtr def, const char *emulator, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const struct utsname *ut, char **opt, bool *hasHwVirt) @@ -2500,7 +2500,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver, if (def->cpu && def->cpu->model) { if (host && - qemuCapsProbeCPUModels(emulator, qemuCmdFlags, host->arch, + qemuCapsProbeCPUModels(emulator, qemuCaps, host->arch, &ncpus, &cpus) < 0) goto cleanup; @@ -2607,13 +2607,13 @@ no_memory: static char * qemuBuildSmpArgStr(const virDomainDefPtr def, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; virBufferVSprintf(&buf, "%u", def->vcpus); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SMP_TOPOLOGY)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_SMP_TOPOLOGY)) { if (def->vcpus != def->maxvcpus) virBufferVSprintf(&buf, ",maxcpus=%u", def->maxvcpus); /* sockets, cores, and threads are either all zero @@ -2660,7 +2660,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainDefPtr def, virDomainChrSourceDefPtr monitor_chr, bool monitor_json, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const char *migrateFrom, int migrateFd, virDomainSnapshotObjPtr current_snapshot, @@ -2685,7 +2685,7 @@ qemuBuildCommandLine(virConnectPtr conn, uname_normalize(&ut); - if (qemuAssignDeviceAliases(def, qemuCmdFlags) < 0) + if (qemuAssignDeviceAliases(def, qemuCaps) < 0) return NULL; virUUIDFormat(def->uuid, uuid); @@ -2696,25 +2696,25 @@ qemuBuildCommandLine(virConnectPtr conn, * do not use boot=on for drives when not using KVM since this * is not supported at all in upstream QEmu. */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_KVM) && (def->virtType == VIR_DOMAIN_VIRT_QEMU)) - qemuCapsClear(&qemuCmdFlags, QEMU_CAPS_DRIVE_BOOT); + qemuCapsClear(&qemuCaps, QEMU_CAPS_DRIVE_BOOT); switch (def->virtType) { case VIR_DOMAIN_VIRT_QEMU: - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KQEMU)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_KQEMU)) disableKQEMU = 1; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_KVM)) disableKVM = 1; break; case VIR_DOMAIN_VIRT_KQEMU: - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_KVM)) disableKVM = 1; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_ENABLE_KQEMU)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_ENABLE_KQEMU)) { enableKQEMU = 1; - } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KQEMU)) { + } else if (!qemuCapsGet(qemuCaps, QEMU_CAPS_KQEMU)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support kqemu"), emulator); @@ -2722,12 +2722,12 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_VIRT_KVM: - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KQEMU)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_KQEMU)) disableKQEMU = 1; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_ENABLE_KVM)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_ENABLE_KVM)) { enableKVM = 1; - } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_KVM)) { + } else if (!qemuCapsGet(qemuCaps, QEMU_CAPS_KVM)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support kvm"), emulator); @@ -2756,7 +2756,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (def->os.machine) virCommandAddArgList(cmd, "-M", def->os.machine, NULL); - if (qemuBuildCpuArgStr(driver, def, emulator, qemuCmdFlags, + if (qemuBuildCpuArgStr(driver, def, emulator, qemuCaps, &ut, &cpu, &hasHwVirt) < 0) goto error; @@ -2764,7 +2764,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArgList(cmd, "-cpu", cpu, NULL); VIR_FREE(cpu); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NESTING) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NESTING) && hasHwVirt) virCommandAddArg(cmd, "-enable-nesting"); } @@ -2795,7 +2795,7 @@ qemuBuildCommandLine(virConnectPtr conn, "%s", _("hugepages are disabled by administrator config")); goto error; } - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MEM_PATH)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_MEM_PATH)) { qemuReportError(VIR_ERR_INTERNAL_ERROR, _("hugepage backing not supported by '%s'"), def->emulator); @@ -2806,30 +2806,30 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, "-smp"); - if (!(smp = qemuBuildSmpArgStr(def, qemuCmdFlags))) + if (!(smp = qemuBuildSmpArgStr(def, qemuCaps))) goto error; virCommandAddArg(cmd, smp); VIR_FREE(smp); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NAME)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NAME)) { virCommandAddArg(cmd, "-name"); if (driver->setProcessName && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NAME_PROCESS)) { + qemuCapsGet(qemuCaps, QEMU_CAPS_NAME_PROCESS)) { virCommandAddArgFormat(cmd, "%s,process=qemu:%s", def->name, def->name); } else { virCommandAddArg(cmd, def->name); } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_UUID)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_UUID)) virCommandAddArgList(cmd, "-uuid", uuid, NULL); if (def->virtType == VIR_DOMAIN_VIRT_XEN || STREQ(def->os.type, "xen") || STREQ(def->os.type, "linux")) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DOMID)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DOMID)) { virCommandAddArg(cmd, "-domid"); virCommandAddArgFormat(cmd, "%d", def->id); - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_XEN_DOMID)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_XEN_DOMID)) { virCommandAddArg(cmd, "-xen-attach"); virCommandAddArg(cmd, "-xen-domid"); virCommandAddArgFormat(cmd, "%d", def->id); @@ -2846,7 +2846,7 @@ qemuBuildCommandLine(virConnectPtr conn, virSysinfoDefPtr source = NULL; bool skip_uuid = false; - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SMBIOS_TYPE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_SMBIOS_TYPE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("the QEMU binary %s does not support smbios settings"), emulator); @@ -2899,8 +2899,8 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->graphics) virCommandAddArg(cmd, "-nographic"); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NODEFCONFIG)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NODEFCONFIG)) virCommandAddArg(cmd, "-nodefconfig"); /* Disable global config files */ virCommandAddArg(cmd, @@ -2910,11 +2910,11 @@ qemuBuildCommandLine(virConnectPtr conn, if (monitor_chr) { char *chrdev; /* Use -chardev if it's available */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV)) { virCommandAddArg(cmd, "-chardev"); if (!(chrdev = qemuBuildChrChardevStr(monitor_chr, "monitor", - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, chrdev); VIR_FREE(chrdev); @@ -2936,7 +2936,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_RTC)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_RTC)) { const char *rtcopt; virCommandAddArg(cmd, "-rtc"); if (!(rtcopt = qemuBuildClockArgStr(&def->clock))) @@ -2980,7 +2980,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* This has already been taken care of (in qemuBuildClockArgStr) if QEMU_CAPS_RTC is set (mutually exclusive with QEMUD_FLAG_RTC_TD_HACK) */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_RTC_TD_HACK)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_RTC_TD_HACK)) { switch (def->clock.timers[i]->tickpolicy) { case -1: case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY: @@ -2996,7 +2996,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainTimerTickpolicyTypeToString(def->clock.timers[i]->tickpolicy)); goto error; } - } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_RTC) + } else if (!qemuCapsGet(qemuCaps, QEMU_CAPS_RTC) && (def->clock.timers[i]->tickpolicy != VIR_DOMAIN_TIMER_TICKPOLICY_DELAY) && (def->clock.timers[i]->tickpolicy != -1)) { @@ -3015,13 +3015,13 @@ qemuBuildCommandLine(virConnectPtr conn, case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY: /* delay is the default if we don't have kernel (-no-kvm-pit), otherwise, the default is catchup. */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_KVM_PIT)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NO_KVM_PIT)) virCommandAddArg(cmd, "-no-kvm-pit-reinjection"); break; case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP: - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_KVM_PIT)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NO_KVM_PIT)) { /* do nothing - this is default for kvm-pit */ - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_TDF)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_TDF)) { /* -tdf switches to 'catchup' with userspace pit. */ virCommandAddArg(cmd, "-tdf"); } else { @@ -3050,7 +3050,7 @@ qemuBuildCommandLine(virConnectPtr conn, * and when -no-hpet doesn't exist is "no". "confusing"? * "yes"! */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_HPET)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NO_HPET)) { if (def->clock.timers[i]->present == 0) virCommandAddArg(cmd, "-no-hpet"); } else { @@ -3065,7 +3065,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NO_REBOOT) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NO_REBOOT) && def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART) virCommandAddArg(cmd, "-no-reboot"); @@ -3098,7 +3098,7 @@ qemuBuildCommandLine(virConnectPtr conn, boot[def->os.nBootDevs] = '\0'; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOT_MENU) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_BOOT_MENU) && def->os.bootmenu != VIR_DOMAIN_BOOT_MENU_DEFAULT) { if (def->os.bootmenu == VIR_DOMAIN_BOOT_MENU_ENABLED) virBufferVSprintf(&boot_buf, "order=%s,menu=on", boot); @@ -3109,7 +3109,7 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArgBuffer(cmd, &boot_buf); - } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) { + } else if (!qemuCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) { /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot * configuration is used */ @@ -3140,7 +3140,7 @@ qemuBuildCommandLine(virConnectPtr conn, } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { for (i = 0 ; i < def->ncontrollers ; i++) { virDomainControllerDefPtr cont = def->controllers[i]; @@ -3161,7 +3161,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-device"); char *devstr; - if (!(devstr = qemuBuildControllerDevStr(def->controllers[i], qemuCmdFlags))) + if (!(devstr = qemuBuildControllerDevStr(def->controllers[i], qemuCaps))) goto error; virCommandAddArg(cmd, devstr); @@ -3170,11 +3170,11 @@ qemuBuildCommandLine(virConnectPtr conn, } /* If QEMU supports -drive param instead of old -hda, -hdb, -cdrom .. */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE)) { int bootCD = 0, bootFloppy = 0, bootDisk = 0; /* If QEMU supports boot=on for -drive param... */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_BOOT) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_BOOT) && !def->os.kernel) { for (i = 0 ; i < def->os.nBootDevs ; i++) { switch (def->os.bootDevs[i]) { @@ -3202,7 +3202,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* Unless we have -device, then USB disks need special handling */ if ((disk->bus == VIR_DOMAIN_DISK_BUS_USB) && - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + !qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) { virCommandAddArg(cmd, "-usbdevice"); virCommandAddArgFormat(cmd, "disk:%s", disk->src); @@ -3237,17 +3237,17 @@ qemuBuildCommandLine(virConnectPtr conn, devices. Fortunately, those don't need static PCI addresses, so we don't really care that we can't use -device */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (disk->bus != VIR_DOMAIN_DISK_BUS_XEN) { withDeviceArg = 1; } else { - qemuCapsClear(&qemuCmdFlags, QEMU_CAPS_DEVICE); + qemuCapsClear(&qemuCaps, QEMU_CAPS_DEVICE); deviceFlagMasked = true; } } - optstr = qemuBuildDriveStr(disk, bootable, qemuCmdFlags); + optstr = qemuBuildDriveStr(disk, bootable, qemuCaps); if (deviceFlagMasked) - qemuCapsSet(&qemuCmdFlags, QEMU_CAPS_DEVICE); + qemuCapsSet(&qemuCaps, QEMU_CAPS_DEVICE); if (!optstr) goto error; virCommandAddArg(cmd, optstr); @@ -3283,7 +3283,7 @@ qemuBuildCommandLine(virConnectPtr conn, disk->info.alias); if (disk->bootIndex && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX)) { + qemuCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) { virCommandAddArg(cmd, "-global"); virCommandAddArgFormat(cmd, "isa-fdc.bootindex%c=%d", disk->info.addr.drive.unit @@ -3293,7 +3293,7 @@ qemuBuildCommandLine(virConnectPtr conn, } else { virCommandAddArg(cmd, "-device"); - if (!(optstr = qemuBuildDriveDevStr(disk, qemuCmdFlags))) + if (!(optstr = qemuBuildDriveDevStr(disk, qemuCaps))) goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); @@ -3408,19 +3408,19 @@ qemuBuildCommandLine(virConnectPtr conn, if (has_rbd_hosts) virCommandAddEnvBuffer(cmd, &rbd_hosts); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_FSDEV)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_FSDEV)) { for (i = 0 ; i < def->nfss ; i++) { char *optstr; virDomainFSDefPtr fs = def->fss[i]; virCommandAddArg(cmd, "-fsdev"); - if (!(optstr = qemuBuildFSStr(fs, qemuCmdFlags))) + if (!(optstr = qemuBuildFSStr(fs, qemuCaps))) goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); virCommandAddArg(cmd, "-device"); - if (!(optstr = qemuBuildFSDevStr(fs, qemuCmdFlags))) + if (!(optstr = qemuBuildFSDevStr(fs, qemuCaps))) goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); @@ -3435,7 +3435,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nnets) { /* If we have -device, then we set -nodefault already */ - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-net", "none", NULL); } else { for (i = 0 ; i < def->nnets ; i++) { @@ -3446,8 +3446,8 @@ qemuBuildCommandLine(virConnectPtr conn, int vlan; /* VLANs are not used with -netdev, so don't record them */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) vlan = -1; else vlan = i; @@ -3455,7 +3455,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK || net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { int tapfd = qemuNetworkIfaceConnect(conn, driver, net, - qemuCmdFlags); + qemuCaps); if (tapfd < 0) goto error; @@ -3467,7 +3467,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto no_memory; } else if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) { int tapfd = qemuPhysIfaceConnect(conn, driver, net, - qemuCmdFlags, + qemuCaps, def->uuid, vmop); if (tapfd < 0) @@ -3488,7 +3488,7 @@ qemuBuildCommandLine(virConnectPtr conn, network device */ int vhostfd; - if (qemuOpenVhostNet(net, qemuCmdFlags, &vhostfd) < 0) + if (qemuOpenVhostNet(net, qemuCaps, &vhostfd) < 0) goto error; if (vhostfd >= 0) { virCommandTransferFD(cmd, vhostfd); @@ -3506,8 +3506,8 @@ qemuBuildCommandLine(virConnectPtr conn, * * NB, no support for -netdev without use of -device */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-netdev"); if (!(host = qemuBuildHostNetStr(net, ',', vlan, tapfd_name, vhostfd_name))) @@ -3515,9 +3515,9 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, host); VIR_FREE(host); } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-device"); - if (!(nic = qemuBuildNicDevStr(net, vlan, qemuCmdFlags))) + if (!(nic = qemuBuildNicDevStr(net, vlan, qemuCaps))) goto error; virCommandAddArg(cmd, nic); VIR_FREE(nic); @@ -3528,8 +3528,8 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, nic); VIR_FREE(nic); } - if (!(qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE))) { + if (!(qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE))) { virCommandAddArg(cmd, "-net"); if (!(host = qemuBuildHostNetStr(net, ',', vlan, tapfd_name, vhostfd_name))) @@ -3562,8 +3562,8 @@ qemuBuildCommandLine(virConnectPtr conn, switch (smartcard->type) { case VIR_DOMAIN_SMARTCARD_TYPE_HOST: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CCID_EMULATED)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCaps, QEMU_CAPS_CCID_EMULATED)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard host " "mode support")); @@ -3574,8 +3574,8 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CCID_EMULATED)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCaps, QEMU_CAPS_CCID_EMULATED)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard host " "mode support")); @@ -3610,8 +3610,8 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CCID_PASSTHRU)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCaps, QEMU_CAPS_CCID_PASSTHRU)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks smartcard " "passthrough mode support")); @@ -3621,7 +3621,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&smartcard->data.passthru, smartcard->info.alias, - qemuCmdFlags))) { + qemuCaps))) { virBufferFreeAndReset(&opt); goto error; } @@ -3646,7 +3646,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nserials) { /* If we have -device, then we set -nodefault already */ - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-serial", "none", NULL); } else { for (i = 0 ; i < def->nserials ; i++) { @@ -3654,12 +3654,12 @@ qemuBuildCommandLine(virConnectPtr conn, char *devstr; /* Use -chardev with -device if they are available */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&serial->source, serial->info.alias, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3679,7 +3679,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (!def->nparallels) { /* If we have -device, then we set -nodefault already */ - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) virCommandAddArgList(cmd, "-parallel", "none", NULL); } else { for (i = 0 ; i < def->nparallels ; i++) { @@ -3687,12 +3687,12 @@ qemuBuildCommandLine(virConnectPtr conn, char *devstr; /* Use -chardev with -device if they are available */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(¶llel->source, parallel->info.alias, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3717,8 +3717,8 @@ qemuBuildCommandLine(virConnectPtr conn, switch(channel->targetType) { case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_CHARDEV) || - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_CHARDEV) || + !qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("guestfwd requires QEMU to support -chardev & -device")); goto error; @@ -3727,7 +3727,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&channel->source, channel->info.alias, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3746,13 +3746,13 @@ qemuBuildCommandLine(virConnectPtr conn, break; case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("virtio channel requires QEMU to support -device")); goto error; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE_SPICEVMC) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPICEVMC) && channel->source.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) { /* spicevmc was originally introduced via a -device * with a backend internal to qemu; although we prefer @@ -3762,7 +3762,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&channel->source, channel->info.alias, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3770,7 +3770,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildVirtioSerialPortDevStr(channel, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3785,7 +3785,7 @@ qemuBuildCommandLine(virConnectPtr conn, switch(console->targetType) { case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO: - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_NO_SUPPORT, "%s", _("virtio channel requires QEMU to support -device")); goto error; @@ -3794,14 +3794,14 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&console->source, console->info.alias, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildVirtioSerialPortDevStr(console, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3823,7 +3823,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainInputDefPtr input = def->inputs[i]; if (input->bus == VIR_DOMAIN_INPUT_BUS_USB) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { char *optstr; virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildUSBInputDevStr(input))) @@ -3860,7 +3860,7 @@ qemuBuildCommandLine(virConnectPtr conn, virBufferVSprintf(&opt, "unix:%s", def->graphics[0]->data.vnc.socket); - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNC_COLON)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_VNC_COLON)) { if (def->graphics[0]->data.vnc.listenAddr) virBufferAdd(&opt, def->graphics[0]->data.vnc.listenAddr, -1); else if (driver->vncListen) @@ -3874,7 +3874,7 @@ qemuBuildCommandLine(virConnectPtr conn, def->graphics[0]->data.vnc.port - 5900); } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VNC_COLON)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_VNC_COLON)) { if (def->graphics[0]->data.vnc.auth.passwd || driver->vncPassword) virBufferAddLit(&opt, ",password"); @@ -3919,8 +3919,8 @@ qemuBuildCommandLine(virConnectPtr conn, } } else if ((def->ngraphics == 1) && def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_0_10) && - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SDL)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_0_10) && + !qemuCapsGet(qemuCaps, QEMU_CAPS_SDL)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("sdl not supported by '%s'"), def->emulator); @@ -3946,14 +3946,14 @@ qemuBuildCommandLine(virConnectPtr conn, /* New QEMU has this flag to let us explicitly ask for * SDL graphics. This is better than relying on the * default, since the default changes :-( */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SDL)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_SDL)) virCommandAddArg(cmd, "-sdl"); } else if ((def->ngraphics == 1) && def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) { virBuffer opt = VIR_BUFFER_INITIALIZER; - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_SPICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_SPICE)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("spice graphics are not supported with this QEMU")); goto error; @@ -4012,12 +4012,12 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->nvideos > 0) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_VGA)) { if (def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_XEN) { /* nothing - vga has no effect on Xen pvfb */ } else { if ((def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_QXL) && - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA_QXL)) { + !qemuCapsGet(qemuCaps, QEMU_CAPS_VGA_QXL)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU does not support QXL graphics adapters")); goto error; @@ -4058,7 +4058,7 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->nvideos > 1) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { for (i = 1 ; i < def->nvideos ; i++) { char *str; if (def->videos[i]->type != VIR_DOMAIN_VIDEO_TYPE_QXL) { @@ -4070,7 +4070,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-device"); - if (!(str = qemuBuildVideoDevStr(def->videos[i], qemuCmdFlags))) + if (!(str = qemuBuildVideoDevStr(def->videos[i], qemuCaps))) goto error; virCommandAddArg(cmd, str); @@ -4085,15 +4085,15 @@ qemuBuildCommandLine(virConnectPtr conn, } else { /* If we have -device, then we set -nodefault already */ - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_VGA_NONE)) + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && + qemuCapsGet(qemuCaps, QEMU_CAPS_VGA) && + qemuCapsGet(qemuCaps, QEMU_CAPS_VGA_NONE)) virCommandAddArgList(cmd, "-vga", "none", NULL); } /* Add sound hardware */ if (def->nsounds) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { for (i = 0 ; i < def->nsounds ; i++) { virDomainSoundDefPtr sound = def->sounds[i]; char *str = NULL; @@ -4105,14 +4105,14 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArgList(cmd, "-soundhw", "pcspk", NULL); } else { virCommandAddArg(cmd, "-device"); - if (!(str = qemuBuildSoundDevStr(sound, qemuCmdFlags))) + if (!(str = qemuBuildSoundDevStr(sound, qemuCaps))) goto error; virCommandAddArg(cmd, str); if (sound->model == VIR_DOMAIN_SOUND_MODEL_ICH6) { char *codecstr = NULL; - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_HDA_DUPLEX)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_HDA_DUPLEX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("this QEMU binary lacks hda support")); goto error; @@ -4168,10 +4168,10 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainWatchdogDefPtr watchdog = def->watchdog; char *optstr; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-device"); - optstr = qemuBuildWatchdogDevStr(watchdog, qemuCmdFlags); + optstr = qemuBuildWatchdogDevStr(watchdog, qemuCaps); if (!optstr) goto error; } else { @@ -4214,7 +4214,7 @@ qemuBuildCommandLine(virConnectPtr conn, _("booting from assigned devices is only" " supported for PCI devices")); goto error; - } else if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_BOOTINDEX)) { + } else if (!qemuCapsGet(qemuCaps, QEMU_CAPS_PCI_BOOTINDEX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("booting from assigned PCI devices is not" " supported with this version of qemu")); @@ -4226,7 +4226,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildUSBHostdevDevStr(hostdev))) goto error; @@ -4244,9 +4244,9 @@ qemuBuildCommandLine(virConnectPtr conn, /* PCI */ if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { char *configfd_name = NULL; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_CONFIGFD)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_PCI_CONFIGFD)) { int configfd = qemuOpenPCIConfig(hostdev); if (configfd >= 0) { @@ -4259,13 +4259,13 @@ qemuBuildCommandLine(virConnectPtr conn, } } virCommandAddArg(cmd, "-device"); - devstr = qemuBuildPCIHostdevDevStr(hostdev, configfd_name, qemuCmdFlags); + devstr = qemuBuildPCIHostdevDevStr(hostdev, configfd_name, qemuCaps); VIR_FREE(configfd_name); if (!devstr) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCIDEVICE)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_PCIDEVICE)) { virCommandAddArg(cmd, "-pcidevice"); if (!(devstr = qemuBuildPCIHostdevPCIDevStr(hostdev))) goto error; @@ -4285,7 +4285,7 @@ qemuBuildCommandLine(virConnectPtr conn, if (migrateFrom) { virCommandAddArg(cmd, "-incoming"); if (STRPREFIX(migrateFrom, "tcp")) { - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_TCP)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_TCP)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("TCP migration is not supported with " "this QEMU binary")); @@ -4293,13 +4293,13 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, migrateFrom); } else if (STREQ(migrateFrom, "stdio")) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_FD)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD)) { virCommandAddArgFormat(cmd, "fd:%d", migrateFd); virCommandPreserveFD(cmd, migrateFd); - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { virCommandAddArg(cmd, "exec:cat"); virCommandSetInputFD(cmd, migrateFd); - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_KVM_STDIO)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_KVM_STDIO)) { virCommandAddArg(cmd, migrateFrom); virCommandSetInputFD(cmd, migrateFd); } else { @@ -4309,7 +4309,7 @@ qemuBuildCommandLine(virConnectPtr conn, goto error; } } else if (STRPREFIX(migrateFrom, "exec")) { - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("EXEC migration is not supported " "with this QEMU binary")); @@ -4317,7 +4317,7 @@ qemuBuildCommandLine(virConnectPtr conn, } virCommandAddArg(cmd, migrateFrom); } else if (STRPREFIX(migrateFrom, "fd")) { - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_FD)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("FD migration is not supported " "with this QEMU binary")); @@ -4326,7 +4326,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, migrateFrom); virCommandPreserveFD(cmd, migrateFd); } else if (STRPREFIX(migrateFrom, "unix")) { - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_UNIX)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("UNIX migration is not supported " "with this QEMU binary")); @@ -4354,16 +4354,16 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainMemballoonModelTypeToString(def->memballoon->model)); goto error; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { char *optstr; virCommandAddArg(cmd, "-device"); - optstr = qemuBuildMemballoonDevStr(def->memballoon, qemuCmdFlags); + optstr = qemuBuildMemballoonDevStr(def->memballoon, qemuCaps); if (!optstr) goto error; virCommandAddArg(cmd, optstr); VIR_FREE(optstr); - } else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BALLOON)) { + } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_BALLOON)) { virCommandAddArgList(cmd, "-balloon", "virtio", NULL); } } diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 52d169a..332d5a3 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -46,7 +46,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn, virDomainDefPtr def, virDomainChrSourceDefPtr monitor_chr, bool monitor_json, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const char *migrateFrom, int migrateFd, virDomainSnapshotObjPtr current_snapshot, @@ -68,44 +68,44 @@ char * qemuBuildNicStr(virDomainNetDefPtr net, /* Current, best practice */ char * qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); /* Both legacy & current support */ char *qemuBuildDriveStr(virDomainDiskDefPtr disk, int bootable, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); char *qemuBuildFSStr(virDomainFSDefPtr fs, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); /* Current, best practice */ char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); char * qemuBuildFSDevStr(virDomainFSDefPtr fs, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); /* Current, best practice */ char * qemuBuildControllerDevStr(virDomainControllerDefPtr def, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); char * qemuBuildUSBInputDevStr(virDomainInputDefPtr dev); char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); /* Legacy, pre device support */ char * qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev); /* Current, best practice */ char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuOpenPCIConfig(virDomainHostdevDefPtr dev); @@ -125,7 +125,7 @@ int qemuNetworkIfaceConnect(virConnectPtr conn, int qemuPhysIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const unsigned char *vmuuid, enum virVMOperationType vmop); @@ -156,7 +156,7 @@ int qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr ad int qemuDomainNetVLAN(virDomainNetDefPtr def); int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx); -int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCmdFlags); +int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCaps); int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr net, int idx); int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0f25a2a..6dc356e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3535,7 +3535,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, struct qemud_driver *driver = conn->privateData; virDomainDefPtr def = NULL; virDomainChrSourceDef monConfig; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; virCommandPtr cmd = NULL; char *ret = NULL; int i; @@ -3592,14 +3592,14 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto cleanup; if (qemuProcessPrepareMonitorChr(driver, &monConfig, def->name) < 0) goto cleanup; if (!(cmd = qemuBuildCommandLine(conn, driver, def, - &monConfig, false, qemuCmdFlags, + &monConfig, false, qemuCaps, NULL, -1, NULL, VIR_VM_OP_NO_OP))) goto cleanup; @@ -3944,7 +3944,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom, struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; virDomainDeviceDefPtr dev = NULL; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; virCgroupPtr cgroup = NULL; int ret = -1; @@ -3974,7 +3974,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom, if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto endjob; if (dev->type == VIR_DOMAIN_DEVICE_DISK) { @@ -3994,7 +3994,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom, case VIR_DOMAIN_DISK_DEVICE_FLOPPY: ret = qemuDomainChangeEjectableMedia(driver, vm, dev->data.disk, - qemuCmdFlags, + qemuCaps, false); if (ret == 0) dev->data.disk = NULL; @@ -4003,17 +4003,17 @@ static int qemudDomainAttachDevice(virDomainPtr dom, case VIR_DOMAIN_DISK_DEVICE_DISK: if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_USB) { ret = qemuDomainAttachUsbMassstorageDevice(driver, vm, - dev->data.disk, qemuCmdFlags); + dev->data.disk, qemuCaps); if (ret == 0) dev->data.disk = NULL; } else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO) { ret = qemuDomainAttachPciDiskDevice(driver, vm, - dev->data.disk, qemuCmdFlags); + dev->data.disk, qemuCaps); if (ret == 0) dev->data.disk = NULL; } else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) { ret = qemuDomainAttachSCSIDisk(driver, vm, - dev->data.disk, qemuCmdFlags); + dev->data.disk, qemuCaps); if (ret == 0) dev->data.disk = NULL; } else { @@ -4038,7 +4038,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom, } else if (dev->type == VIR_DOMAIN_DEVICE_CONTROLLER) { if (dev->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { ret = qemuDomainAttachPciControllerDevice(driver, vm, - dev->data.controller, qemuCmdFlags); + dev->data.controller, qemuCaps); if (ret == 0) dev->data.controller = NULL; } else { @@ -4049,12 +4049,12 @@ static int qemudDomainAttachDevice(virDomainPtr dom, } } else if (dev->type == VIR_DOMAIN_DEVICE_NET) { ret = qemuDomainAttachNetDevice(dom->conn, driver, vm, - dev->data.net, qemuCmdFlags); + dev->data.net, qemuCaps); if (ret == 0) dev->data.net = NULL; } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) { ret = qemuDomainAttachHostDevice(driver, vm, - dev->data.hostdev, qemuCmdFlags); + dev->data.hostdev, qemuCaps); if (ret == 0) dev->data.hostdev = NULL; } else { @@ -4102,7 +4102,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; virDomainDeviceDefPtr dev = NULL; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; virCgroupPtr cgroup = NULL; int ret = -1; bool force = (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) != 0; @@ -4144,7 +4144,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto endjob; switch (dev->type) { @@ -4165,7 +4165,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, case VIR_DOMAIN_DISK_DEVICE_FLOPPY: ret = qemuDomainChangeEjectableMedia(driver, vm, dev->data.disk, - qemuCmdFlags, + qemuCaps, force); if (ret == 0) dev->data.disk = NULL; @@ -4220,7 +4220,7 @@ static int qemudDomainDetachDevice(virDomainPtr dom, const char *xml) { struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; virDomainDeviceDefPtr dev = NULL; int ret = -1; @@ -4250,28 +4250,28 @@ static int qemudDomainDetachDevice(virDomainPtr dom, if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto endjob; if (dev->type == VIR_DOMAIN_DEVICE_DISK && dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) { if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO) { - ret = qemuDomainDetachPciDiskDevice(driver, vm, dev, qemuCmdFlags); + ret = qemuDomainDetachPciDiskDevice(driver, vm, dev, qemuCaps); } else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) { ret = qemuDomainDetachSCSIDiskDevice(driver, vm, dev, - qemuCmdFlags); + qemuCaps); } else { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This type of disk cannot be hot unplugged")); } } else if (dev->type == VIR_DOMAIN_DEVICE_NET) { - ret = qemuDomainDetachNetDevice(driver, vm, dev, qemuCmdFlags); + ret = qemuDomainDetachNetDevice(driver, vm, dev, qemuCaps); } else if (dev->type == VIR_DOMAIN_DEVICE_CONTROLLER) { if (dev->data.controller->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { ret = qemuDomainDetachPciControllerDevice(driver, vm, dev, - qemuCmdFlags); + qemuCaps); } else { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("disk controller bus '%s' cannot be hotunplugged."), @@ -4279,7 +4279,7 @@ static int qemudDomainDetachDevice(virDomainPtr dom, /* fallthrough */ } } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) { - ret = qemuDomainDetachHostDevice(driver, vm, dev, qemuCmdFlags); + ret = qemuDomainDetachHostDevice(driver, vm, dev, qemuCaps); } else { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This type of device cannot be hot unplugged")); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 642e8f1..31f0ebb 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -44,7 +44,7 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, bool force) { virDomainDiskDefPtr origdisk = NULL; @@ -87,7 +87,7 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver, vm, disk) < 0) return -1; - if (!(driveAlias = qemuDeviceDriveHostAlias(origdisk, qemuCmdFlags))) + if (!(driveAlias = qemuDeviceDriveHostAlias(origdisk, qemuCaps))) goto error; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -140,7 +140,7 @@ error: int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i, ret; const char* type = virDomainDiskBusTypeToString(disk->bus); @@ -160,16 +160,16 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, vm, disk) < 0) return -1; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0) goto error; - if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) + if (qemuAssignDeviceDiskAlias(disk, qemuCaps) < 0) goto error; - if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags))) + if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCaps))) goto error; - if (!(devstr = qemuBuildDriveDevStr(disk, qemuCmdFlags))) + if (!(devstr = qemuBuildDriveDevStr(disk, qemuCaps))) goto error; } @@ -179,7 +179,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -219,7 +219,7 @@ error: VIR_FREE(devstr); VIR_FREE(drivestr); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &disk->info) < 0) VIR_WARN("Unable to release PCI address on %s", disk->src); @@ -235,7 +235,7 @@ error: int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainControllerDefPtr controller, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i; int ret = -1; @@ -253,13 +253,13 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0) goto cleanup; if (qemuAssignDeviceControllerAlias(controller) < 0) goto cleanup; - if (!(devstr = qemuBuildControllerDevStr(controller, qemuCmdFlags))) { + if (!(devstr = qemuBuildControllerDevStr(controller, qemuCaps))) { goto cleanup; } } @@ -270,7 +270,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDevice(priv->mon, devstr); } else { ret = qemuMonitorAttachPCIDiskController(priv->mon, @@ -286,7 +286,7 @@ int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, cleanup: if ((ret != 0) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && (controller->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &controller->info) < 0) VIR_WARN0("Unable to release PCI address on controller"); @@ -300,7 +300,7 @@ static virDomainControllerDefPtr qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver, virDomainObjPtr vm, int controller, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i; virDomainControllerDefPtr cont; @@ -326,7 +326,7 @@ qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver, VIR_INFO0("No SCSI controller present, hotplugging one"); if (qemuDomainAttachPciControllerDevice(driver, - vm, cont, qemuCmdFlags) < 0) { + vm, cont, qemuCaps) < 0) { VIR_FREE(cont); return NULL; } @@ -346,7 +346,7 @@ qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver, int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -376,18 +376,18 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, goto error; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { - if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { + if (qemuAssignDeviceDiskAlias(disk, qemuCaps) < 0) goto error; - if (!(devstr = qemuBuildDriveDevStr(disk, qemuCmdFlags))) + if (!(devstr = qemuBuildDriveDevStr(disk, qemuCaps))) goto error; } - if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags))) + if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCaps))) goto error; for (i = 0 ; i <= disk->info.addr.drive.controller ; i++) { - cont = qemuDomainFindOrCreateSCSIDiskController(driver, vm, i, qemuCmdFlags); + cont = qemuDomainFindOrCreateSCSIDiskController(driver, vm, i, qemuCaps); if (!cont) goto error; } @@ -409,7 +409,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -462,7 +462,7 @@ error: int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { qemuDomainObjPrivatePtr priv = vm->privateData; int i, ret; @@ -487,12 +487,12 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, goto error; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { - if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { + if (qemuAssignDeviceDiskAlias(disk, qemuCaps) < 0) goto error; - if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags))) + if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCaps))) goto error; - if (!(devstr = qemuBuildDriveDevStr(disk, qemuCmdFlags))) + if (!(devstr = qemuBuildDriveDevStr(disk, qemuCaps))) goto error; } @@ -502,7 +502,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { ret = qemuMonitorAddDrive(priv->mon, drivestr); if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); @@ -547,7 +547,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, virDomainNetDefPtr net, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { qemuDomainObjPrivatePtr priv = vm->privateData; char *tapfd_name = NULL; @@ -558,7 +558,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, virDomainDevicePCIAddress guestAddr; int vlan; - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_HOST_NET_ADD)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_HOST_NET_ADD)) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("installed qemu version does not support host_net_add")); return -1; @@ -574,7 +574,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, return -1; } - if ((tapfd = qemuNetworkIfaceConnect(conn, driver, net, qemuCmdFlags)) < 0) + if ((tapfd = qemuNetworkIfaceConnect(conn, driver, net, qemuCaps)) < 0) return -1; } else if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) { if (priv->monConfig->type != VIR_DOMAIN_CHR_TYPE_UNIX) { @@ -586,7 +586,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } if ((tapfd = qemuPhysIfaceConnect(conn, driver, net, - qemuCmdFlags, + qemuCaps, vm->def->uuid, VIR_VM_OP_CREATE)) < 0) return -1; @@ -595,18 +595,18 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets+1) < 0) goto no_memory; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NET_NAME) || - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NET_NAME) || + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceNetAlias(vm->def, net, -1) < 0) goto cleanup; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &net->info) < 0) goto cleanup; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { vlan = -1; } else { vlan = qemuDomainNetVLAN(net); @@ -637,8 +637,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } /* FIXME - need to support vhost-net here (5th arg) */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (!(netstr = qemuBuildHostNetStr(net, ',', -1, tapfd_name, 0))) goto try_tapfd_close; @@ -649,8 +649,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorAddNetdev(priv->mon, netstr) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, NULL, net, "attach", false); @@ -673,8 +673,8 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, goto cleanup; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { - if (!(nicstr = qemuBuildNicDevStr(net, vlan, qemuCmdFlags))) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { + if (!(nicstr = qemuBuildNicDevStr(net, vlan, qemuCaps))) goto try_remove; } else { if (!(nicstr = qemuBuildNicStr(net, NULL, vlan))) @@ -682,7 +682,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, NULL, net, "attach", false); @@ -708,7 +708,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, cleanup: if ((ret != 0) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && (net->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &net->info) < 0) VIR_WARN0("Unable to release PCI address on NIC"); @@ -728,8 +728,8 @@ try_remove: goto cleanup; if (vlan < 0) { - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { char *netdev_name; if (virAsprintf(&netdev_name, "host%s", net->info.alias) < 0) goto no_memory; @@ -777,7 +777,7 @@ no_memory: int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { qemuDomainObjPrivatePtr priv = vm->privateData; int ret; @@ -793,12 +793,12 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, if (qemuPrepareHostdevPCIDevices(driver, &hostdev, 1) < 0) return -1; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) goto error; if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &hostdev->info) < 0) goto error; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_PCI_CONFIGFD)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_PCI_CONFIGFD)) { configfd = qemuOpenPCIConfig(hostdev); if (configfd >= 0) { if (virAsprintf(&configfd_name, "fd-%s", @@ -824,7 +824,7 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, } if (!(devstr = qemuBuildPCIHostdevDevStr(hostdev, configfd_name, - qemuCmdFlags))) + qemuCaps))) goto error; qemuDomainObjEnterMonitorWithDriver(driver, vm); @@ -854,7 +854,7 @@ int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, return 0; error: - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && (hostdev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &hostdev->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); @@ -872,13 +872,13 @@ error: int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int ret; qemuDomainObjPrivatePtr priv = vm->privateData; char *devstr = NULL; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) goto error; if (!(devstr = qemuBuildUSBHostdevDevStr(hostdev))) @@ -910,7 +910,7 @@ int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) ret = qemuMonitorAddDevice(priv->mon, devstr); else ret = qemuMonitorAddUSBDeviceExact(priv->mon, @@ -935,7 +935,7 @@ error: int qemuDomainAttachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -968,13 +968,13 @@ int qemuDomainAttachHostDevice(struct qemud_driver *driver, switch (hostdev->source.subsys.type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: if (qemuDomainAttachHostPciDevice(driver, vm, - hostdev, qemuCmdFlags) < 0) + hostdev, qemuCaps) < 0) goto error; break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: if (qemuDomainAttachHostUsbDevice(driver, vm, - hostdev, qemuCmdFlags) < 0) + hostdev, qemuCaps) < 0) goto error; break; @@ -1130,7 +1130,7 @@ static inline int qemuFindDisk(virDomainDefPtr def, const char *dst) int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i, ret = -1; virDomainDiskDefPtr detach = NULL; @@ -1173,7 +1173,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); goto cleanup; @@ -1193,7 +1193,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, qemuDomainDiskAudit(vm, detach, NULL, "detach", ret >= 0); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN("Unable to release PCI address on %s", dev->data.disk->src); @@ -1221,7 +1221,7 @@ cleanup: int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i, ret = -1; virDomainDiskDefPtr detach = NULL; @@ -1237,7 +1237,7 @@ int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, goto cleanup; } - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Underlying qemu does not support SCSI disk removal")); goto cleanup; @@ -1350,7 +1350,7 @@ static bool qemuDomainControllerIsBusy(virDomainObjPtr vm, int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i, ret = -1; virDomainControllerDefPtr detach = NULL; @@ -1385,13 +1385,13 @@ int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, goto cleanup; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuAssignDeviceControllerAlias(detach) < 0) goto cleanup; } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { qemuDomainObjExitMonitor(vm); goto cleanup; @@ -1419,7 +1419,7 @@ int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, vm->def->ncontrollers = 0; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on controller"); @@ -1434,7 +1434,7 @@ cleanup: int qemuDomainDetachNetDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int i, ret = -1; virDomainNetDefPtr detach = NULL; @@ -1479,7 +1479,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); qemuDomainNetAudit(vm, detach, NULL, "detach", false); @@ -1494,8 +1494,8 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, } } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NETDEV) && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_NETDEV) && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorRemoveNetdev(priv->mon, hostnet_name) < 0) { qemuDomainObjExitMonitorWithDriver(driver, vm); qemuDomainNetAudit(vm, detach, NULL, "detach", false); @@ -1512,7 +1512,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver, qemuDomainNetAudit(vm, detach, NULL, "detach", true); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on NIC"); @@ -1561,7 +1561,7 @@ cleanup: int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virDomainHostdevDefPtr detach = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1605,7 +1605,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, } qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) { qemuDomainObjExitMonitor(vm); return -1; @@ -1636,7 +1636,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, pciFreeDevice(pci); } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE) && + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE) && qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &detach->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); @@ -1661,7 +1661,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virDomainHostdevDefPtr detach = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1707,7 +1707,7 @@ int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, return -1; } - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("device cannot be detached with this QEMU version")); return -1; @@ -1743,7 +1743,7 @@ int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, int qemuDomainDetachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virDomainHostdevDefPtr hostdev = dev->data.hostdev; int ret; @@ -1757,10 +1757,10 @@ int qemuDomainDetachHostDevice(struct qemud_driver *driver, switch (hostdev->source.subsys.type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - ret = qemuDomainDetachHostPciDevice(driver, vm, dev, qemuCmdFlags); + ret = qemuDomainDetachHostPciDevice(driver, vm, dev, qemuCaps); break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: - ret = qemuDomainDetachHostUsbDevice(driver, vm, dev, qemuCmdFlags); + ret = qemuDomainDetachHostUsbDevice(driver, vm, dev, qemuCaps); break; default: qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index 217785d..a5eadd3 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -32,41 +32,41 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, bool force); int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainControllerDefPtr controller, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachNetDevice(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, virDomainNetDefPtr net, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainAttachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainChangeGraphics(struct qemud_driver *driver, virDomainObjPtr vm, virDomainGraphicsDefPtr dev); @@ -78,31 +78,31 @@ int qemuDomainChangeGraphicsPasswords(struct qemud_driver *driver, int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainDetachNetDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); int qemuDomainDetachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCmdFlags); + unsigned long long qemuCaps); #endif /* __QEMU_HOTPLUG_H__ */ diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index fb16f3a..3a52bce 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -244,7 +244,7 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver, int ret = -1; int internalret; char *unixfile = NULL; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; qemuDomainObjPrivatePtr priv = NULL; struct timeval now; @@ -298,15 +298,15 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver, /* check that this qemu version supports the interactive exec */ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, - NULL, &qemuCmdFlags) < 0) { + NULL, &qemuCaps) < 0) { qemuReportError(VIR_ERR_INTERNAL_ERROR, _("Cannot determine QEMU argv syntax %s"), vm->def->emulator); goto endjob; } - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_UNIX)) internalret = virAsprintf(&migrateFrom, "unix:%s", unixfile); - else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) + else if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_EXEC)) internalret = virAsprintf(&migrateFrom, "exec:nc -U -l %s", unixfile); else { qemuReportError(VIR_ERR_OPERATION_FAILED, @@ -708,7 +708,7 @@ static int doTunnelMigrate(struct qemud_driver *driver, virStreamPtr st = NULL; char *unixfile = NULL; int internalret; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; int status; unsigned long long transferred, remaining, total; unsigned int background_flags = QEMU_MONITOR_MIGRATE_BACKGROUND; @@ -770,15 +770,15 @@ static int doTunnelMigrate(struct qemud_driver *driver, /* check that this qemu version supports the unix migration */ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, - NULL, &qemuCmdFlags) < 0) { + NULL, &qemuCaps) < 0) { qemuReportError(VIR_ERR_INTERNAL_ERROR, _("Cannot extract Qemu version from '%s'"), vm->def->emulator); goto cleanup; } - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX) && - !qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_UNIX) && + !qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Source qemu is too old to support tunnelled migration")); goto cleanup; @@ -820,11 +820,11 @@ static int doTunnelMigrate(struct qemud_driver *driver, background_flags |= QEMU_MONITOR_MIGRATE_NON_SHARED_DISK; if (flags & VIR_MIGRATE_NON_SHARED_INC) background_flags |= QEMU_MONITOR_MIGRATE_NON_SHARED_INC; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_UNIX)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_UNIX)) { internalret = qemuMonitorMigrateToUnix(priv->mon, background_flags, unixfile); } - else if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { + else if (qemuCapsGet(qemuCaps, QEMU_CAPS_MIGRATE_QEMU_EXEC)) { const char *args[] = { "nc", "-U", unixfile, NULL }; internalret = qemuMonitorMigrateToCommand(priv->mon, QEMU_MONITOR_MIGRATE_BACKGROUND, args); } else { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 937a840..12e5595 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1137,7 +1137,7 @@ static int qemuProcessInitPasswords(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { int ret = 0; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1159,7 +1159,7 @@ qemuProcessInitPasswords(virConnectPtr conn, if (ret < 0) goto cleanup; - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { int i; for (i = 0 ; i < vm->def->ndisks ; i++) { @@ -1789,7 +1789,7 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa struct qemuProcessReconnectData *data = opaque; struct qemud_driver *driver = data->driver; qemuDomainObjPrivatePtr priv; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; virConnectPtr conn = data->conn; virDomainObjLock(obj); @@ -1815,8 +1815,8 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa * since launch time */ if (qemuCapsExtractVersionInfo(obj->def->emulator, obj->def->os.arch, NULL, - &qemuCmdFlags) >= 0 && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + &qemuCaps) >= 0 && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { priv->persistentAddrs = 1; if (!(priv->pciaddrs = qemuDomainPCIAddressSetCreate(obj->def)) || @@ -1879,7 +1879,7 @@ int qemuProcessStart(virConnectPtr conn, enum virVMOperationType vmop) { int ret; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; off_t pos = -1; char ebuf[1024]; char *pidfile = NULL; @@ -2010,7 +2010,7 @@ int qemuProcessStart(virConnectPtr conn, VIR_DEBUG0("Determining emulator version"); if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto cleanup; VIR_DEBUG0("Setting up domain cgroup (if required)"); @@ -2027,7 +2027,7 @@ int qemuProcessStart(virConnectPtr conn, goto cleanup; #if HAVE_YAJL - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_MONITOR_JSON)) + if (qemuCapsGet(qemuCaps, QEMU_CAPS_MONITOR_JSON)) priv->monJSON = 1; else #endif @@ -2056,7 +2056,7 @@ int qemuProcessStart(virConnectPtr conn, * we also need to populate the PCi address set cache for later * use in hotplug */ - if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { VIR_DEBUG0("Assigning domain PCI addresses"); /* Populate cache with current addresses */ if (priv->pciaddrs) { @@ -2078,7 +2078,7 @@ int qemuProcessStart(virConnectPtr conn, VIR_DEBUG0("Building emulator command line"); if (!(cmd = qemuBuildCommandLine(conn, driver, vm->def, priv->monConfig, - priv->monJSON != 0, qemuCmdFlags, + priv->monJSON != 0, qemuCaps, migrateFrom, stdin_fd, vm->current_snapshot, vmop))) goto cleanup; @@ -2185,12 +2185,12 @@ int qemuProcessStart(virConnectPtr conn, goto cleanup; VIR_DEBUG0("Setting any required VM passwords"); - if (qemuProcessInitPasswords(conn, driver, vm, qemuCmdFlags) < 0) + if (qemuProcessInitPasswords(conn, driver, vm, qemuCaps) < 0) goto cleanup; /* If we have -device, then addresses are assigned explicitly. * If not, then we have to detect dynamic ones here */ - if (!qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + if (!qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { VIR_DEBUG0("Determining domain device PCI addresses"); if (qemuProcessInitPCIAddresses(driver, vm) < 0) goto cleanup; -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
The new name comply more with the fact that it contains a set of
s/comply/complies/
qemuCapsFlags.
--- Notes: Version 2: - rebased to current master
src/qemu/qemu_capabilities.c | 10 +- src/qemu/qemu_capabilities.h | 8 +- src/qemu/qemu_command.c | 374 +++++++++++++++++++++--------------------- src/qemu/qemu_command.h | 28 ++-- src/qemu/qemu_driver.c | 44 +++--- src/qemu/qemu_hotplug.c | 162 +++++++++--------- src/qemu/qemu_hotplug.h | 32 ++-- src/qemu/qemu_migration.c | 20 +- src/qemu/qemu_process.c | 24 ++-- 9 files changed, 351 insertions(+), 351 deletions(-)
Another diffstat that agrees with your claim of complete mechanical conversion. Again, the only remaining hits are under docs/, where it is okay. ACK with the spelling nit in your commit message. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:30:50 -0700, Eric Blake wrote:
On 02/22/2011 09:48 AM, Jiri Denemark wrote:
The new name comply more with the fact that it contains a set of
s/comply/complies/
ACK with the spelling nit in your commit message.
Fixed and pushed, thanks. Jirka

This is done for two reasons: - we are getting very close to 64 flags which is the maximum we can use with unsigned long long - by using LL constants in enum we already violates C99 constraint that enum values have to fit into int --- Notes: Version 2: - rebased to current master - qemuCapsFree added to a list of free-like functions in cfg.mk - don't fail qemuCapsParseHelpStr() if there is no memory for bitmap string used for a debug message cfg.mk | 3 +- src/qemu/qemu_capabilities.c | 188 ++++++++++++++++++++++++------------------ src/qemu/qemu_capabilities.h | 145 +++++++++++++++++--------------- src/qemu/qemu_command.c | 55 ++++++------ src/qemu/qemu_command.h | 30 ++++---- src/qemu/qemu_driver.c | 12 ++- src/qemu/qemu_hotplug.c | 34 ++++---- src/qemu/qemu_hotplug.h | 32 ++++---- src/qemu/qemu_migration.c | 6 +- src/qemu/qemu_process.c | 11 ++- 10 files changed, 280 insertions(+), 236 deletions(-) diff --git a/cfg.mk b/cfg.mk index 1bb9cbb..3d13d70 100644 --- a/cfg.mk +++ b/cfg.mk @@ -135,7 +135,8 @@ useless_free_options = \ --name=virThreadPoolFree \ --name=xmlFree \ --name=xmlXPathFreeContext \ - --name=xmlXPathFreeObject + --name=xmlXPathFreeObject \ + --name=qemuCapsFree # The following template was generated by this command: # make ID && aid free|grep '^vi'|sed 's/ .*//;s/^/# /' diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index fbf426a..873360a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -377,7 +377,7 @@ error: int qemuCapsProbeCPUModels(const char *qemu, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const char *arch, unsigned int *count, const char ***cpus) @@ -442,7 +442,7 @@ qemuCapsInitGuest(virCapsPtr caps, int nmachines = 0; struct stat st; unsigned int ncpus; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; int ret = -1; /* Check for existance of base emulator, or alternate base @@ -553,7 +553,7 @@ qemuCapsInitGuest(virCapsPtr caps, guest->arch.defaultInfo.emulator_mtime = binary_mtime; if (caps->host.cpu && - qemuCapsProbeCPUModels(binary, 0, info->arch, &ncpus, NULL) == 0 && + qemuCapsProbeCPUModels(binary, NULL, info->arch, &ncpus, NULL) == 0 && ncpus > 0 && !virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0)) goto error; @@ -648,6 +648,7 @@ cleanup: VIR_FREE(binary); VIR_FREE(kvmbin); } + qemuCapsFree(qemuCaps); return ret; @@ -781,129 +782,129 @@ virCapsPtr qemuCapsInit(virCapsPtr old_caps) } -static unsigned long long +static void qemuCapsComputeCmdFlags(const char *help, unsigned int version, unsigned int is_kvm, - unsigned int kvm_version) + unsigned int kvm_version, + virBitmapPtr flags) { - unsigned long long flags = 0; const char *p; if (strstr(help, "-no-kqemu")) - qemuCapsSet(&flags, QEMU_CAPS_KQEMU); + qemuCapsSet(flags, QEMU_CAPS_KQEMU); if (strstr(help, "-enable-kqemu")) - qemuCapsSet(&flags, QEMU_CAPS_ENABLE_KQEMU); + qemuCapsSet(flags, QEMU_CAPS_ENABLE_KQEMU); if (strstr(help, "-no-kvm")) - qemuCapsSet(&flags, QEMU_CAPS_KVM); + qemuCapsSet(flags, QEMU_CAPS_KVM); if (strstr(help, "-enable-kvm")) - qemuCapsSet(&flags, QEMU_CAPS_ENABLE_KVM); + qemuCapsSet(flags, QEMU_CAPS_ENABLE_KVM); if (strstr(help, "-no-reboot")) - qemuCapsSet(&flags, QEMU_CAPS_NO_REBOOT); + qemuCapsSet(flags, QEMU_CAPS_NO_REBOOT); if (strstr(help, "-name")) { - qemuCapsSet(&flags, QEMU_CAPS_NAME); + qemuCapsSet(flags, QEMU_CAPS_NAME); if (strstr(help, ",process=")) - qemuCapsSet(&flags, QEMU_CAPS_NAME_PROCESS); + qemuCapsSet(flags, QEMU_CAPS_NAME_PROCESS); } if (strstr(help, "-uuid")) - qemuCapsSet(&flags, QEMU_CAPS_UUID); + qemuCapsSet(flags, QEMU_CAPS_UUID); if (strstr(help, "-xen-domid")) - qemuCapsSet(&flags, QEMU_CAPS_XEN_DOMID); + qemuCapsSet(flags, QEMU_CAPS_XEN_DOMID); else if (strstr(help, "-domid")) - qemuCapsSet(&flags, QEMU_CAPS_DOMID); + qemuCapsSet(flags, QEMU_CAPS_DOMID); if (strstr(help, "-drive")) { - qemuCapsSet(&flags, QEMU_CAPS_DRIVE); + qemuCapsSet(flags, QEMU_CAPS_DRIVE); if (strstr(help, "cache=") && !strstr(help, "cache=on|off")) - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_CACHE_V2); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_CACHE_V2); if (strstr(help, "format=")) - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_FORMAT); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_FORMAT); if (strstr(help, "readonly=")) - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_READONLY); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_READONLY); if (strstr(help, "aio=threads|native")) - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_AIO); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_AIO); } if ((p = strstr(help, "-vga")) && !strstr(help, "-std-vga")) { const char *nl = strstr(p, "\n"); - qemuCapsSet(&flags, QEMU_CAPS_VGA); + qemuCapsSet(flags, QEMU_CAPS_VGA); if (strstr(p, "|qxl")) - qemuCapsSet(&flags, QEMU_CAPS_VGA_QXL); + qemuCapsSet(flags, QEMU_CAPS_VGA_QXL); if ((p = strstr(p, "|none")) && p < nl) - qemuCapsSet(&flags, QEMU_CAPS_VGA_NONE); + qemuCapsSet(flags, QEMU_CAPS_VGA_NONE); } if (strstr(help, "-spice")) - qemuCapsSet(&flags, QEMU_CAPS_SPICE); + qemuCapsSet(flags, QEMU_CAPS_SPICE); if (strstr(help, "boot=on")) - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_BOOT); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_BOOT); if (strstr(help, "serial=s")) - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_SERIAL); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_SERIAL); if (strstr(help, "-pcidevice")) - qemuCapsSet(&flags, QEMU_CAPS_PCIDEVICE); + qemuCapsSet(flags, QEMU_CAPS_PCIDEVICE); if (strstr(help, "-mem-path")) - qemuCapsSet(&flags, QEMU_CAPS_MEM_PATH); + qemuCapsSet(flags, QEMU_CAPS_MEM_PATH); if (strstr(help, "-chardev")) { - qemuCapsSet(&flags, QEMU_CAPS_CHARDEV); + qemuCapsSet(flags, QEMU_CAPS_CHARDEV); if (strstr(help, "-chardev spicevmc")) - qemuCapsSet(&flags, QEMU_CAPS_CHARDEV_SPICEVMC); + qemuCapsSet(flags, QEMU_CAPS_CHARDEV_SPICEVMC); } if (strstr(help, "-balloon")) - qemuCapsSet(&flags, QEMU_CAPS_BALLOON); + qemuCapsSet(flags, QEMU_CAPS_BALLOON); if (strstr(help, "-device")) { - qemuCapsSet(&flags, QEMU_CAPS_DEVICE); + qemuCapsSet(flags, QEMU_CAPS_DEVICE); /* * When -device was introduced, qemu already supported drive's * readonly option but didn't advertise that. */ - qemuCapsSet(&flags, QEMU_CAPS_DRIVE_READONLY); + qemuCapsSet(flags, QEMU_CAPS_DRIVE_READONLY); } if (strstr(help, "-nodefconfig")) - qemuCapsSet(&flags, QEMU_CAPS_NODEFCONFIG); + qemuCapsSet(flags, QEMU_CAPS_NODEFCONFIG); /* The trailing ' ' is important to avoid a bogus match */ if (strstr(help, "-rtc ")) - qemuCapsSet(&flags, QEMU_CAPS_RTC); + qemuCapsSet(flags, QEMU_CAPS_RTC); /* to wit */ if (strstr(help, "-rtc-td-hack")) - qemuCapsSet(&flags, QEMU_CAPS_RTC_TD_HACK); + qemuCapsSet(flags, QEMU_CAPS_RTC_TD_HACK); if (strstr(help, "-no-hpet")) - qemuCapsSet(&flags, QEMU_CAPS_NO_HPET); + qemuCapsSet(flags, QEMU_CAPS_NO_HPET); if (strstr(help, "-no-kvm-pit-reinjection")) - qemuCapsSet(&flags, QEMU_CAPS_NO_KVM_PIT); + qemuCapsSet(flags, QEMU_CAPS_NO_KVM_PIT); if (strstr(help, "-tdf")) - qemuCapsSet(&flags, QEMU_CAPS_TDF); + qemuCapsSet(flags, QEMU_CAPS_TDF); if (strstr(help, "-enable-nesting")) - qemuCapsSet(&flags, QEMU_CAPS_NESTING); + qemuCapsSet(flags, QEMU_CAPS_NESTING); if (strstr(help, ",menu=on")) - qemuCapsSet(&flags, QEMU_CAPS_BOOT_MENU); + qemuCapsSet(flags, QEMU_CAPS_BOOT_MENU); if (strstr(help, "-fsdev")) - qemuCapsSet(&flags, QEMU_CAPS_FSDEV); + qemuCapsSet(flags, QEMU_CAPS_FSDEV); if (strstr(help, "-smbios type")) - qemuCapsSet(&flags, QEMU_CAPS_SMBIOS_TYPE); + qemuCapsSet(flags, QEMU_CAPS_SMBIOS_TYPE); if (strstr(help, "-netdev")) { /* Disable -netdev on 0.12 since although it exists, * the corresponding netdev_add/remove monitor commands * do not, and we need them to be able todo hotplug */ if (version >= 13000) - qemuCapsSet(&flags, QEMU_CAPS_NETDEV); + qemuCapsSet(flags, QEMU_CAPS_NETDEV); } if (strstr(help, "-sdl")) - qemuCapsSet(&flags, QEMU_CAPS_SDL); + qemuCapsSet(flags, QEMU_CAPS_SDL); if (strstr(help, "cores=") && strstr(help, "threads=") && strstr(help, "sockets=")) - qemuCapsSet(&flags, QEMU_CAPS_SMP_TOPOLOGY); + qemuCapsSet(flags, QEMU_CAPS_SMP_TOPOLOGY); if (version >= 9000) - qemuCapsSet(&flags, QEMU_CAPS_VNC_COLON); + qemuCapsSet(flags, QEMU_CAPS_VNC_COLON); if (is_kvm && (version >= 10000 || kvm_version >= 74)) - qemuCapsSet(&flags, QEMU_CAPS_VNET_HDR); + qemuCapsSet(flags, QEMU_CAPS_VNET_HDR); if (is_kvm && strstr(help, ",vhost=")) { - qemuCapsSet(&flags, QEMU_CAPS_VNET_HOST); + qemuCapsSet(flags, QEMU_CAPS_VNET_HOST); } /* @@ -919,22 +920,22 @@ qemuCapsComputeCmdFlags(const char *help, * while waiting for data, so pretend it doesn't exist */ if (version >= 10000) { - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_TCP); - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_EXEC); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_TCP); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_EXEC); if (version >= 12000) { - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_UNIX); - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_FD); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_UNIX); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_FD); } } else if (kvm_version >= 79) { - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_TCP); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_TCP); if (kvm_version >= 80) - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_QEMU_EXEC); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_QEMU_EXEC); } else if (kvm_version > 0) { - qemuCapsSet(&flags, QEMU_CAPS_MIGRATE_KVM_STDIO); + qemuCapsSet(flags, QEMU_CAPS_MIGRATE_KVM_STDIO); } if (version >= 10000) - qemuCapsSet(&flags, QEMU_CAPS_0_10); + qemuCapsSet(flags, QEMU_CAPS_0_10); /* While JSON mode was available in 0.12.0, it was too * incomplete to contemplate using. The 0.13.0 release @@ -943,9 +944,7 @@ qemuCapsComputeCmdFlags(const char *help, * the downside. */ if (version >= 13000) - qemuCapsSet(&flags, QEMU_CAPS_MONITOR_JSON); - - return flags; + qemuCapsSet(flags, QEMU_CAPS_MONITOR_JSON); } /* We parse the output of 'qemu -help' to get the QEMU @@ -974,15 +973,16 @@ qemuCapsComputeCmdFlags(const char *help, int qemuCapsParseHelpStr(const char *qemu, const char *help, - unsigned long long *flags, + virBitmapPtr flags, unsigned int *version, unsigned int *is_kvm, unsigned int *kvm_version) { unsigned major, minor, micro; const char *p = help; + char *strflags; - *flags = *version = *is_kvm = *kvm_version = 0; + *version = *is_kvm = *kvm_version = 0; if (STRPREFIX(p, QEMU_VERSION_STR_1)) p += strlen(QEMU_VERSION_STR_1); @@ -1029,10 +1029,13 @@ int qemuCapsParseHelpStr(const char *qemu, *version = (major * 1000 * 1000) + (minor * 1000) + micro; - *flags = qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version); + qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version, flags); + + strflags = virBitmapString(flags); + VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s", + major, minor, micro, *version, NULLSTR(strflags)); + VIR_FREE(strflags); - VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags 0x%llx", - major, minor, micro, *version, *flags); if (*kvm_version) VIR_DEBUG("KVM version %d detected", *kvm_version); else if (*is_kvm) @@ -1056,7 +1059,7 @@ fail: static int qemuCapsExtractDeviceStr(const char *qemu, - unsigned long long *flags) + virBitmapPtr flags) { char *output = NULL; virCommandPtr cmd; @@ -1094,7 +1097,7 @@ cleanup: int -qemuCapsParseDeviceStr(const char *str, unsigned long long *flags) +qemuCapsParseDeviceStr(const char *str, virBitmapPtr flags) { /* Which devices exist. */ if (strstr(str, "name \"hda-duplex\"")) @@ -1104,7 +1107,7 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags) if (strstr(str, "name \"ccid-card-passthru\"")) qemuCapsSet(flags, QEMU_CAPS_CCID_PASSTHRU); /* Prefer -chardev spicevmc (detected earlier) over -device spicevmc */ - if (!qemuCapsGet(*flags, QEMU_CAPS_CHARDEV_SPICEVMC) && + if (!qemuCapsGet(flags, QEMU_CAPS_CHARDEV_SPICEVMC) && strstr(str, "name \"spicevmc\"")) qemuCapsSet(flags, QEMU_CAPS_DEVICE_SPICEVMC); @@ -1124,16 +1127,16 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags) int qemuCapsExtractVersionInfo(const char *qemu, const char *arch, unsigned int *retversion, - unsigned long long *retflags) + virBitmapPtr *retflags) { int ret = -1; unsigned int version, is_kvm, kvm_version; - unsigned long long flags = 0; + virBitmapPtr flags = NULL; char *help = NULL; virCommandPtr cmd; if (retflags) - *retflags = 0; + *retflags = NULL; if (retversion) *retversion = 0; @@ -1154,33 +1157,37 @@ int qemuCapsExtractVersionInfo(const char *qemu, const char *arch, if (virCommandRun(cmd, NULL) < 0) goto cleanup; - if (qemuCapsParseHelpStr(qemu, help, &flags, + if (!(flags = qemuCapsNew()) || + qemuCapsParseHelpStr(qemu, help, flags, &version, &is_kvm, &kvm_version) == -1) goto cleanup; /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(arch, "x86_64", 6) || STREQLEN(arch, "i686", 4)) { - qemuCapsSet(&flags, QEMU_CAPS_PCI_MULTIBUS); + qemuCapsSet(flags, QEMU_CAPS_PCI_MULTIBUS); } /* qemuCapsExtractDeviceStr will only set additional flags if qemu * understands the 0.13.0+ notion of "-device driver,". */ if (qemuCapsGet(flags, QEMU_CAPS_DEVICE) && strstr(help, "-device driver,?") && - qemuCapsExtractDeviceStr(qemu, &flags) < 0) + qemuCapsExtractDeviceStr(qemu, flags) < 0) goto cleanup; if (retversion) *retversion = version; - if (retflags) + if (retflags) { *retflags = flags; + flags = NULL; + } ret = 0; cleanup: VIR_FREE(help); virCommandFree(cmd); + qemuCapsFree(flags); return ret; } @@ -1233,25 +1240,42 @@ int qemuCapsExtractVersion(virCapsPtr caps, } +virBitmapPtr +qemuCapsNew(void) +{ + virBitmapPtr caps; + + if (!(caps = virBitmapAlloc(QEMU_CAPS_LAST))) + virReportOOMError(); + + return caps; +} + + void -qemuCapsSet(unsigned long long *caps, +qemuCapsSet(virBitmapPtr caps, enum qemuCapsFlags flag) { - *caps |= flag; + ignore_value(virBitmapSetBit(caps, flag)); } void -qemuCapsClear(unsigned long long *caps, +qemuCapsClear(virBitmapPtr caps, enum qemuCapsFlags flag) { - *caps &= ~flag; + ignore_value(virBitmapClearBit(caps, flag)); } bool -qemuCapsGet(unsigned long long caps, +qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag) { - return !!(caps & flag); + bool b; + + if (!caps || virBitmapGetBit(caps, flag, &b) < 0) + return false; + else + return b; } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index d9eb782..b506e56 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -24,84 +24,91 @@ #ifndef __QEMU_CAPABILITIES_H__ # define __QEMU_CAPABILITIES_H__ +# include "bitmap.h" # include "capabilities.h" /* Internal flags to keep track of qemu command line capabilities */ enum qemuCapsFlags { - QEMU_CAPS_KQEMU = (1 << 0), /* Whether KQEMU is compiled in */ - QEMU_CAPS_VNC_COLON = (1 << 1), /* Does the VNC take just port, or address + display */ - QEMU_CAPS_NO_REBOOT = (1 << 2), /* Is the -no-reboot flag available */ - QEMU_CAPS_DRIVE = (1 << 3), /* Is the new -drive arg available */ - QEMU_CAPS_DRIVE_BOOT = (1 << 4), /* Does -drive support boot=on */ - QEMU_CAPS_NAME = (1 << 5), /* Is the -name flag available */ - QEMU_CAPS_UUID = (1 << 6), /* Is the -uuid flag available */ - QEMU_CAPS_DOMID = (1 << 7), /* Xenner only, special -domid flag available */ - QEMU_CAPS_VNET_HDR = (1 << 8), - QEMU_CAPS_MIGRATE_KVM_STDIO = (1 << 9), /* Original migration code from KVM. Also had tcp, but we can't use that - * since it had a design bug blocking the entire monitor console */ - QEMU_CAPS_MIGRATE_QEMU_TCP = (1 << 10), /* New migration syntax after merge to QEMU with TCP transport */ - QEMU_CAPS_MIGRATE_QEMU_EXEC = (1 << 11), /* New migration syntax after merge to QEMU with EXEC transport */ - QEMU_CAPS_DRIVE_CACHE_V2 = (1 << 12), /* Is the cache= flag wanting new v2 values */ - QEMU_CAPS_KVM = (1 << 13), /* Whether KVM is compiled in */ - QEMU_CAPS_DRIVE_FORMAT = (1 << 14), /* Is -drive format= avail */ - QEMU_CAPS_VGA = (1 << 15), /* Is -vga avail */ + QEMU_CAPS_KQEMU, /* Whether KQEMU is compiled in */ + QEMU_CAPS_VNC_COLON, /* Does the VNC take just port, or address + display */ + QEMU_CAPS_NO_REBOOT, /* Is the -no-reboot flag available */ + QEMU_CAPS_DRIVE, /* Is the new -drive arg available */ + QEMU_CAPS_DRIVE_BOOT, /* Does -drive support boot=on */ + QEMU_CAPS_NAME, /* Is the -name flag available */ + QEMU_CAPS_UUID, /* Is the -uuid flag available */ + QEMU_CAPS_DOMID, /* Xenner only, special -domid flag available */ + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_KVM_STDIO, /* Original migration code from KVM. Also had tcp, but we can't use that + * since it had a design bug blocking the entire monitor console */ + QEMU_CAPS_MIGRATE_QEMU_TCP, /* New migration syntax after merge to QEMU with TCP transport */ + QEMU_CAPS_MIGRATE_QEMU_EXEC, /* New migration syntax after merge to QEMU with EXEC transport */ + QEMU_CAPS_DRIVE_CACHE_V2, /* Is the cache= flag wanting new v2 values */ + QEMU_CAPS_KVM, /* Whether KVM is compiled in */ + QEMU_CAPS_DRIVE_FORMAT, /* Is -drive format= avail */ + QEMU_CAPS_VGA, /* Is -vga avail */ /* features added in qemu-0.10.0 or later */ - QEMU_CAPS_0_10 = (1 << 16), + QEMU_CAPS_0_10, QEMU_CAPS_NET_NAME = QEMU_CAPS_0_10, /* -net ...,name=str */ QEMU_CAPS_HOST_NET_ADD = QEMU_CAPS_0_10, /* host_net_add monitor command */ - QEMU_CAPS_PCIDEVICE = (1 << 17), /* PCI device assignment only supported by qemu-kvm */ - QEMU_CAPS_MEM_PATH = (1 << 18), /* mmap'ped guest backing supported */ - QEMU_CAPS_DRIVE_SERIAL = (1 << 19), /* -driver serial= available */ - QEMU_CAPS_XEN_DOMID = (1 << 20), /* -xen-domid (new style xen integration) */ - QEMU_CAPS_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */ - QEMU_CAPS_CHARDEV = (1 << 22), /* Is the new -chardev arg available */ - QEMU_CAPS_ENABLE_KVM = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */ - QEMU_CAPS_MONITOR_JSON = (1 << 24), /* JSON mode for monitor */ - QEMU_CAPS_BALLOON = (1 << 25), /* -balloon available */ - QEMU_CAPS_DEVICE = (1 << 26), /* Is the new -device arg available */ - QEMU_CAPS_SDL = (1 << 27), /* Is the new -sdl arg available */ - QEMU_CAPS_SMP_TOPOLOGY = (1 << 28), /* Is sockets=s,cores=c,threads=t available for -smp? */ - QEMU_CAPS_NETDEV = (1 << 29), /* The -netdev flag & netdev_add/remove monitor commands */ - QEMU_CAPS_RTC = (1 << 30), /* The -rtc flag for clock options */ - QEMU_CAPS_VNET_HOST = (1LL << 31), /* vnet-host support is available in qemu */ - QEMU_CAPS_RTC_TD_HACK = (1LL << 32), /* -rtc-td-hack available */ - QEMU_CAPS_NO_HPET = (1LL << 33), /* -no-hpet flag is supported */ - QEMU_CAPS_NO_KVM_PIT = (1LL << 34), /* -no-kvm-pit-reinjection supported */ - QEMU_CAPS_TDF = (1LL << 35), /* -tdf flag (user-mode pit catchup) */ - QEMU_CAPS_PCI_CONFIGFD = (1LL << 36), /* pci-assign.configfd */ - QEMU_CAPS_NODEFCONFIG = (1LL << 37), /* -nodefconfig */ - QEMU_CAPS_BOOT_MENU = (1LL << 38), /* -boot menu=on support */ - QEMU_CAPS_ENABLE_KQEMU = (1LL << 39), /* -enable-kqemu flag */ - QEMU_CAPS_FSDEV = (1LL << 40), /* -fstype filesystem passthrough */ - QEMU_CAPS_NESTING = (1LL << 41), /* -enable-nesting (SVM/VMX) */ - QEMU_CAPS_NAME_PROCESS = (1LL << 42), /* Is -name process= available */ - QEMU_CAPS_DRIVE_READONLY= (1LL << 43), /* -drive readonly=on|off */ - QEMU_CAPS_SMBIOS_TYPE = (1LL << 44), /* Is -smbios type= available */ - QEMU_CAPS_VGA_QXL = (1LL << 45), /* The 'qxl' arg for '-vga' */ - QEMU_CAPS_SPICE = (1LL << 46), /* Is -spice avail */ - QEMU_CAPS_VGA_NONE = (1LL << 47), /* The 'none' arg for '-vga' */ - QEMU_CAPS_MIGRATE_QEMU_FD = (1LL << 48), /* -incoming fd:n */ - QEMU_CAPS_BOOTINDEX = (1LL << 49), /* -device bootindex property */ - QEMU_CAPS_HDA_DUPLEX = (1LL << 50), /* -device hda-duplex */ - QEMU_CAPS_DRIVE_AIO = (1LL << 51), /* -drive aio= supported */ - QEMU_CAPS_PCI_MULTIBUS = (1LL << 52), /* bus=pci.0 vs bus=pci */ - QEMU_CAPS_PCI_BOOTINDEX = (1LL << 53), /* pci-assign.bootindex */ - QEMU_CAPS_CCID_EMULATED = (1LL << 54), /* -device ccid-card-emulated */ - QEMU_CAPS_CCID_PASSTHRU = (1LL << 55), /* -device ccid-card-passthru */ - QEMU_CAPS_CHARDEV_SPICEVMC = (1LL << 56), /* newer -chardev spicevmc */ - QEMU_CAPS_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ - QEMU_CAPS_VIRTIO_TX_ALG = (1LL << 58), /* -device virtio-net-pci,tx=string */ + QEMU_CAPS_PCIDEVICE, /* PCI device assignment only supported by qemu-kvm */ + QEMU_CAPS_MEM_PATH, /* mmap'ped guest backing supported */ + QEMU_CAPS_DRIVE_SERIAL, /* -driver serial= available */ + QEMU_CAPS_XEN_DOMID, /* -xen-domid (new style xen integration) */ + QEMU_CAPS_MIGRATE_QEMU_UNIX, /* Does qemu support unix domain sockets for migration? */ + QEMU_CAPS_CHARDEV, /* Is the new -chardev arg available */ + QEMU_CAPS_ENABLE_KVM, /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */ + QEMU_CAPS_MONITOR_JSON, /* JSON mode for monitor */ + QEMU_CAPS_BALLOON, /* -balloon available */ + QEMU_CAPS_DEVICE, /* Is the new -device arg available */ + QEMU_CAPS_SDL, /* Is the new -sdl arg available */ + QEMU_CAPS_SMP_TOPOLOGY, /* Is sockets=s,cores=c,threads=t available for -smp? */ + QEMU_CAPS_NETDEV, /* The -netdev flag & netdev_add/remove monitor commands */ + QEMU_CAPS_RTC, /* The -rtc flag for clock options */ + QEMU_CAPS_VNET_HOST, /* vnet-host support is available in qemu */ + QEMU_CAPS_RTC_TD_HACK, /* -rtc-td-hack available */ + QEMU_CAPS_NO_HPET, /* -no-hpet flag is supported */ + QEMU_CAPS_NO_KVM_PIT, /* -no-kvm-pit-reinjection supported */ + QEMU_CAPS_TDF, /* -tdf flag (user-mode pit catchup) */ + QEMU_CAPS_PCI_CONFIGFD, /* pci-assign.configfd */ + QEMU_CAPS_NODEFCONFIG, /* -nodefconfig */ + QEMU_CAPS_BOOT_MENU, /* -boot menu=on support */ + QEMU_CAPS_ENABLE_KQEMU, /* -enable-kqemu flag */ + QEMU_CAPS_FSDEV, /* -fstype filesystem passthrough */ + QEMU_CAPS_NESTING, /* -enable-nesting (SVM/VMX) */ + QEMU_CAPS_NAME_PROCESS, /* Is -name process= available */ + QEMU_CAPS_DRIVE_READONLY, /* -drive readonly=on|off */ + QEMU_CAPS_SMBIOS_TYPE, /* Is -smbios type= available */ + QEMU_CAPS_VGA_QXL, /* The 'qxl' arg for '-vga' */ + QEMU_CAPS_SPICE, /* Is -spice avail */ + QEMU_CAPS_VGA_NONE, /* The 'none' arg for '-vga' */ + QEMU_CAPS_MIGRATE_QEMU_FD, /* -incoming fd:n */ + QEMU_CAPS_BOOTINDEX, /* -device bootindex property */ + QEMU_CAPS_HDA_DUPLEX, /* -device hda-duplex */ + QEMU_CAPS_DRIVE_AIO, /* -drive aio= supported */ + QEMU_CAPS_PCI_MULTIBUS, /* bus=pci.0 vs bus=pci */ + QEMU_CAPS_PCI_BOOTINDEX, /* pci-assign.bootindex */ + QEMU_CAPS_CCID_EMULATED, /* -device ccid-card-emulated */ + QEMU_CAPS_CCID_PASSTHRU, /* -device ccid-card-passthru */ + QEMU_CAPS_CHARDEV_SPICEVMC, /* newer -chardev spicevmc */ + QEMU_CAPS_DEVICE_SPICEVMC, /* older -device spicevmc*/ + QEMU_CAPS_VIRTIO_TX_ALG, /* -device virtio-net-pci,tx=string */ + + QEMU_CAPS_LAST, /* this must always be the last item */ }; -void qemuCapsSet(unsigned long long *caps, - enum qemuCapsFlags flag); +virBitmapPtr qemuCapsNew(void); + +# define qemuCapsFree(caps) virBitmapFree(caps) + +void qemuCapsSet(virBitmapPtr caps, + enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1); -void qemuCapsClear(unsigned long long *caps, - enum qemuCapsFlags flag); +void qemuCapsClear(virBitmapPtr caps, + enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1); -bool qemuCapsGet(unsigned long long caps, +bool qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag); virCapsPtr qemuCapsInit(virCapsPtr old_caps); @@ -111,7 +118,7 @@ int qemuCapsProbeMachineTypes(const char *binary, int *nmachines); int qemuCapsProbeCPUModels(const char *qemu, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const char *arch, unsigned int *count, const char ***cpus); @@ -120,16 +127,16 @@ int qemuCapsExtractVersion(virCapsPtr caps, unsigned int *version); int qemuCapsExtractVersionInfo(const char *qemu, const char *arch, unsigned int *version, - unsigned long long *qemuCaps); + virBitmapPtr *qemuCaps); int qemuCapsParseHelpStr(const char *qemu, const char *str, - unsigned long long *qemuCaps, + virBitmapPtr qemuCaps, unsigned int *version, unsigned int *is_kvm, unsigned int *kvm_version); int qemuCapsParseDeviceStr(const char *str, - unsigned long long *qemuCaps); + virBitmapPtr qemuCaps); #endif /* __QEMU_CAPABILITIES_H__*/ diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 99e044a..ddd218f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -109,7 +109,7 @@ int qemuPhysIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const unsigned char *vmuuid, enum virVMOperationType vmop) { @@ -170,7 +170,7 @@ int qemuNetworkIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { char *brname = NULL; int err; @@ -305,7 +305,7 @@ cleanup: static int qemuOpenVhostNet(virDomainNetDefPtr net, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, int *vhostfd) { @@ -403,7 +403,7 @@ static int qemuAssignDeviceDiskAliasLegacy(virDomainDiskDefPtr disk) char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { char *ret; @@ -501,7 +501,7 @@ no_memory: int -qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCaps) +qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, virBitmapPtr qemuCaps) { if (qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE)) { if (qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) @@ -584,7 +584,7 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller) static int -qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCaps) +qemuAssignDeviceAliases(virDomainDefPtr def, virBitmapPtr qemuCaps) { int i; @@ -720,7 +720,7 @@ int qemuDomainAssignPCIAddresses(virDomainDefPtr def) { int ret = -1; - unsigned long long qemuCaps = 0; + virBitmapPtr qemuCaps = NULL; qemuDomainPCIAddressSetPtr addrs = NULL; if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, @@ -739,6 +739,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def) ret = 0; cleanup: + qemuCapsFree(qemuCaps); qemuDomainPCIAddressSetFree(addrs); return ret; @@ -1126,7 +1127,7 @@ error: static int qemuBuildDeviceAddressStr(virBufferPtr buf, virDomainDeviceInfoPtr info, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { if (info->addr.pci.domain != 0) { @@ -1180,7 +1181,7 @@ qemuSafeSerialParamValue(const char *value) char * qemuBuildDriveStr(virDomainDiskDefPtr disk, int bootable, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); @@ -1396,7 +1397,7 @@ error: char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); @@ -1453,7 +1454,7 @@ error: char *qemuBuildFSStr(virDomainFSDefPtr fs, - unsigned long long qemuCaps ATTRIBUTE_UNUSED) + virBitmapPtr qemuCaps ATTRIBUTE_UNUSED) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1489,7 +1490,7 @@ error: char * qemuBuildFSDevStr(virDomainFSDefPtr fs, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1520,7 +1521,7 @@ error: char * qemuBuildControllerDevStr(virDomainControllerDefPtr def, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1605,7 +1606,7 @@ qemuBuildNicStr(virDomainNetDefPtr net, char * qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *nic; @@ -1777,7 +1778,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1808,7 +1809,7 @@ error: char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1855,7 +1856,7 @@ error: char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *model = virDomainSoundModelTypeToString(sound->model); @@ -1917,7 +1918,7 @@ error: static char * qemuBuildVideoDevStr(virDomainVideoDefPtr video, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *model = qemuVideoTypeToString(video->type); @@ -1973,7 +1974,7 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev) char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -2066,7 +2067,7 @@ qemuBuildUSBHostdevUsbDevStr(virDomainHostdevDefPtr dev) * host side of the character device */ static char * qemuBuildChrChardevStr(virDomainChrSourceDefPtr dev, const char *alias, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; bool telnet; @@ -2244,7 +2245,7 @@ error: static char * qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE) @@ -2482,7 +2483,7 @@ static int qemuBuildCpuArgStr(const struct qemud_driver *driver, const virDomainDefPtr def, const char *emulator, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const struct utsname *ut, char **opt, bool *hasHwVirt) @@ -2607,7 +2608,7 @@ no_memory: static char * qemuBuildSmpArgStr(const virDomainDefPtr def, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -2660,7 +2661,7 @@ qemuBuildCommandLine(virConnectPtr conn, virDomainDefPtr def, virDomainChrSourceDefPtr monitor_chr, bool monitor_json, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const char *migrateFrom, int migrateFd, virDomainSnapshotObjPtr current_snapshot, @@ -2698,7 +2699,7 @@ qemuBuildCommandLine(virConnectPtr conn, */ if (qemuCapsGet(qemuCaps, QEMU_CAPS_KVM) && (def->virtType == VIR_DOMAIN_VIRT_QEMU)) - qemuCapsClear(&qemuCaps, QEMU_CAPS_DRIVE_BOOT); + qemuCapsClear(qemuCaps, QEMU_CAPS_DRIVE_BOOT); switch (def->virtType) { case VIR_DOMAIN_VIRT_QEMU: @@ -3241,13 +3242,13 @@ qemuBuildCommandLine(virConnectPtr conn, if (disk->bus != VIR_DOMAIN_DISK_BUS_XEN) { withDeviceArg = 1; } else { - qemuCapsClear(&qemuCaps, QEMU_CAPS_DEVICE); + qemuCapsClear(qemuCaps, QEMU_CAPS_DEVICE); deviceFlagMasked = true; } } optstr = qemuBuildDriveStr(disk, bootable, qemuCaps); if (deviceFlagMasked) - qemuCapsSet(&qemuCaps, QEMU_CAPS_DEVICE); + qemuCapsSet(qemuCaps, QEMU_CAPS_DEVICE); if (!optstr) goto error; virCommandAddArg(cmd, optstr); diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 332d5a3..1902472 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -46,7 +46,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn, virDomainDefPtr def, virDomainChrSourceDefPtr monitor_chr, bool monitor_json, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const char *migrateFrom, int migrateFd, virDomainSnapshotObjPtr current_snapshot, @@ -68,44 +68,44 @@ char * qemuBuildNicStr(virDomainNetDefPtr net, /* Current, best practice */ char * qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); /* Both legacy & current support */ char *qemuBuildDriveStr(virDomainDiskDefPtr disk, int bootable, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); char *qemuBuildFSStr(virDomainFSDefPtr fs, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); /* Current, best practice */ char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); char * qemuBuildFSDevStr(virDomainFSDefPtr fs, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); /* Current, best practice */ char * qemuBuildControllerDevStr(virDomainControllerDefPtr def, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); char * qemuBuildUSBInputDevStr(virDomainInputDefPtr dev); char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); /* Legacy, pre device support */ char * qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev); /* Current, best practice */ char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuOpenPCIConfig(virDomainHostdevDefPtr dev); @@ -119,13 +119,13 @@ char * qemuBuildUSBHostdevDevStr(virDomainHostdevDefPtr dev); int qemuNetworkIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemCmdFlags) + virBitmapPtr qemuCaps) ATTRIBUTE_NONNULL(1); int qemuPhysIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const unsigned char *vmuuid, enum virVMOperationType vmop); @@ -156,7 +156,7 @@ int qemuAssignDevicePCISlots(virDomainDefPtr def, qemuDomainPCIAddressSetPtr ad int qemuDomainNetVLAN(virDomainNetDefPtr def); int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx); -int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, unsigned long long qemuCaps); +int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, virBitmapPtr qemuCaps); int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr net, int idx); int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6dc356e..e99d740 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3535,7 +3535,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, struct qemud_driver *driver = conn->privateData; virDomainDefPtr def = NULL; virDomainChrSourceDef monConfig; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; virCommandPtr cmd = NULL; char *ret = NULL; int i; @@ -3608,6 +3608,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, cleanup: qemuDriverUnlock(driver); + qemuCapsFree(qemuCaps); virCommandFree(cmd); virDomainDefFree(def); return ret; @@ -3944,7 +3945,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom, struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; virDomainDeviceDefPtr dev = NULL; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; virCgroupPtr cgroup = NULL; int ret = -1; @@ -4075,6 +4076,7 @@ cleanup: if (cgroup) virCgroupFree(&cgroup); + qemuCapsFree(qemuCaps); virDomainDeviceDefFree(dev); if (vm) virDomainObjUnlock(vm); @@ -4102,7 +4104,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; virDomainDeviceDefPtr dev = NULL; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; virCgroupPtr cgroup = NULL; int ret = -1; bool force = (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) != 0; @@ -4208,6 +4210,7 @@ cleanup: if (cgroup) virCgroupFree(&cgroup); + qemuCapsFree(qemuCaps); virDomainDeviceDefFree(dev); if (vm) virDomainObjUnlock(vm); @@ -4220,7 +4223,7 @@ static int qemudDomainDetachDevice(virDomainPtr dom, const char *xml) { struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; virDomainDeviceDefPtr dev = NULL; int ret = -1; @@ -4293,6 +4296,7 @@ endjob: vm = NULL; cleanup: + qemuCapsFree(qemuCaps); virDomainDeviceDefFree(dev); if (vm) virDomainObjUnlock(vm); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 31f0ebb..0002af0 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -44,7 +44,7 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, bool force) { virDomainDiskDefPtr origdisk = NULL; @@ -140,7 +140,7 @@ error: int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i, ret; const char* type = virDomainDiskBusTypeToString(disk->bus); @@ -235,7 +235,7 @@ error: int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainControllerDefPtr controller, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i; int ret = -1; @@ -300,7 +300,7 @@ static virDomainControllerDefPtr qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver, virDomainObjPtr vm, int controller, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i; virDomainControllerDefPtr cont; @@ -346,7 +346,7 @@ qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver, int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -462,7 +462,7 @@ error: int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { qemuDomainObjPrivatePtr priv = vm->privateData; int i, ret; @@ -547,7 +547,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, virDomainNetDefPtr net, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { qemuDomainObjPrivatePtr priv = vm->privateData; char *tapfd_name = NULL; @@ -777,7 +777,7 @@ no_memory: int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { qemuDomainObjPrivatePtr priv = vm->privateData; int ret; @@ -872,7 +872,7 @@ error: int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int ret; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -935,7 +935,7 @@ error: int qemuDomainAttachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -1130,7 +1130,7 @@ static inline int qemuFindDisk(virDomainDefPtr def, const char *dst) int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i, ret = -1; virDomainDiskDefPtr detach = NULL; @@ -1221,7 +1221,7 @@ cleanup: int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i, ret = -1; virDomainDiskDefPtr detach = NULL; @@ -1350,7 +1350,7 @@ static bool qemuDomainControllerIsBusy(virDomainObjPtr vm, int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i, ret = -1; virDomainControllerDefPtr detach = NULL; @@ -1434,7 +1434,7 @@ cleanup: int qemuDomainDetachNetDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i, ret = -1; virDomainNetDefPtr detach = NULL; @@ -1561,7 +1561,7 @@ cleanup: int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virDomainHostdevDefPtr detach = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1661,7 +1661,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virDomainHostdevDefPtr detach = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1743,7 +1743,7 @@ int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, int qemuDomainDetachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virDomainHostdevDefPtr hostdev = dev->data.hostdev; int ret; diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index a5eadd3..984c3b8 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -32,41 +32,41 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, bool force); int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainControllerDefPtr controller, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachSCSIDisk(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDiskDefPtr disk, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachNetDevice(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, virDomainNetDefPtr net, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainAttachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainChangeGraphics(struct qemud_driver *driver, virDomainObjPtr vm, virDomainGraphicsDefPtr dev); @@ -78,31 +78,31 @@ int qemuDomainChangeGraphicsPasswords(struct qemud_driver *driver, int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainDetachSCSIDiskDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainDetachNetDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainDetachHostPciDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainDetachHostUsbDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); int qemuDomainDetachHostDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps); + virBitmapPtr qemuCaps); #endif /* __QEMU_HOTPLUG_H__ */ diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 3a52bce..822cb18 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -244,7 +244,7 @@ qemuMigrationPrepareTunnel(struct qemud_driver *driver, int ret = -1; int internalret; char *unixfile = NULL; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; qemuDomainObjPrivatePtr priv = NULL; struct timeval now; @@ -376,6 +376,7 @@ endjob: } cleanup: + qemuCapsFree(qemuCaps); virDomainDefFree(def); if (unixfile) unlink(unixfile); @@ -708,7 +709,7 @@ static int doTunnelMigrate(struct qemud_driver *driver, virStreamPtr st = NULL; char *unixfile = NULL; int internalret; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; int status; unsigned long long transferred, remaining, total; unsigned int background_flags = QEMU_MONITOR_MIGRATE_BACKGROUND; @@ -894,6 +895,7 @@ finish: cleanup: VIR_FORCE_CLOSE(client_sock); VIR_FORCE_CLOSE(qemu_sock); + qemuCapsFree(qemuCaps); if (ddomain) virUnrefDomain(ddomain); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 12e5595..7879165 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1137,7 +1137,7 @@ static int qemuProcessInitPasswords(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int ret = 0; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1789,7 +1789,7 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa struct qemuProcessReconnectData *data = opaque; struct qemud_driver *driver = data->driver; qemuDomainObjPrivatePtr priv; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; virConnectPtr conn = data->conn; virDomainObjLock(obj); @@ -1835,9 +1835,12 @@ qemuProcessReconnect(void *payload, const char *name ATTRIBUTE_UNUSED, void *opa if (virDomainObjUnref(obj) > 0) virDomainObjUnlock(obj); + + qemuCapsFree(qemuCaps); return; error: + qemuCapsFree(qemuCaps); if (!virDomainObjIsActive(obj)) { if (virDomainObjUnref(obj) > 0) virDomainObjUnlock(obj); @@ -1879,7 +1882,7 @@ int qemuProcessStart(virConnectPtr conn, enum virVMOperationType vmop) { int ret; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; off_t pos = -1; char ebuf[1024]; char *pidfile = NULL; @@ -2220,6 +2223,7 @@ int qemuProcessStart(virConnectPtr conn, if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) goto cleanup; + qemuCapsFree(qemuCaps); virCommandFree(cmd); VIR_FORCE_CLOSE(logfile); @@ -2229,6 +2233,7 @@ cleanup: /* We jump here if we failed to start the VM for any reason, or * if we failed to initialize the now running VM. kill it off and * pretend we never started it */ + qemuCapsFree(qemuCaps); virCommandFree(cmd); VIR_FORCE_CLOSE(logfile); qemuProcessStop(driver, vm, 0); -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
This is done for two reasons: - we are getting very close to 64 flags which is the maximum we can use with unsigned long long - by using LL constants in enum we already violates C99 constraint that enum values have to fit into int
--- Notes: Version 2: - rebased to current master - qemuCapsFree added to a list of free-like functions in cfg.mk - don't fail qemuCapsParseHelpStr() if there is no memory for bitmap string used for a debug message
Nice changes.
+++ b/cfg.mk @@ -135,7 +135,8 @@ useless_free_options = \ --name=virThreadPoolFree \ --name=xmlFree \ --name=xmlXPathFreeContext \ - --name=xmlXPathFreeObject + --name=xmlXPathFreeObject \ + --name=qemuCapsFree
This list is sorted; can you reshuffle the lines to stick it in just before sexpr_free instead?
@@ -1029,10 +1029,13 @@ int qemuCapsParseHelpStr(const char *qemu,
*version = (major * 1000 * 1000) + (minor * 1000) + micro;
- *flags = qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version); + qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version, flags); + + strflags = virBitmapString(flags); + VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s", + major, minor, micro, *version, NULLSTR(strflags)); + VIR_FREE(strflags);
- VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags 0x%llx", - major, minor, micro, *version, *flags);
Yeah, that's better than v1. ACK with the cfg.mk nit fixed. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:40:12 -0700, Eric Blake wrote:
On 02/22/2011 09:48 AM, Jiri Denemark wrote:
This is done for two reasons: - we are getting very close to 64 flags which is the maximum we can use with unsigned long long - by using LL constants in enum we already violates C99 constraint that enum values have to fit into int
+++ b/cfg.mk @@ -135,7 +135,8 @@ useless_free_options = \ --name=virThreadPoolFree \ --name=xmlFree \ --name=xmlXPathFreeContext \ - --name=xmlXPathFreeObject + --name=xmlXPathFreeObject \ + --name=qemuCapsFree
This list is sorted; can you reshuffle the lines to stick it in just before sexpr_free instead?
Oh, how come I didn't notice the list was actually sorted...
ACK with the cfg.mk nit fixed.
Thanks, pushed. Jirka

This needs to be squashed into the previous patch but is provided separately for easier review. --- Notes: Version 2: - rebased to current master src/qemu/qemu_capabilities.c | 14 + src/qemu/qemu_capabilities.h | 2 + tests/qemuhelptest.c | 729 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 470 ++++++++++++++-------------- 4 files changed, 619 insertions(+), 596 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 873360a..477924d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -39,6 +39,7 @@ #include <unistd.h> #include <sys/wait.h> #include <sys/utsname.h> +#include <stdarg.h> #define VIR_FROM_THIS VIR_FROM_QEMU @@ -1261,6 +1262,19 @@ qemuCapsSet(virBitmapPtr caps, void +qemuCapsSetList(virBitmapPtr caps, ...) +{ + va_list list; + int flag; + + va_start(list, caps); + while ((flag = va_arg(list, int)) < QEMU_CAPS_LAST) + ignore_value(virBitmapSetBit(caps, flag)); + va_end(list); +} + + +void qemuCapsClear(virBitmapPtr caps, enum qemuCapsFlags flag) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index b506e56..34f432f 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -105,6 +105,8 @@ virBitmapPtr qemuCapsNew(void); void qemuCapsSet(virBitmapPtr caps, enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1); +void qemuCapsSetList(virBitmapPtr caps, ...) ATTRIBUTE_NONNULL(1); + void qemuCapsClear(virBitmapPtr caps, enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1); diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c index 75ecf58..335364f 100644 --- a/tests/qemuhelptest.c +++ b/tests/qemuhelptest.c @@ -13,7 +13,7 @@ struct testInfo { const char *name; - unsigned long long flags; + virBitmapPtr flags; unsigned int version; unsigned int is_kvm; unsigned int kvm_version; @@ -22,14 +22,14 @@ struct testInfo { static char *progname; static char *abs_srcdir; -static void printMismatchedFlags(unsigned long long got, - unsigned long long expect) +static void printMismatchedFlags(virBitmapPtr got, + virBitmapPtr expect) { int i; - for (i = 0 ; i < (sizeof(got)*CHAR_BIT) ; i++) { - unsigned long long gotFlag = (got & (1LL << i)); - unsigned long long expectFlag = (expect & (1LL << i)); + for (i = 0 ; i < QEMU_CAPS_LAST ; i++) { + bool gotFlag = qemuCapsGet(got, i); + bool expectFlag = qemuCapsGet(expect, i); if (gotFlag && !expectFlag) fprintf(stderr, "Extra flag %i\n", i); if (!gotFlag && expectFlag) @@ -44,8 +44,10 @@ static int testHelpStrParsing(const void *data) char helpStr[MAX_HELP_OUTPUT_SIZE]; char *help = &(helpStr[0]); unsigned int version, is_kvm, kvm_version; - unsigned long long flags; + virBitmapPtr flags = NULL; int ret = -1; + char *got = NULL; + char *expected = NULL; if (virAsprintf(&path, "%s/qemuhelpdata/%s", abs_srcdir, info->name) < 0) return -1; @@ -53,7 +55,10 @@ static int testHelpStrParsing(const void *data) if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0) goto cleanup; - if (qemuCapsParseHelpStr("QEMU", help, &flags, + if (!(flags = qemuCapsNew())) + goto cleanup; + + if (qemuCapsParseHelpStr("QEMU", help, flags, &version, &is_kvm, &kvm_version) == -1) goto cleanup; @@ -66,14 +71,19 @@ static int testHelpStrParsing(const void *data) if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0) goto cleanup; - if (qemuCapsParseDeviceStr(help, &flags) < 0) + if (qemuCapsParseDeviceStr(help, flags) < 0) goto cleanup; } - if (flags != info->flags) { + got = virBitmapString(flags); + expected = virBitmapString(info->flags); + if (!got || !expected) + goto cleanup; + + if (STRNEQ(got, expected)) { fprintf(stderr, - "Computed flags do not match: got 0x%llx, expected 0x%llx\n", - flags, info->flags); + "Computed flags do not match: got %s, expected %s\n", + got, expected); if (getenv("VIR_TEST_DEBUG")) printMismatchedFlags(flags, info->flags); @@ -104,6 +114,9 @@ static int testHelpStrParsing(const void *data) ret = 0; cleanup: VIR_FREE(path); + qemuCapsFree(flags); + VIR_FREE(got); + VIR_FREE(expected); return ret; } @@ -124,365 +137,359 @@ mymain(int argc, char **argv) if (!abs_srcdir) abs_srcdir = getcwd(cwd, sizeof(cwd)); -# define DO_TEST(name, flags, version, is_kvm, kvm_version) \ - do { \ - const struct testInfo info = { name, flags, version, is_kvm, kvm_version }; \ - if (virtTestRun("QEMU Help String Parsing " name, \ - 1, testHelpStrParsing, &info) < 0) \ - ret = -1; \ +# define DO_TEST(name, version, is_kvm, kvm_version, ...) \ + do { \ + struct testInfo info = { \ + name, NULL, version, is_kvm, kvm_version \ + }; \ + if (!(info.flags = qemuCapsNew())) \ + return EXIT_FAILURE; \ + qemuCapsSetList(info.flags, __VA_ARGS__, QEMU_CAPS_LAST); \ + if (virtTestRun("QEMU Help String Parsing " name, \ + 1, testHelpStrParsing, &info) < 0) \ + ret = -1; \ + qemuCapsFree(info.flags); \ } while (0) - DO_TEST("qemu-0.9.1", - QEMU_CAPS_KQEMU | - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | + DO_TEST("qemu-0.9.1", 9001, 0, 0, + QEMU_CAPS_KQEMU, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_NAME); + DO_TEST("kvm-74", 9001, 1, 74, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_NAME, - 9001, 0, 0); - DO_TEST("kvm-74", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_KVM_STDIO | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_MEM_PATH | + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_KVM_STDIO, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_TDF); + DO_TEST("kvm-83-rhel56", 9001, 1, 83, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_VGA, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_BALLOON, + QEMU_CAPS_RTC_TD_HACK, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_NO_KVM_PIT, QEMU_CAPS_TDF, - 9001, 1, 74); - DO_TEST("kvm-83-rhel56", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_VGA | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_BALLOON | - QEMU_CAPS_RTC_TD_HACK | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_DRIVE_READONLY | - QEMU_CAPS_SMBIOS_TYPE | - QEMU_CAPS_SPICE, - 9001, 1, 83); - DO_TEST("qemu-0.10.5", - QEMU_CAPS_KQEMU | - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_ENABLE_KVM | - QEMU_CAPS_SDL | - QEMU_CAPS_RTC_TD_HACK | - QEMU_CAPS_NO_HPET | + QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_SMBIOS_TYPE, + QEMU_CAPS_SPICE); + DO_TEST("qemu-0.10.5", 10005, 0, 0, + QEMU_CAPS_KQEMU, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_SDL, + QEMU_CAPS_RTC_TD_HACK, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_VGA_NONE); + DO_TEST("qemu-kvm-0.10.5", 10005, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_SDL, + QEMU_CAPS_RTC_TD_HACK, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_NESTING, + QEMU_CAPS_VGA_NONE); + DO_TEST("kvm-86", 10050, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_SDL, + QEMU_CAPS_RTC_TD_HACK, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_NESTING, + QEMU_CAPS_SMBIOS_TYPE, + QEMU_CAPS_VGA_NONE); + DO_TEST("qemu-kvm-0.11.0-rc2", 10092, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_BALLOON, + QEMU_CAPS_SDL, + QEMU_CAPS_RTC_TD_HACK, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_NESTING, + QEMU_CAPS_NAME_PROCESS, + QEMU_CAPS_SMBIOS_TYPE, + QEMU_CAPS_VGA_NONE); + DO_TEST("qemu-0.12.1", 12001, 0, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_SDL, + QEMU_CAPS_XEN_DOMID, + QEMU_CAPS_MIGRATE_QEMU_UNIX, + QEMU_CAPS_CHARDEV, + QEMU_CAPS_BALLOON, + QEMU_CAPS_DEVICE, + QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_RTC, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_NAME_PROCESS, + QEMU_CAPS_SMBIOS_TYPE, QEMU_CAPS_VGA_NONE, - 10005, 0, 0); - DO_TEST("qemu-kvm-0.10.5", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_SDL | - QEMU_CAPS_RTC_TD_HACK | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_NESTING | + QEMU_CAPS_MIGRATE_QEMU_FD, + QEMU_CAPS_DRIVE_AIO); + DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_MIGRATE_QEMU_UNIX, + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_BALLOON, + QEMU_CAPS_DEVICE, + QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_RTC, + QEMU_CAPS_VNET_HOST, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_PCI_CONFIGFD, + QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_NESTING, + QEMU_CAPS_NAME_PROCESS, + QEMU_CAPS_SMBIOS_TYPE, + QEMU_CAPS_VGA_QXL, + QEMU_CAPS_SPICE, QEMU_CAPS_VGA_NONE, - 10005, 1, 0); - DO_TEST("kvm-86", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_SDL | - QEMU_CAPS_RTC_TD_HACK | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_NESTING | - QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_MIGRATE_QEMU_FD, + QEMU_CAPS_DRIVE_AIO, + QEMU_CAPS_DEVICE_SPICEVMC); + DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_SDL, + QEMU_CAPS_MIGRATE_QEMU_UNIX, + QEMU_CAPS_CHARDEV, + QEMU_CAPS_BALLOON, + QEMU_CAPS_DEVICE, + QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_RTC, + QEMU_CAPS_VNET_HOST, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_NESTING, + QEMU_CAPS_NAME_PROCESS, + QEMU_CAPS_SMBIOS_TYPE, QEMU_CAPS_VGA_NONE, - 10050, 1, 0); - DO_TEST("qemu-kvm-0.11.0-rc2", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_ENABLE_KVM | - QEMU_CAPS_BALLOON | - QEMU_CAPS_SDL | - QEMU_CAPS_RTC_TD_HACK | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_BOOT_MENU | - QEMU_CAPS_NESTING | - QEMU_CAPS_NAME_PROCESS | - QEMU_CAPS_SMBIOS_TYPE | + QEMU_CAPS_MIGRATE_QEMU_FD, + QEMU_CAPS_DRIVE_AIO); + DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_DRIVE_BOOT, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_XEN_DOMID, + QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_SDL, + QEMU_CAPS_MIGRATE_QEMU_UNIX, + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_MONITOR_JSON, + QEMU_CAPS_BALLOON, + QEMU_CAPS_DEVICE, + QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_NETDEV, + QEMU_CAPS_RTC, + QEMU_CAPS_VNET_HOST, + QEMU_CAPS_NO_HPET, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_PCI_CONFIGFD, + QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_FSDEV, + QEMU_CAPS_NESTING, + QEMU_CAPS_NAME_PROCESS, + QEMU_CAPS_SMBIOS_TYPE, + QEMU_CAPS_SPICE, QEMU_CAPS_VGA_NONE, - 10092, 1, 0); - DO_TEST("qemu-0.12.1", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_DRIVE_READONLY | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_ENABLE_KVM | - QEMU_CAPS_SDL | - QEMU_CAPS_XEN_DOMID | - QEMU_CAPS_MIGRATE_QEMU_UNIX | - QEMU_CAPS_CHARDEV | - QEMU_CAPS_BALLOON | - QEMU_CAPS_DEVICE | - QEMU_CAPS_SMP_TOPOLOGY | - QEMU_CAPS_RTC | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_BOOT_MENU | - QEMU_CAPS_NAME_PROCESS | - QEMU_CAPS_SMBIOS_TYPE | - QEMU_CAPS_VGA_NONE | - QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_MIGRATE_QEMU_FD, QEMU_CAPS_DRIVE_AIO, - 12001, 0, 0); - DO_TEST("qemu-kvm-0.12.1.2-rhel60", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_DRIVE_READONLY | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_MIGRATE_QEMU_UNIX | - QEMU_CAPS_CHARDEV | - QEMU_CAPS_ENABLE_KVM | - QEMU_CAPS_BALLOON | - QEMU_CAPS_DEVICE | - QEMU_CAPS_SMP_TOPOLOGY | - QEMU_CAPS_RTC | - QEMU_CAPS_VNET_HOST | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_PCI_CONFIGFD | - QEMU_CAPS_NODEFCONFIG | - QEMU_CAPS_BOOT_MENU | - QEMU_CAPS_NESTING | - QEMU_CAPS_NAME_PROCESS | - QEMU_CAPS_SMBIOS_TYPE | - QEMU_CAPS_VGA_QXL | - QEMU_CAPS_SPICE | - QEMU_CAPS_VGA_NONE | - QEMU_CAPS_MIGRATE_QEMU_FD | - QEMU_CAPS_DRIVE_AIO | - QEMU_CAPS_DEVICE_SPICEVMC, - 12001, 1, 0); - DO_TEST("qemu-kvm-0.12.3", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_DRIVE_READONLY | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_SDL | - QEMU_CAPS_MIGRATE_QEMU_UNIX | - QEMU_CAPS_CHARDEV | - QEMU_CAPS_BALLOON | - QEMU_CAPS_DEVICE | - QEMU_CAPS_SMP_TOPOLOGY | - QEMU_CAPS_RTC | - QEMU_CAPS_VNET_HOST | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_BOOT_MENU | - QEMU_CAPS_NESTING | - QEMU_CAPS_NAME_PROCESS | - QEMU_CAPS_SMBIOS_TYPE | - QEMU_CAPS_VGA_NONE | - QEMU_CAPS_MIGRATE_QEMU_FD | + QEMU_CAPS_DEVICE_SPICEVMC); + DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_DRIVE, + QEMU_CAPS_NAME, + QEMU_CAPS_UUID, + QEMU_CAPS_VNET_HDR, + QEMU_CAPS_MIGRATE_QEMU_TCP, + QEMU_CAPS_MIGRATE_QEMU_EXEC, + QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_KVM, + QEMU_CAPS_DRIVE_FORMAT, + QEMU_CAPS_DRIVE_SERIAL, + QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_VGA, + QEMU_CAPS_0_10, + QEMU_CAPS_PCIDEVICE, + QEMU_CAPS_MEM_PATH, + QEMU_CAPS_MIGRATE_QEMU_UNIX, + QEMU_CAPS_CHARDEV, + QEMU_CAPS_ENABLE_KVM, + QEMU_CAPS_BALLOON, + QEMU_CAPS_DEVICE, + QEMU_CAPS_SMP_TOPOLOGY, + QEMU_CAPS_RTC, + QEMU_CAPS_VNET_HOST, + QEMU_CAPS_NO_KVM_PIT, + QEMU_CAPS_TDF, + QEMU_CAPS_PCI_CONFIGFD, + QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_BOOT_MENU, + QEMU_CAPS_NESTING, + QEMU_CAPS_NAME_PROCESS, + QEMU_CAPS_SMBIOS_TYPE, + QEMU_CAPS_VGA_QXL, + QEMU_CAPS_SPICE, + QEMU_CAPS_VGA_NONE, + QEMU_CAPS_MIGRATE_QEMU_FD, + QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_DRIVE_AIO, - 12003, 1, 0); - DO_TEST("qemu-kvm-0.13.0", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_XEN_DOMID | - QEMU_CAPS_DRIVE_READONLY | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_SDL | - QEMU_CAPS_MIGRATE_QEMU_UNIX | - QEMU_CAPS_CHARDEV | - QEMU_CAPS_ENABLE_KVM | - QEMU_CAPS_MONITOR_JSON | - QEMU_CAPS_BALLOON | - QEMU_CAPS_DEVICE | - QEMU_CAPS_SMP_TOPOLOGY | - QEMU_CAPS_NETDEV | - QEMU_CAPS_RTC | - QEMU_CAPS_VNET_HOST | - QEMU_CAPS_NO_HPET | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_PCI_CONFIGFD | - QEMU_CAPS_NODEFCONFIG | - QEMU_CAPS_BOOT_MENU | - QEMU_CAPS_FSDEV | - QEMU_CAPS_NESTING | - QEMU_CAPS_NAME_PROCESS | - QEMU_CAPS_SMBIOS_TYPE | - QEMU_CAPS_SPICE | - QEMU_CAPS_VGA_NONE | - QEMU_CAPS_MIGRATE_QEMU_FD | - QEMU_CAPS_DRIVE_AIO | - QEMU_CAPS_DEVICE_SPICEVMC, - 13000, 1, 0); - DO_TEST("qemu-kvm-0.12.1.2-rhel61", - QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - QEMU_CAPS_DRIVE | - QEMU_CAPS_NAME | - QEMU_CAPS_UUID | - QEMU_CAPS_VNET_HDR | - QEMU_CAPS_MIGRATE_QEMU_TCP | - QEMU_CAPS_MIGRATE_QEMU_EXEC | - QEMU_CAPS_DRIVE_CACHE_V2 | - QEMU_CAPS_KVM | - QEMU_CAPS_DRIVE_FORMAT | - QEMU_CAPS_DRIVE_SERIAL | - QEMU_CAPS_DRIVE_READONLY | - QEMU_CAPS_VGA | - QEMU_CAPS_0_10 | - QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_MEM_PATH | - QEMU_CAPS_MIGRATE_QEMU_UNIX | - QEMU_CAPS_CHARDEV | - QEMU_CAPS_ENABLE_KVM | - QEMU_CAPS_BALLOON | - QEMU_CAPS_DEVICE | - QEMU_CAPS_SMP_TOPOLOGY | - QEMU_CAPS_RTC | - QEMU_CAPS_VNET_HOST | - QEMU_CAPS_NO_KVM_PIT | - QEMU_CAPS_TDF | - QEMU_CAPS_PCI_CONFIGFD | - QEMU_CAPS_NODEFCONFIG | - QEMU_CAPS_BOOT_MENU | - QEMU_CAPS_NESTING | - QEMU_CAPS_NAME_PROCESS | - QEMU_CAPS_SMBIOS_TYPE | - QEMU_CAPS_VGA_QXL | - QEMU_CAPS_SPICE | - QEMU_CAPS_VGA_NONE | - QEMU_CAPS_MIGRATE_QEMU_FD | - QEMU_CAPS_HDA_DUPLEX | - QEMU_CAPS_DRIVE_AIO | - QEMU_CAPS_CCID_PASSTHRU | - QEMU_CAPS_CHARDEV_SPICEVMC | - QEMU_CAPS_VIRTIO_TX_ALG, - 12001, 1, 0); + QEMU_CAPS_CCID_PASSTHRU, + QEMU_CAPS_CHARDEV_SPICEVMC, + QEMU_CAPS_VIRTIO_TX_ALG); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index a4fe43f..fec0dbc 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -29,7 +29,7 @@ static struct qemud_driver driver; static int testCompareXMLToArgvFiles(const char *xml, const char *cmdline, - unsigned long long extraFlags, + virBitmapPtr extraFlags, const char *migrateFrom, int migrateFd, bool expectError) { @@ -38,7 +38,6 @@ static int testCompareXMLToArgvFiles(const char *xml, int len; char *actualargv = NULL; int ret = -1; - unsigned long long flags; virDomainDefPtr vmdef = NULL; virDomainChrSourceDef monitor_chr; virConnectPtr conn; @@ -89,14 +88,15 @@ static int testCompareXMLToArgvFiles(const char *xml, monitor_chr.data.nix.path = (char *)"/tmp/test-monitor"; monitor_chr.data.nix.listen = true; - flags = QEMU_CAPS_VNC_COLON | - QEMU_CAPS_NO_REBOOT | - extraFlags; + qemuCapsSetList(extraFlags, + QEMU_CAPS_VNC_COLON, + QEMU_CAPS_NO_REBOOT, + QEMU_CAPS_LAST); if (qemudCanonicalizeMachine(&driver, vmdef) < 0) goto fail; - if (qemuCapsGet(flags, QEMU_CAPS_DEVICE)) { + if (qemuCapsGet(extraFlags, QEMU_CAPS_DEVICE)) { qemuDomainPCIAddressSetPtr pciaddrs; if (!(pciaddrs = qemuDomainPCIAddressSetCreate(vmdef))) goto fail; @@ -117,11 +117,11 @@ static int testCompareXMLToArgvFiles(const char *xml, */ if (STREQLEN(vmdef->os.arch, "x86_64", 6) || STREQLEN(vmdef->os.arch, "i686", 4)) { - flags |= QEMU_CAPS_PCI_MULTIBUS; + qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS); } if (!(cmd = qemuBuildCommandLine(conn, &driver, - vmdef, &monitor_chr, false, flags, + vmdef, &monitor_chr, false, extraFlags, migrateFrom, migrateFd, NULL, VIR_VM_OP_CREATE))) goto fail; @@ -169,7 +169,7 @@ static int testCompareXMLToArgvFiles(const char *xml, struct testInfo { const char *name; - unsigned long long extraFlags; + virBitmapPtr extraFlags; const char *migrateFrom; int migrateFd; bool expectError; @@ -230,18 +230,24 @@ mymain(int argc, char **argv) if (cpuMapOverride(map) < 0) return EXIT_FAILURE; -# define DO_TEST_FULL(name, extraFlags, migrateFrom, migrateFd, expectError) \ +# define DO_TEST_FULL(name, migrateFrom, migrateFd, expectError, ...) \ do { \ - const struct testInfo info = { \ - name, extraFlags, migrateFrom, migrateFd, expectError \ + struct testInfo info = { \ + name, NULL, migrateFrom, migrateFd, expectError \ }; \ + if (!(info.extraFlags = qemuCapsNew())) \ + return EXIT_FAILURE; \ + qemuCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST); \ if (virtTestRun("QEMU XML-2-ARGV " name, \ 1, testCompareXMLToArgvHelper, &info) < 0) \ ret = -1; \ + qemuCapsFree(info.extraFlags); \ } while (0) -# define DO_TEST(name, extraFlags, expectError) \ - DO_TEST_FULL(name, extraFlags, NULL, -1, expectError) +# define DO_TEST(name, expectError, ...) \ + DO_TEST_FULL(name, NULL, -1, expectError, __VA_ARGS__) + +# define NONE QEMU_CAPS_LAST /* Unset or set all envvars here that are copied in qemudBuildCommandLine * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected @@ -256,241 +262,235 @@ mymain(int argc, char **argv) unsetenv("QEMU_AUDIO_DRV"); unsetenv("SDL_AUDIODRIVER"); - DO_TEST("minimal", QEMU_CAPS_NAME, false); - DO_TEST("machine-aliases1", 0, false); - DO_TEST("machine-aliases2", 0, true); - DO_TEST("boot-cdrom", 0, false); - DO_TEST("boot-network", 0, false); - DO_TEST("boot-floppy", 0, false); - DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU, false); - DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU, false); - DO_TEST("boot-order", QEMU_CAPS_BOOTINDEX | - QEMU_CAPS_DRIVE | QEMU_CAPS_DEVICE, false); - DO_TEST("bootloader", QEMU_CAPS_DOMID, true); - DO_TEST("clock-utc", 0, false); - DO_TEST("clock-localtime", 0, false); + DO_TEST("minimal", false, QEMU_CAPS_NAME); + DO_TEST("machine-aliases1", false, NONE); + DO_TEST("machine-aliases2", true, NONE); + DO_TEST("boot-cdrom", false, NONE); + DO_TEST("boot-network", false, NONE); + DO_TEST("boot-floppy", false, NONE); + DO_TEST("boot-multi", false, QEMU_CAPS_BOOT_MENU); + DO_TEST("boot-menu-disable", false, QEMU_CAPS_BOOT_MENU); + DO_TEST("boot-order", false, + QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE); + DO_TEST("bootloader", true, QEMU_CAPS_DOMID); + DO_TEST("clock-utc", false, NONE); + DO_TEST("clock-localtime", false, NONE); /* * Can't be enabled since the absolute timestamp changes every time - DO_TEST("clock-variable", QEMU_CAPS_RTC, false); + DO_TEST("clock-variable", false, QEMU_CAPS_RTC); */ - DO_TEST("clock-france", QEMU_CAPS_RTC, false); - - DO_TEST("hugepages", QEMU_CAPS_MEM_PATH, false); - DO_TEST("disk-cdrom", 0, false); - DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE, false); - DO_TEST("disk-floppy", 0, false); - DO_TEST("disk-many", 0, false); - DO_TEST("disk-virtio", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT, false); - DO_TEST("disk-xenvbd", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT, false); - DO_TEST("disk-drive-boot-disk", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT, false); - DO_TEST("disk-drive-boot-cdrom", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT, false); - DO_TEST("floppy-drive-fat", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-fat", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-readonly-disk", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("disk-drive-readonly-no-device", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("disk-drive-fmt-qcow", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-shared", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT | QEMU_CAPS_DRIVE_SERIAL, false); - DO_TEST("disk-drive-cache-v1-wt", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v1-wb", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v1-none", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-error-policy-stop", QEMU_CAPS_DRIVE | - QEMU_CAPS_MONITOR_JSON | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v2-wt", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v2-wb", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-cache-v2-none", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-network-nbd", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-network-rbd", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-drive-network-sheepdog", QEMU_CAPS_DRIVE | - QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("disk-usb", 0, false); - DO_TEST("disk-usb-device", QEMU_CAPS_DRIVE | - QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("disk-scsi-device", QEMU_CAPS_DRIVE | - QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("disk-scsi-device-auto", QEMU_CAPS_DRIVE | - QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("disk-aio", QEMU_CAPS_DRIVE | QEMU_CAPS_DRIVE_AIO | - QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false); - DO_TEST("graphics-vnc", 0, false); - DO_TEST("graphics-vnc-socket", 0, false); + DO_TEST("clock-france", false, QEMU_CAPS_RTC); + + DO_TEST("hugepages", false, QEMU_CAPS_MEM_PATH); + DO_TEST("disk-cdrom", false, NONE); + DO_TEST("disk-cdrom-empty", false, QEMU_CAPS_DRIVE); + DO_TEST("disk-floppy", false, NONE); + DO_TEST("disk-many", false, NONE); + DO_TEST("disk-virtio", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT); + DO_TEST("disk-xenvbd", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT); + DO_TEST("disk-drive-boot-disk", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT); + DO_TEST("disk-drive-boot-cdrom", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT); + DO_TEST("floppy-drive-fat", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-fat", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-readonly-disk", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("disk-drive-readonly-no-device", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY, QEMU_CAPS_NODEFCONFIG); + DO_TEST("disk-drive-fmt-qcow", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-shared", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT, QEMU_CAPS_DRIVE_SERIAL); + DO_TEST("disk-drive-cache-v1-wt", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-cache-v1-wb", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-cache-v1-none", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-error-policy-stop", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-cache-v2-wt", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-cache-v2-wb", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-cache-v2-none", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-network-nbd", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-network-rbd", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-network-sheepdog", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-usb", false, NONE); + DO_TEST("disk-usb-device", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("disk-scsi-device", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("disk-scsi-device-auto", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("disk-aio", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_AIO, + QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("graphics-vnc", false, NONE); + DO_TEST("graphics-vnc-socket", false, NONE); driver.vncSASL = 1; driver.vncSASLdir = strdup("/root/.sasl2"); - DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VGA, false); + DO_TEST("graphics-vnc-sasl", false, QEMU_CAPS_VGA); driver.vncTLS = 1; driver.vncTLSx509verify = 1; driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu"); - DO_TEST("graphics-vnc-tls", 0, false); + DO_TEST("graphics-vnc-tls", false, NONE); driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0; free(driver.vncSASLdir); free(driver.vncTLSx509certdir); driver.vncSASLdir = driver.vncTLSx509certdir = NULL; - DO_TEST("graphics-sdl", 0, false); - DO_TEST("graphics-sdl-fullscreen", 0, false); - DO_TEST("nographics", QEMU_CAPS_VGA, false); - DO_TEST("nographics-vga", QEMU_CAPS_VGA | - QEMU_CAPS_VGA_NONE, false); - DO_TEST("graphics-spice", - QEMU_CAPS_VGA | QEMU_CAPS_VGA_QXL | - QEMU_CAPS_DEVICE | QEMU_CAPS_SPICE, false); - - DO_TEST("input-usbmouse", 0, false); - DO_TEST("input-usbtablet", 0, false); - DO_TEST("input-xen", QEMU_CAPS_DOMID, true); - DO_TEST("misc-acpi", 0, false); - DO_TEST("misc-no-reboot", 0, false); - DO_TEST("misc-uuid", QEMU_CAPS_NAME | - QEMU_CAPS_UUID, false); - DO_TEST("net-user", 0, false); - DO_TEST("net-virtio", 0, false); - DO_TEST("net-virtio-device", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_VIRTIO_TX_ALG, false); - DO_TEST("net-virtio-netdev", QEMU_CAPS_DEVICE | - QEMU_CAPS_NETDEV | QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("net-eth", 0, false); - DO_TEST("net-eth-ifname", 0, false); - DO_TEST("net-eth-names", QEMU_CAPS_NET_NAME, false); - - DO_TEST("serial-vc", 0, false); - DO_TEST("serial-pty", 0, false); - DO_TEST("serial-dev", 0, false); - DO_TEST("serial-file", 0, false); - DO_TEST("serial-unix", 0, false); - DO_TEST("serial-tcp", 0, false); - DO_TEST("serial-udp", 0, false); - DO_TEST("serial-tcp-telnet", 0, false); - DO_TEST("serial-many", 0, false); - DO_TEST("parallel-tcp", 0, false); - DO_TEST("console-compat", 0, false); - DO_TEST("console-compat-auto", 0, false); - - DO_TEST("serial-vc-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-pty-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-dev-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-file-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-unix-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-udp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-tcp-telnet-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("serial-many-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("parallel-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("console-compat-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - - DO_TEST("channel-guestfwd", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("channel-virtio", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("channel-virtio-auto", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("console-virtio", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("channel-spicevmc", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE | - QEMU_CAPS_CHARDEV_SPICEVMC, false); - DO_TEST("channel-spicevmc-old", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE | - QEMU_CAPS_DEVICE_SPICEVMC, false); - - DO_TEST("smartcard-host", - QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false); - DO_TEST("smartcard-host-certificates", - QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false); - DO_TEST("smartcard-passthrough-tcp", - QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU, false); - DO_TEST("smartcard-passthrough-spicevmc", - QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU | - QEMU_CAPS_CHARDEV_SPICEVMC, false); - DO_TEST("smartcard-controller", - QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false); - - DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE, false); - - DO_TEST("watchdog", 0, false); - DO_TEST("watchdog-device", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("watchdog-dump", 0, false); - DO_TEST("balloon-device", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("balloon-device-auto", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("sound", 0, false); - DO_TEST("sound-device", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_HDA_DUPLEX, false); - DO_TEST("fs9p", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_FSDEV, false); - - DO_TEST("hostdev-usb-address", 0, false); - DO_TEST("hostdev-usb-address-device", QEMU_CAPS_DEVICE | - QEMU_CAPS_NODEFCONFIG, false); - DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE, false); - DO_TEST("hostdev-pci-address-device", QEMU_CAPS_PCIDEVICE | - QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false); - - DO_TEST_FULL("restore-v1", QEMU_CAPS_MIGRATE_KVM_STDIO, "stdio", 7, - false); - DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "stdio", 7, - false); - DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "exec:cat", 7, - false); - DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "stdio", 7, - false); - DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "fd:7", 7, - false); - DO_TEST_FULL("migrate", QEMU_CAPS_MIGRATE_QEMU_TCP, - "tcp:10.0.0.1:5000", -1, false); - - DO_TEST("qemu-ns", 0, false); - - DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY, false); - - DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY, false); - DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY, false); - DO_TEST("cpu-topology3", 0, false); - DO_TEST("cpu-minimum1", 0, false); - DO_TEST("cpu-minimum2", 0, false); - DO_TEST("cpu-exact1", 0, false); - DO_TEST("cpu-exact2", 0, false); - DO_TEST("cpu-strict1", 0, false); - - DO_TEST("memtune", QEMU_CAPS_NAME, false); - DO_TEST("blkiotune", QEMU_CAPS_NAME, false); + DO_TEST("graphics-sdl", false, NONE); + DO_TEST("graphics-sdl-fullscreen", false, NONE); + DO_TEST("nographics", false, QEMU_CAPS_VGA); + DO_TEST("nographics-vga", false, + QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE); + DO_TEST("graphics-spice", false, + QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, + QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE); + + DO_TEST("input-usbmouse", false, NONE); + DO_TEST("input-usbtablet", false, NONE); + DO_TEST("input-xen", true, QEMU_CAPS_DOMID); + DO_TEST("misc-acpi", false, NONE); + DO_TEST("misc-no-reboot", false, NONE); + DO_TEST("misc-uuid", false, QEMU_CAPS_NAME, QEMU_CAPS_UUID); + DO_TEST("net-user", false, NONE); + DO_TEST("net-virtio", false, NONE); + DO_TEST("net-virtio-device", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG); + DO_TEST("net-virtio-netdev", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG); + DO_TEST("net-eth", false, NONE); + DO_TEST("net-eth-ifname", false, NONE); + DO_TEST("net-eth-names", false, QEMU_CAPS_NET_NAME); + + DO_TEST("serial-vc", false, NONE); + DO_TEST("serial-pty", false, NONE); + DO_TEST("serial-dev", false, NONE); + DO_TEST("serial-file", false, NONE); + DO_TEST("serial-unix", false, NONE); + DO_TEST("serial-tcp", false, NONE); + DO_TEST("serial-udp", false, NONE); + DO_TEST("serial-tcp-telnet", false, NONE); + DO_TEST("serial-many", false, NONE); + DO_TEST("parallel-tcp", false, NONE); + DO_TEST("console-compat", false, NONE); + DO_TEST("console-compat-auto", false, NONE); + + DO_TEST("serial-vc-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-pty-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-dev-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-file-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-unix-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-tcp-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-udp-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-tcp-telnet-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("serial-many-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("parallel-tcp-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("console-compat-chardev", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + + DO_TEST("channel-guestfwd", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("channel-virtio", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("channel-virtio-auto", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("console-virtio", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("channel-spicevmc", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC); + DO_TEST("channel-spicevmc-old", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC); + + DO_TEST("smartcard-host", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, + QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED); + DO_TEST("smartcard-host-certificates", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, + QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED); + DO_TEST("smartcard-passthrough-tcp", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, + QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU); + DO_TEST("smartcard-passthrough-spicevmc", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC); + DO_TEST("smartcard-controller", false, + QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, + QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED); + + DO_TEST("smbios", false, QEMU_CAPS_SMBIOS_TYPE); + + DO_TEST("watchdog", false, NONE); + DO_TEST("watchdog-device", false, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("watchdog-dump", false, NONE); + DO_TEST("balloon-device", false, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("balloon-device-auto", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("sound", false, NONE); + DO_TEST("sound-device", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_HDA_DUPLEX); + DO_TEST("fs9p", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV); + + DO_TEST("hostdev-usb-address", false, NONE); + DO_TEST("hostdev-usb-address-device", false, + QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + DO_TEST("hostdev-pci-address", false, QEMU_CAPS_PCIDEVICE); + DO_TEST("hostdev-pci-address-device", false, + QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); + + DO_TEST_FULL("restore-v1", "stdio", 7, false, + QEMU_CAPS_MIGRATE_KVM_STDIO); + DO_TEST_FULL("restore-v2", "stdio", 7, false, + QEMU_CAPS_MIGRATE_QEMU_EXEC); + DO_TEST_FULL("restore-v2", "exec:cat", 7, false, + QEMU_CAPS_MIGRATE_QEMU_EXEC); + DO_TEST_FULL("restore-v2-fd", "stdio", 7, false, + QEMU_CAPS_MIGRATE_QEMU_FD); + DO_TEST_FULL("restore-v2-fd", "fd:7", 7, false, + QEMU_CAPS_MIGRATE_QEMU_FD); + DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, false, + QEMU_CAPS_MIGRATE_QEMU_TCP); + + DO_TEST("qemu-ns", false, NONE); + + DO_TEST("smp", false, QEMU_CAPS_SMP_TOPOLOGY); + + DO_TEST("cpu-topology1", false, QEMU_CAPS_SMP_TOPOLOGY); + DO_TEST("cpu-topology2", false, QEMU_CAPS_SMP_TOPOLOGY); + DO_TEST("cpu-topology3", false, NONE); + DO_TEST("cpu-minimum1", false, NONE); + DO_TEST("cpu-minimum2", false, NONE); + DO_TEST("cpu-exact1", false, NONE); + DO_TEST("cpu-exact2", false, NONE); + DO_TEST("cpu-strict1", false, NONE); + + DO_TEST("memtune", false, QEMU_CAPS_NAME); + DO_TEST("blkiotune", false, QEMU_CAPS_NAME); free(driver.stateDir); virCapabilitiesFree(driver.caps); -- 1.7.4.1

On 02/22/2011 09:48 AM, Jiri Denemark wrote:
This needs to be squashed into the previous patch but is provided separately for easier review.
--- Notes: Version 2: - rebased to current master
src/qemu/qemu_capabilities.c | 14 + src/qemu/qemu_capabilities.h | 2 + tests/qemuhelptest.c | 729 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 470 ++++++++++++++-------------- 4 files changed, 619 insertions(+), 596 deletions(-)
Agree that this should be squashed in with the previous patch, but the separation did make for a nicer review.
+static void printMismatchedFlags(virBitmapPtr got, + virBitmapPtr expect) { int i;
- for (i = 0 ; i < (sizeof(got)*CHAR_BIT) ; i++) { - unsigned long long gotFlag = (got & (1LL << i)); - unsigned long long expectFlag = (expect & (1LL << i)); + for (i = 0 ; i < QEMU_CAPS_LAST ; i++) { + bool gotFlag = qemuCapsGet(got, i); + bool expectFlag = qemuCapsGet(expect, i); if (gotFlag && !expectFlag) fprintf(stderr, "Extra flag %i\n", i);
Hmm - debugging this will now be slightly harder. Before, "extra flag 37" meant looking for (1LL << 37) in qemu_capabilities.h, but now we need to count 37 lines. Perhaps you should amend the change in qemu_capabilities.h to preserve the integer numbering of each capability: + QEMU_CAPS_KQEMU = 0, /* Whether KQEMU is compiled in */ + QEMU_CAPS_VNC_COLON = 1, /* Does the VNC take just port, or address + display */ ACK with that nit fixed. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Tue, Feb 22, 2011 at 10:50:53 -0700, Eric Blake wrote:
On 02/22/2011 09:48 AM, Jiri Denemark wrote:
+static void printMismatchedFlags(virBitmapPtr got, + virBitmapPtr expect) { int i;
- for (i = 0 ; i < (sizeof(got)*CHAR_BIT) ; i++) { - unsigned long long gotFlag = (got & (1LL << i)); - unsigned long long expectFlag = (expect & (1LL << i)); + for (i = 0 ; i < QEMU_CAPS_LAST ; i++) { + bool gotFlag = qemuCapsGet(got, i); + bool expectFlag = qemuCapsGet(expect, i); if (gotFlag && !expectFlag) fprintf(stderr, "Extra flag %i\n", i);
Hmm - debugging this will now be slightly harder. Before, "extra flag 37" meant looking for (1LL << 37) in qemu_capabilities.h, but now we need to count 37 lines. Perhaps you should amend the change in qemu_capabilities.h to preserve the integer numbering of each capability:
+ QEMU_CAPS_KQEMU = 0, /* Whether KQEMU is compiled in */ + QEMU_CAPS_VNC_COLON = 1, /* Does the VNC take just port, or address + display */
Makes sense. I reintroduced the explicit numbering there. Although once we start saving the flags in XML configuration of running domains, we can get rid of the numbering completely since we will be able to output flag names instead of just numbers.
ACK with that nit fixed.
Thanks. I squashed this patch into the previous one before pushing it. Jirka
participants (2)
-
Eric Blake
-
Jiri Denemark