[libvirt] [RFC PATCH 0/6] 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 This is a very conflict-prone patchset so I'd like to get some feedback on the ideas and naming used so that this could possible be among the first patches pushed after 0.8.8 release. Patches 2/6 and 4/6 are fully and 3/6 mostly mechanical. 5/6 and 6/6 need to be squashed into a single patch but are provided separately for easier review. Jiri Denemark (6): 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 src/libvirt_private.syms | 1 + src/qemu/qemu_capabilities.c | 238 +++++++++----- src/qemu/qemu_capabilities.h | 150 +++++---- src/qemu/qemu_command.c | 384 +++++++++++----------- src/qemu/qemu_command.h | 30 +- src/qemu/qemu_driver.c | 106 ++++--- src/qemu/qemu_hotplug.c | 162 +++++----- src/qemu/qemu_hotplug.h | 32 +- src/util/bitmap.c | 32 ++- src/util/bitmap.h | 3 + tests/qemuargv2xmltest.c | 2 +- tests/qemuhelptest.c | 745 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 470 +++++++++++++------------- 13 files changed, 1249 insertions(+), 1106 deletions(-) -- 1.7.4

--- src/libvirt_private.syms | 1 + src/util/bitmap.c | 32 +++++++++++++++++++++++++++++++- src/util/bitmap.h | 3 +++ 3 files changed, 35 insertions(+), 1 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b9e3efe..335d12f 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 9741668..61280b4 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 @@ -32,6 +32,7 @@ #include "bitmap.h" #include "memory.h" +#include "buf.h" struct _virBitmap { @@ -151,3 +152,32 @@ int virBitmapGetBit(virBitmapPtr bitmap, size_t b, bool *result) *result = bit != 0; 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; + + for ( ; sz > 0; sz--) + virBufferVSprintf(&buf, "%08x", bitmap->map[sz - 1]); + + 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

On 02/09/2011 09:01 AM, Jiri Denemark wrote:
--- src/libvirt_private.syms | 1 + src/util/bitmap.c | 32 +++++++++++++++++++++++++++++++- src/util/bitmap.h | 3 +++ 3 files changed, 35 insertions(+), 1 deletions(-)
+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; + + for ( ; sz > 0; sz--) + virBufferVSprintf(&buf, "%08x", bitmap->map[sz - 1]);
I probably would have written: while (sz--) virBufferVSprintf(&buf, "%08x", bitmap->map[sz]); since sz is guaranteed to be non-zero to start with. But your way works, and the compiler (hopefully) generates the same code (when optimizing). Problem - "%08x" is not portable. bitmap->map[x] is a uint32_t, which means we need to use "%08"PRIx32 (since some platforms declare uint32_t as long rather than int) to avoid a gcc warning. For that matter, why did we make the bitset use uint32_t as the underlying type, instead of just using long? We already have macros VIR_BITMAP_BITS_PER_UNIT that make the rest of the code immune to size changes, if we resize the bitmap to 64-bits on LP64 (like x86_64) while keeping it at 32-bits on ILP32 (like i686). Of course, making that change would mean that this new code would need to use "%0*lx",VIR_BITMAP_BITS_PER_UNIT/4,bitmap->map[x]. I like the patch, but think it needs a v2. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

+ for ( ; sz > 0; sz--) + virBufferVSprintf(&buf, "%08x", bitmap->map[sz - 1]);
I probably would have written:
while (sz--) virBufferVSprintf(&buf, "%08x", bitmap->map[sz]);
Yeah, it looks nicer; I'll use that since I'll send a new version anyway.
since sz is guaranteed to be non-zero to start with. But your way works, and the compiler (hopefully) generates the same code (when optimizing).
Not that this is in a performance critical path requiring any optimizations :-)
Problem - "%08x" is not portable. bitmap->map[x] is a uint32_t, which means we need to use "%08"PRIx32 (since some platforms declare uint32_t as long rather than int) to avoid a gcc warning.
Ah, thanks for spotting that. I always forget about this dark side of C.
For that matter, why did we make the bitset use uint32_t as the underlying type, instead of just using long?
Right, I'll fix that first followed by a v2 of this patch. Jirka

The new names comply more with the fact that they are all members of enum qemuCapsFlags. --- src/qemu/qemu_capabilities.c | 128 ++++---- src/qemu/qemu_capabilities.h | 120 ++++---- src/qemu/qemu_command.c | 246 ++++++++-------- src/qemu/qemu_driver.c | 24 +- src/qemu/qemu_hotplug.c | 86 +++--- tests/qemuargv2xmltest.c | 2 +- tests/qemuhelptest.c | 654 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 302 ++++++++++---------- 8 files changed, 781 insertions(+), 781 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0e1f79c..9e0b440 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -389,7 +389,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); @@ -548,7 +548,7 @@ qemuCapsInitGuest(virCapsPtr caps, goto error; if (qemuCapsExtractVersionInfo(binary, NULL, &qemuCmdFlags) < 0 || - ((qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX) && + ((qemuCmdFlags & QEMU_CAPS_BOOTINDEX) && !virCapabilitiesAddGuestFeature(guest, "deviceboot", 1, 0))) goto error; @@ -780,119 +780,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; } /* @@ -908,22 +908,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 @@ -932,7 +932,7 @@ qemuCapsComputeCmdFlags(const char *help, * the downside. */ if (version >= 13000) - flags |= QEMUD_CMD_FLAG_MONITOR_JSON; + flags |= QEMU_CAPS_MONITOR_JSON; return flags; } @@ -1086,23 +1086,23 @@ 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; } return 0; @@ -1146,7 +1146,7 @@ int qemuCapsExtractVersionInfo(const char *qemu, /* 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 dd39b3b..e839d63 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -28,70 +28,70 @@ /* 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*/ + 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*/ }; virCapsPtr qemuCapsInit(virCapsPtr old_caps); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f78ce71..1a9c0fc 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; @@ -318,9 +318,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->backend == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is not supported with " @@ -406,7 +406,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; @@ -502,8 +502,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); @@ -591,15 +591,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++) { @@ -1119,7 +1119,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); @@ -1279,7 +1279,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); @@ -1287,7 +1287,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) { @@ -1305,14 +1305,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); @@ -1320,7 +1320,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); @@ -1329,7 +1329,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), @@ -1338,7 +1338,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 { @@ -1404,7 +1404,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)) { @@ -1598,7 +1598,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)) { @@ -2075,7 +2075,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; @@ -2190,7 +2190,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 @@ -2223,7 +2223,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 { @@ -2552,7 +2552,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 @@ -2635,26 +2635,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); @@ -2662,12 +2662,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); @@ -2688,7 +2688,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(def->os.arch, "x86_64", 6) || STREQLEN(def->os.arch, "i686", 4)) { - qemuCmdFlags |= QEMUD_CMD_FLAG_PCI_MULTIBUS; + qemuCmdFlags |= QEMU_CAPS_PCI_MULTIBUS; } cmd = virCommandNewArgList(emulator, "-S", NULL); @@ -2710,7 +2710,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"); } @@ -2741,7 +2741,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); @@ -2757,25 +2757,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); @@ -2792,7 +2792,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); @@ -2845,8 +2845,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, @@ -2856,7 +2856,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", @@ -2882,7 +2882,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))) @@ -2924,9 +2924,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: @@ -2942,7 +2942,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)) { @@ -2961,13 +2961,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 { @@ -2996,7 +2996,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 { @@ -3011,7 +3011,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"); @@ -3044,7 +3044,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); @@ -3055,7 +3055,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 */ @@ -3086,7 +3086,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]; @@ -3116,11 +3116,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) { + if (qemuCmdFlags & QEMU_CAPS_DRIVE_BOOT) { for (i = 0 ; i < def->os.nBootDevs ; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_CDROM: @@ -3146,7 +3146,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); @@ -3181,12 +3181,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); @@ -3221,7 +3221,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 @@ -3346,7 +3346,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]; @@ -3373,7 +3373,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++) { @@ -3384,8 +3384,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; @@ -3444,8 +3444,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))) @@ -3453,7 +3453,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; @@ -3466,8 +3466,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))) @@ -3500,8 +3500,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")); @@ -3512,8 +3512,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")); @@ -3548,8 +3548,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")); @@ -3584,7 +3584,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++) { @@ -3592,8 +3592,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, @@ -3617,7 +3617,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++) { @@ -3625,8 +3625,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, @@ -3655,8 +3655,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; @@ -3684,13 +3684,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 @@ -3723,7 +3723,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; @@ -3761,7 +3761,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))) @@ -3798,7 +3798,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) @@ -3812,7 +3812,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"); @@ -3857,8 +3857,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); @@ -3884,14 +3884,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; @@ -3950,12 +3950,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; @@ -3996,7 +3996,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) { @@ -4023,15 +4023,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; @@ -4050,7 +4050,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; @@ -4106,7 +4106,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); @@ -4152,7 +4152,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")); @@ -4164,7 +4164,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; @@ -4182,9 +4182,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) { @@ -4204,7 +4204,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; @@ -4224,7 +4224,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")); @@ -4232,13 +4232,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 { @@ -4248,7 +4248,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")); @@ -4256,7 +4256,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")); @@ -4265,7 +4265,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")); @@ -4293,7 +4293,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"); @@ -4302,7 +4302,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_driver.c b/src/qemu/qemu_driver.c index 52ea98e..6d21ddd 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -946,7 +946,7 @@ qemuReconnectDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq if (qemuCapsExtractVersionInfo(obj->def->emulator, NULL, &qemuCmdFlags) >= 0 && - (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { + (qemuCmdFlags & QEMU_CAPS_DEVICE)) { priv->persistentAddrs = 1; if (!(priv->pciaddrs = qemuDomainPCIAddressSetCreate(obj->def)) || @@ -2021,7 +2021,7 @@ qemuInitPasswords(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++) { @@ -2521,7 +2521,7 @@ qemuAssignPCIAddresses(virDomainDefPtr def) &qemuCmdFlags) < 0) goto cleanup; - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + if (qemuCmdFlags & QEMU_CAPS_DEVICE) { if (!(addrs = qemuDomainPCIAddressSetCreate(def))) goto cleanup; @@ -2768,7 +2768,7 @@ static int qemudStartVMDaemon(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 @@ -2797,7 +2797,7 @@ static int qemudStartVMDaemon(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) { DEBUG0("Assigning domain PCI addresses"); /* Populate cache with current addresses */ if (priv->pciaddrs) { @@ -2929,7 +2929,7 @@ static int qemudStartVMDaemon(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)) { DEBUG0("Determining domain device PCI addresses"); if (qemuInitPCIAddresses(driver, vm) < 0) goto cleanup; @@ -8084,9 +8084,9 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn, 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, @@ -8596,8 +8596,8 @@ static int doTunnelMigrate(virDomainPtr dom, 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; @@ -8639,11 +8639,11 @@ static int doTunnelMigrate(virDomainPtr dom, 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_hotplug.c b/src/qemu/qemu_hotplug.c index fb9db5a..a7b1a20 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; @@ -1329,13 +1329,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; @@ -1363,7 +1363,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"); @@ -1423,7 +1423,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); @@ -1438,8 +1438,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); @@ -1456,7 +1456,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"); @@ -1549,7 +1549,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; @@ -1580,7 +1580,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"); @@ -1651,7 +1651,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/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 3a04b61..975a759 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,354 +133,354 @@ 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, + 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, 12001, 1, 0); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 52808b5..55a8b09 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; @@ -247,87 +247,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"); @@ -339,29 +339,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, 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, 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); @@ -376,103 +376,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); -- 1.7.4

On 02/09/2011 09:01 AM, Jiri Denemark wrote:
The new names comply more with the fact that they are all members of enum qemuCapsFlags. --- src/qemu/qemu_capabilities.c | 128 ++++---- src/qemu/qemu_capabilities.h | 120 ++++---- src/qemu/qemu_command.c | 246 ++++++++-------- src/qemu/qemu_driver.c | 24 +- src/qemu/qemu_hotplug.c | 86 +++--- tests/qemuargv2xmltest.c | 2 +- tests/qemuhelptest.c | 654 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 302 ++++++++++---------- 8 files changed, 781 insertions(+), 781 deletions(-)
ACK; and agree with the plan of delaying this until just after the 0.8.8 release. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

--- src/qemu/qemu_capabilities.c | 152 ++++++++++++++---------- src/qemu/qemu_capabilities.h | 9 ++ src/qemu/qemu_command.c | 260 +++++++++++++++++++++-------------------- src/qemu/qemu_driver.c | 24 ++-- src/qemu/qemu_hotplug.c | 86 +++++++------- tests/qemuhelptest.c | 2 +- tests/qemuxml2argvtest.c | 4 +- 7 files changed, 288 insertions(+), 249 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9e0b440..9d3c4e9 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -389,7 +389,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); @@ -548,7 +548,7 @@ qemuCapsInitGuest(virCapsPtr caps, goto error; if (qemuCapsExtractVersionInfo(binary, NULL, &qemuCmdFlags) < 0 || - ((qemuCmdFlags & QEMU_CAPS_BOOTINDEX) && + (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX) && !virCapabilitiesAddGuestFeature(guest, "deviceboot", 1, 0))) goto error; @@ -780,119 +780,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); } /* @@ -908,22 +908,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 @@ -932,7 +932,7 @@ qemuCapsComputeCmdFlags(const char *help, * the downside. */ if (version >= 13000) - flags |= QEMU_CAPS_MONITOR_JSON; + qemuCapsSet(&flags, QEMU_CAPS_MONITOR_JSON); return flags; } @@ -1086,23 +1086,23 @@ 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); } return 0; @@ -1146,7 +1146,7 @@ int qemuCapsExtractVersionInfo(const char *qemu, /* 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; @@ -1211,3 +1211,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 e839d63..f60a0a8 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -94,6 +94,15 @@ enum qemuCapsFlags { QEMU_CAPS_DEVICE_SPICEVMC = (1LL << 57), /* older -device spicevmc*/ }; +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 1a9c0fc..e778aed 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; @@ -318,9 +318,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->backend == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is not supported with " @@ -406,7 +406,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; @@ -502,8 +502,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); @@ -591,15 +591,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++) { @@ -1119,7 +1119,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); @@ -1279,7 +1279,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); @@ -1287,7 +1287,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) { @@ -1305,14 +1305,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); @@ -1320,7 +1320,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); @@ -1329,7 +1329,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), @@ -1338,7 +1338,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 { @@ -1404,7 +1404,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)) { @@ -1598,7 +1598,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)) { @@ -2075,7 +2075,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; @@ -2190,7 +2190,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 @@ -2223,7 +2223,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 { @@ -2552,7 +2552,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 @@ -2635,26 +2635,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); @@ -2662,12 +2661,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); @@ -2688,7 +2687,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(def->os.arch, "x86_64", 6) || STREQLEN(def->os.arch, "i686", 4)) { - qemuCmdFlags |= QEMU_CAPS_PCI_MULTIBUS; + qemuCapsSet(&qemuCmdFlags, QEMU_CAPS_PCI_MULTIBUS); } cmd = virCommandNewArgList(emulator, "-S", NULL); @@ -2710,7 +2709,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"); } @@ -2741,7 +2740,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); @@ -2757,25 +2756,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); @@ -2792,7 +2791,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); @@ -2845,8 +2844,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, @@ -2856,7 +2855,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", @@ -2882,7 +2881,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))) @@ -2926,7 +2925,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: @@ -2942,7 +2941,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)) { @@ -2961,13 +2960,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 { @@ -2996,7 +2995,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 { @@ -3011,7 +3010,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"); @@ -3044,7 +3043,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); @@ -3055,7 +3054,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 */ @@ -3086,7 +3085,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]; @@ -3116,11 +3115,11 @@ 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) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DRIVE_BOOT)) { for (i = 0 ; i < def->os.nBootDevs ; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_CDROM: @@ -3141,12 +3140,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); @@ -3181,12 +3181,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); @@ -3221,7 +3227,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 @@ -3346,7 +3352,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]; @@ -3373,7 +3379,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++) { @@ -3384,8 +3390,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; @@ -3444,8 +3450,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))) @@ -3453,7 +3459,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; @@ -3466,8 +3472,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))) @@ -3500,8 +3506,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")); @@ -3512,8 +3518,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")); @@ -3548,8 +3554,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")); @@ -3584,7 +3590,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++) { @@ -3592,8 +3598,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, @@ -3617,7 +3623,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++) { @@ -3625,8 +3631,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, @@ -3655,8 +3661,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; @@ -3684,13 +3690,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 @@ -3723,7 +3729,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; @@ -3761,7 +3767,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))) @@ -3798,7 +3804,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) @@ -3812,7 +3818,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"); @@ -3857,8 +3863,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); @@ -3884,14 +3890,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; @@ -3950,12 +3956,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; @@ -3996,7 +4002,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) { @@ -4023,15 +4029,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; @@ -4050,7 +4056,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; @@ -4106,7 +4112,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); @@ -4152,7 +4158,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")); @@ -4164,7 +4170,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; @@ -4182,9 +4188,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) { @@ -4204,7 +4210,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; @@ -4224,7 +4230,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")); @@ -4232,13 +4238,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 { @@ -4248,7 +4254,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")); @@ -4256,7 +4262,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")); @@ -4265,7 +4271,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")); @@ -4293,7 +4299,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"); @@ -4302,7 +4308,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_driver.c b/src/qemu/qemu_driver.c index 6d21ddd..910af15 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -946,7 +946,7 @@ qemuReconnectDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq if (qemuCapsExtractVersionInfo(obj->def->emulator, NULL, &qemuCmdFlags) >= 0 && - (qemuCmdFlags & QEMU_CAPS_DEVICE)) { + qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { priv->persistentAddrs = 1; if (!(priv->pciaddrs = qemuDomainPCIAddressSetCreate(obj->def)) || @@ -2021,7 +2021,7 @@ qemuInitPasswords(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++) { @@ -2521,7 +2521,7 @@ qemuAssignPCIAddresses(virDomainDefPtr def) &qemuCmdFlags) < 0) goto cleanup; - if (qemuCmdFlags & QEMU_CAPS_DEVICE) { + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { if (!(addrs = qemuDomainPCIAddressSetCreate(def))) goto cleanup; @@ -2768,7 +2768,7 @@ static int qemudStartVMDaemon(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 @@ -2797,7 +2797,7 @@ static int qemudStartVMDaemon(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)) { DEBUG0("Assigning domain PCI addresses"); /* Populate cache with current addresses */ if (priv->pciaddrs) { @@ -2929,7 +2929,7 @@ static int qemudStartVMDaemon(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)) { DEBUG0("Determining domain device PCI addresses"); if (qemuInitPCIAddresses(driver, vm) < 0) goto cleanup; @@ -8084,9 +8084,9 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn, 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, @@ -8596,8 +8596,8 @@ static int doTunnelMigrate(virDomainPtr dom, 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; @@ -8639,11 +8639,11 @@ static int doTunnelMigrate(virDomainPtr dom, 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_hotplug.c b/src/qemu/qemu_hotplug.c index a7b1a20..5f2938f 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; @@ -1329,13 +1329,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; @@ -1363,7 +1363,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"); @@ -1423,7 +1423,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); @@ -1438,8 +1438,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); @@ -1456,7 +1456,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"); @@ -1549,7 +1549,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; @@ -1580,7 +1580,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"); @@ -1651,7 +1651,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/tests/qemuhelptest.c b/tests/qemuhelptest.c index 975a759..e334bce 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 55a8b09..5a39f7f 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

On 02/09/2011 09:02 AM, Jiri Denemark wrote:
---
No comment in the commit message about the name of the new helper methods?
src/qemu/qemu_capabilities.c | 152 ++++++++++++++---------- src/qemu/qemu_capabilities.h | 9 ++ src/qemu/qemu_command.c | 260 +++++++++++++++++++++-------------------- src/qemu/qemu_driver.c | 24 ++-- src/qemu/qemu_hotplug.c | 86 +++++++------- tests/qemuhelptest.c | 2 +- tests/qemuxml2argvtest.c | 4 +- 7 files changed, 288 insertions(+), 249 deletions(-)
cmd = virCommandNewArgList(qemu, "-cpu", "?", NULL); - if (qemuCmdFlags & QEMU_CAPS_NODEFCONFIG) + if (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_NODEFCONFIG))
Looks like a pretty trivial conversion. To prove that I really reviewed this, let's see if I can find the few non-mechanical conversions :)
/* Prefer -chardev spicevmc (detected earlier) over -device spicevmc */ - if (!(*flags & QEMU_CAPS_CHARDEV_SPICEVMC) && + if (!qemuCapsGet(*flags, QEMU_CAPS_CHARDEV_SPICEVMC) &&
This was probably one that needed attention; looks correct.
+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); +}
Nice and simple.
- 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);
There's another non-mechanical change. The new logic is one line shorter, and still correct.
@@ -3141,12 +3140,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); @@ -3181,12 +3181,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)
Certainly a tougher prospect. On the surface, it looks correct; however, I'm worried that there might be some potential for a data race bug - that is, if we ever have any command that can build a command line string while holding a read-only connection, is it right to be temporarily modifying the domain def? (That is, it seems like domxml-to-native should work on a read-only connection without trying to modify the guest definition.) Should we instead be cloning the bitset, and passing the clone to qemuBuildDriveStr, rather than changing and restoring the original? Would it be any easier to just change the signature of qemuBuildDriveStr to take an additional bool parameter on whether to ignore the QEMU_CAPS_DEVICE flag?
@@ -3444,8 +3450,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)) {
I'm actually kind of surprised that we didn't have more cases of: if (qemuCmdFlags & (QEMU_CAPS_NETDEV | QEMU_CAPS_DEVICE)) Thankfully, not having expressions like that pre-patch made it easier for you to rewrite things during this patch. Sadly, the compiler could probably optimize the prepatch expression into that simpler code, while it cannot "see through" the function call for the same optimization post-patch. On the other hand, it's not much of a speed regression, and is essential for when we cross the 64-bit boundary, so I don't mind the optimization loss. My concerns about qemuBuildDriveStr probably warrant a v2 patch (perhaps broken into two portions - separating a parameter addition or cloning from the mechanical rewrite into helper functions). -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

@@ -3181,12 +3181,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)
Certainly a tougher prospect. On the surface, it looks correct; however, I'm worried that there might be some potential for a data race bug - that is, if we ever have any command that can build a command line string while holding a read-only connection, is it right to be temporarily modifying the domain def? (That is, it seems like domxml-to-native should work on a read-only connection without trying to modify the guest definition.)
Eh, the code is not changing domain def anywhere. The only thing which is changed is qemuCmdFlags, which is generated in every caller of qemuBuildCommandLine() so cloning the bitmap seemed like an unneeded overkill to me.
Would it be any easier to just change the signature of qemuBuildDriveStr to take an additional bool parameter on whether to ignore the QEMU_CAPS_DEVICE flag?
That's another possibility.
My concerns about qemuBuildDriveStr probably warrant a v2 patch (perhaps broken into two portions - separating a parameter addition or cloning from the mechanical rewrite into helper functions).
Do you still think it's needed? Jirka

On 02/10/2011 06:02 AM, Jiri Denemark wrote:
Certainly a tougher prospect. On the surface, it looks correct; however, I'm worried that there might be some potential for a data race bug - that is, if we ever have any command that can build a command line string while holding a read-only connection, is it right to be temporarily modifying the domain def? (That is, it seems like domxml-to-native should work on a read-only connection without trying to modify the guest definition.)
Eh, the code is not changing domain def anywhere. The only thing which is changed is qemuCmdFlags, which is generated in every caller of qemuBuildCommandLine() so cloning the bitmap seemed like an unneeded overkill to me.
Then ignore my concerns :) For a while, there, I was thinking that qemuCmdFlags was part of the domain definition (and in the future, it needs to be - we have a FIXME about that, since there is the issue that if qemu is upgraded then libvirt restarted, that existing qemu processes still have the older command line syntax, and reprobing the new qemu binary could give the wrong results). But since you are correct that for now, all qemuCmdFlags are stack-allocated temporaries, and not part of the domain definition, there is no race, and this code is fine.
Do you still think it's needed?
Nah, although you'll probably hit other rebasing issues when respinning this series for post-0.8.8 release, so I won't be surprised if I see a v2. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

The new name comply more with the fact that it contains a set of qemuCapsFlags. --- src/qemu/qemu_capabilities.c | 10 +- src/qemu/qemu_capabilities.h | 8 +- src/qemu/qemu_command.c | 368 +++++++++++++++++++++--------------------- src/qemu/qemu_command.h | 30 ++-- src/qemu/qemu_driver.c | 94 ++++++------ src/qemu/qemu_hotplug.c | 162 +++++++++--------- src/qemu/qemu_hotplug.h | 32 ++-- 7 files changed, 352 insertions(+), 352 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 9d3c4e9..55f670b 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -366,7 +366,7 @@ error: int qemuCapsProbeCPUModels(const char *qemu, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, const char *arch, unsigned int *count, const char ***cpus) @@ -389,7 +389,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); @@ -431,7 +431,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 @@ -547,8 +547,8 @@ qemuCapsInitGuest(virCapsPtr caps, !virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0)) goto error; - if (qemuCapsExtractVersionInfo(binary, NULL, &qemuCmdFlags) < 0 || - (qemuCapsGet(qemuCmdFlags, QEMU_CAPS_BOOTINDEX) && + if (qemuCapsExtractVersionInfo(binary, 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 f60a0a8..f53e5da 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -110,7 +110,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); @@ -119,16 +119,16 @@ int qemuCapsExtractVersion(virCapsPtr caps, unsigned int *version); int qemuCapsExtractVersionInfo(const char *qemu, 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 e778aed..ab92ce8 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; @@ -304,7 +304,7 @@ cleanup: static int qemuOpenVhostNet(virDomainNetDefPtr net, - unsigned long long qemuCmdFlags, + unsigned long long qemuCaps, int *vhostfd) { @@ -318,9 +318,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->backend == VIR_DOMAIN_NET_BACKEND_TYPE_VHOST) { qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("vhost-net is not supported with " @@ -402,11 +402,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; @@ -500,10 +500,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); @@ -583,23 +583,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++) { @@ -1094,7 +1094,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) { @@ -1119,7 +1119,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); @@ -1148,7 +1148,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); @@ -1279,7 +1279,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); @@ -1287,7 +1287,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) { @@ -1305,14 +1305,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); @@ -1320,7 +1320,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); @@ -1329,7 +1329,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), @@ -1338,7 +1338,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 { @@ -1364,7 +1364,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); @@ -1392,7 +1392,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"); @@ -1404,7 +1404,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)) { @@ -1421,7 +1421,7 @@ error: char *qemuBuildFSStr(virDomainFSDefPtr fs, - unsigned long long qemuCmdFlags ATTRIBUTE_UNUSED) + unsigned long long qemuCaps ATTRIBUTE_UNUSED) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1457,7 +1457,7 @@ error: char * qemuBuildFSDevStr(virDomainFSDefPtr fs, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1471,7 +1471,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(); @@ -1488,7 +1488,7 @@ error: char * qemuBuildControllerDevStr(virDomainControllerDefPtr def, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1529,7 +1529,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)) { @@ -1573,7 +1573,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; @@ -1596,9 +1596,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)) { @@ -1718,7 +1718,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1731,7 +1731,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)) { @@ -1749,13 +1749,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)) { @@ -1796,7 +1796,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); @@ -1817,7 +1817,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)) { @@ -1858,7 +1858,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); @@ -1871,7 +1871,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)) { @@ -1914,7 +1914,7 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev) char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, - unsigned long long qemuCmdFlags) + unsigned long long qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1928,7 +1928,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)) { @@ -2007,7 +2007,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; @@ -2075,7 +2075,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; @@ -2185,12 +2185,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 @@ -2223,7 +2223,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 { @@ -2423,7 +2423,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) @@ -2440,7 +2440,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver, *hasHwVirt = false; if (def->cpu && def->cpu->model) { - if (qemuCapsProbeCPUModels(emulator, qemuCmdFlags, ut->machine, + if (qemuCapsProbeCPUModels(emulator, qemuCaps, ut->machine, &ncpus, &cpus) < 0) goto cleanup; @@ -2546,13 +2546,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 @@ -2599,7 +2599,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, @@ -2624,7 +2624,7 @@ qemuBuildCommandLine(virConnectPtr conn, uname_normalize(&ut); - if (qemuAssignDeviceAliases(def, qemuCmdFlags) < 0) + if (qemuAssignDeviceAliases(def, qemuCaps) < 0) return NULL; virUUIDFormat(def->uuid, uuid); @@ -2635,25 +2635,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); @@ -2661,12 +2661,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); @@ -2687,7 +2687,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(def->os.arch, "x86_64", 6) || STREQLEN(def->os.arch, "i686", 4)) { - qemuCapsSet(&qemuCmdFlags, QEMU_CAPS_PCI_MULTIBUS); + qemuCapsSet(&qemuCaps, QEMU_CAPS_PCI_MULTIBUS); } cmd = virCommandNewArgList(emulator, "-S", NULL); @@ -2701,7 +2701,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; @@ -2709,7 +2709,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"); } @@ -2740,7 +2740,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); @@ -2751,30 +2751,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); @@ -2791,7 +2791,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); @@ -2844,8 +2844,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, @@ -2855,11 +2855,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); @@ -2881,7 +2881,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))) @@ -2925,7 +2925,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: @@ -2941,7 +2941,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)) { @@ -2960,13 +2960,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 { @@ -2995,7 +2995,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 { @@ -3010,7 +3010,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"); @@ -3043,7 +3043,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); @@ -3054,7 +3054,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 */ @@ -3085,7 +3085,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]; @@ -3106,7 +3106,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-device"); char *devstr; - if (!(devstr = qemuBuildControllerDevStr(def->controllers[i], qemuCmdFlags))) + if (!(devstr = qemuBuildControllerDevStr(def->controllers[i], qemuCaps))) goto no_memory; virCommandAddArg(cmd, devstr); @@ -3115,11 +3115,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)) { for (i = 0 ; i < def->os.nBootDevs ; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_CDROM: @@ -3146,7 +3146,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); @@ -3181,17 +3181,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); @@ -3227,7 +3227,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 @@ -3237,7 +3237,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); @@ -3352,19 +3352,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); @@ -3379,7 +3379,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++) { @@ -3390,8 +3390,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; @@ -3399,7 +3399,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; @@ -3411,7 +3411,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) @@ -3432,7 +3432,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); @@ -3450,8 +3450,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))) @@ -3459,9 +3459,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); @@ -3472,8 +3472,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))) @@ -3506,8 +3506,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")); @@ -3518,8 +3518,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")); @@ -3554,8 +3554,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")); @@ -3565,7 +3565,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-chardev"); if (!(devstr = qemuBuildChrChardevStr(&smartcard->data.passthru, smartcard->info.alias, - qemuCmdFlags))) { + qemuCaps))) { virBufferFreeAndReset(&opt); goto error; } @@ -3590,7 +3590,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++) { @@ -3598,12 +3598,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); @@ -3623,7 +3623,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++) { @@ -3631,12 +3631,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); @@ -3661,8 +3661,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; @@ -3671,7 +3671,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); @@ -3690,13 +3690,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 @@ -3706,7 +3706,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); @@ -3714,7 +3714,7 @@ qemuBuildCommandLine(virConnectPtr conn, virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildVirtioSerialPortDevStr(channel, - qemuCmdFlags))) + qemuCaps))) goto error; virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3729,7 +3729,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; @@ -3738,14 +3738,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); @@ -3767,7 +3767,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))) @@ -3804,7 +3804,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) @@ -3818,7 +3818,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"); @@ -3863,8 +3863,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); @@ -3890,14 +3890,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; @@ -3956,12 +3956,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; @@ -4002,7 +4002,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) { @@ -4014,7 +4014,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); @@ -4029,15 +4029,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; @@ -4049,14 +4049,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; @@ -4112,10 +4112,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 { @@ -4158,7 +4158,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")); @@ -4170,7 +4170,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; @@ -4188,9 +4188,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) { @@ -4204,13 +4204,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; @@ -4230,7 +4230,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")); @@ -4238,13 +4238,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 { @@ -4254,7 +4254,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")); @@ -4262,7 +4262,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")); @@ -4271,7 +4271,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")); @@ -4299,16 +4299,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 8135046..65af8d8 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -42,7 +42,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, @@ -64,44 +64,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); @@ -115,13 +115,13 @@ char * qemuBuildUSBHostdevDevStr(virDomainHostdevDefPtr dev); int qemuNetworkIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemCmdFlags) + unsigned long long qemuCaps) ATTRIBUTE_NONNULL(1); 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); @@ -151,7 +151,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 910af15..f76d452 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -919,7 +919,7 @@ qemuReconnectDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq struct virReconnectDomainData *data = opaque; struct qemud_driver *driver = data->driver; qemuDomainObjPrivatePtr priv; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; virConnectPtr conn = data->conn; virDomainObjLock(obj); @@ -945,8 +945,8 @@ qemuReconnectDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq * since launch time */ if (qemuCapsExtractVersionInfo(obj->def->emulator, NULL, - &qemuCmdFlags) >= 0 && - qemuCapsGet(qemuCmdFlags, QEMU_CAPS_DEVICE)) { + &qemuCaps) >= 0 && + qemuCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) { priv->persistentAddrs = 1; if (!(priv->pciaddrs = qemuDomainPCIAddressSetCreate(obj->def)) || @@ -2000,7 +2000,7 @@ static int qemuInitPasswords(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, - unsigned long long qemuCmdFlags) { + unsigned long long qemuCaps) { int ret = 0; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -2021,7 +2021,7 @@ qemuInitPasswords(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++) { @@ -2513,15 +2513,15 @@ static int qemuAssignPCIAddresses(virDomainDefPtr def) { int ret = -1; - unsigned long long qemuCmdFlags = 0; + unsigned long long qemuCaps = 0; qemuDomainPCIAddressSetPtr addrs = NULL; if (qemuCapsExtractVersionInfo(def->emulator, 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; @@ -2622,7 +2622,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, const char *stdin_path, enum virVMOperationType vmop) { int ret; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; off_t pos = -1; char ebuf[1024]; char *pidfile = NULL; @@ -2751,7 +2751,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, DEBUG0("Determining emulator version"); if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto cleanup; DEBUG0("Setting up domain cgroup (if required)"); @@ -2768,7 +2768,7 @@ static int qemudStartVMDaemon(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 @@ -2797,7 +2797,7 @@ static int qemudStartVMDaemon(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)) { DEBUG0("Assigning domain PCI addresses"); /* Populate cache with current addresses */ if (priv->pciaddrs) { @@ -2820,7 +2820,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, DEBUG0("Building emulator command line"); vm->def->id = driver->nextvmid++; 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; @@ -2924,12 +2924,12 @@ static int qemudStartVMDaemon(virConnectPtr conn, goto cleanup; DEBUG0("Setting any required VM passwords"); - if (qemuInitPasswords(conn, driver, vm, qemuCmdFlags) < 0) + if (qemuInitPasswords(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)) { DEBUG0("Determining domain device PCI addresses"); if (qemuInitPCIAddresses(driver, vm) < 0) goto cleanup; @@ -6097,7 +6097,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; @@ -6154,14 +6154,14 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, if (qemuCapsExtractVersionInfo(def->emulator, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto cleanup; if (qemuPrepareMonitorChr(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; @@ -6506,7 +6506,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; @@ -6536,7 +6536,7 @@ static int qemudDomainAttachDevice(virDomainPtr dom, if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto endjob; if (dev->type == VIR_DOMAIN_DEVICE_DISK) { @@ -6556,7 +6556,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; @@ -6565,17 +6565,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 { @@ -6600,7 +6600,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 { @@ -6611,12 +6611,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 { @@ -6664,7 +6664,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; @@ -6706,7 +6706,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, - &qemuCmdFlags) < 0) + &qemuCaps) < 0) goto endjob; switch (dev->type) { @@ -6727,7 +6727,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; @@ -6782,7 +6782,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; @@ -6812,28 +6812,28 @@ static int qemudDomainDetachDevice(virDomainPtr dom, if (qemuCapsExtractVersionInfo(vm->def->emulator, 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."), @@ -6841,7 +6841,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")); @@ -8004,7 +8004,7 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn, int ret = -1; int internalret; char *unixfile = NULL; - unsigned long long qemuCmdFlags; + unsigned long long qemuCaps; qemuDomainObjPrivatePtr priv = NULL; struct timeval now; @@ -8078,15 +8078,15 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn, unlink(unixfile); /* check that this qemu version supports the interactive exec */ - if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, &qemuCmdFlags) < 0) { + if (qemuCapsExtractVersionInfo(vm->def->emulator, 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, @@ -8528,7 +8528,7 @@ static int doTunnelMigrate(virDomainPtr dom, 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; @@ -8589,15 +8589,15 @@ static int doTunnelMigrate(virDomainPtr dom, } /* check that this qemu version supports the unix migration */ - if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, &qemuCmdFlags) < 0) { + if (qemuCapsExtractVersionInfo(vm->def->emulator, 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; @@ -8639,11 +8639,11 @@ static int doTunnelMigrate(virDomainPtr dom, 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_hotplug.c b/src/qemu/qemu_hotplug.c index 5f2938f..a6e3f2b 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; @@ -1300,7 +1300,7 @@ cleanup: 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; @@ -1329,13 +1329,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; @@ -1363,7 +1363,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"); @@ -1378,7 +1378,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; @@ -1423,7 +1423,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); @@ -1438,8 +1438,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); @@ -1456,7 +1456,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"); @@ -1505,7 +1505,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; @@ -1549,7 +1549,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; @@ -1580,7 +1580,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"); @@ -1605,7 +1605,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; @@ -1651,7 +1651,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; @@ -1687,7 +1687,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; @@ -1701,10 +1701,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__ */ -- 1.7.4

On 02/09/2011 09:02 AM, Jiri Denemark wrote:
The new name comply more with the fact that it contains a set of qemuCapsFlags. --- src/qemu/qemu_capabilities.c | 10 +- src/qemu/qemu_capabilities.h | 8 +- src/qemu/qemu_command.c | 368 +++++++++++++++++++++--------------------- src/qemu/qemu_command.h | 30 ++-- src/qemu/qemu_driver.c | 94 ++++++------ src/qemu/qemu_hotplug.c | 162 +++++++++--------- src/qemu/qemu_hotplug.h | 32 ++-- 7 files changed, 352 insertions(+), 352 deletions(-)
Purely mechanical. ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

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 --- src/qemu/qemu_capabilities.c | 190 ++++++++++++++++++++++++------------------ src/qemu/qemu_capabilities.h | 143 +++++++++++++++++--------------- src/qemu/qemu_command.c | 54 ++++++------ src/qemu/qemu_command.h | 30 ++++---- src/qemu/qemu_driver.c | 32 +++++-- src/qemu/qemu_hotplug.c | 34 ++++---- src/qemu/qemu_hotplug.h | 32 ++++---- 7 files changed, 281 insertions(+), 234 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 55f670b..4f63823 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -366,7 +366,7 @@ error: int qemuCapsProbeCPUModels(const char *qemu, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, const char *arch, unsigned int *count, const char ***cpus) @@ -431,7 +431,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 @@ -542,7 +542,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; @@ -637,6 +637,7 @@ cleanup: VIR_FREE(binary); VIR_FREE(kvmbin); } + qemuCapsFree(qemuCaps); return ret; @@ -770,129 +771,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); } /* @@ -908,22 +909,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 @@ -932,9 +933,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 @@ -963,15 +962,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); @@ -1018,10 +1018,17 @@ 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); + + if (!(strflags = virBitmapString(flags))) { + virReportOOMError(); + return -1; + } + + VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s", + major, minor, micro, *version, 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) @@ -1045,7 +1052,7 @@ fail: static int qemuCapsExtractDeviceStr(const char *qemu, - unsigned long long *flags) + virBitmapPtr flags) { char *output = NULL; virCommandPtr cmd; @@ -1082,7 +1089,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\"")) @@ -1092,7 +1099,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); @@ -1110,16 +1117,16 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags) int qemuCapsExtractVersionInfo(const char *qemu, 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; @@ -1140,7 +1147,8 @@ int qemuCapsExtractVersionInfo(const char *qemu, 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; @@ -1148,19 +1156,22 @@ int qemuCapsExtractVersionInfo(const char *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; } @@ -1213,25 +1224,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 f53e5da..193f23d 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -24,83 +24,90 @@ #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_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_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); @@ -110,7 +117,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); @@ -119,16 +126,16 @@ int qemuCapsExtractVersion(virCapsPtr caps, unsigned int *version); int qemuCapsExtractVersionInfo(const char *qemu, 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 ab92ce8..3af39ba 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; @@ -304,7 +304,7 @@ cleanup: static int qemuOpenVhostNet(virDomainNetDefPtr net, - unsigned long long qemuCaps, + virBitmapPtr qemuCaps, int *vhostfd) { @@ -402,7 +402,7 @@ static int qemuAssignDeviceDiskAliasLegacy(virDomainDiskDefPtr disk) char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { char *ret; @@ -500,7 +500,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)) @@ -583,7 +583,7 @@ qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller) static int -qemuAssignDeviceAliases(virDomainDefPtr def, unsigned long long qemuCaps) +qemuAssignDeviceAliases(virDomainDefPtr def, virBitmapPtr qemuCaps) { int i; @@ -1094,7 +1094,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) { @@ -1148,7 +1148,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); @@ -1364,7 +1364,7 @@ error: char * qemuBuildDriveDevStr(virDomainDiskDefPtr disk, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus); @@ -1421,7 +1421,7 @@ error: char *qemuBuildFSStr(virDomainFSDefPtr fs, - unsigned long long qemuCaps ATTRIBUTE_UNUSED) + virBitmapPtr qemuCaps ATTRIBUTE_UNUSED) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1457,7 +1457,7 @@ error: char * qemuBuildFSDevStr(virDomainFSDefPtr fs, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer opt = VIR_BUFFER_INITIALIZER; @@ -1488,7 +1488,7 @@ error: char * qemuBuildControllerDevStr(virDomainControllerDefPtr def, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1573,7 +1573,7 @@ qemuBuildNicStr(virDomainNetDefPtr net, char * qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *nic; @@ -1718,7 +1718,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1749,7 +1749,7 @@ error: char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -1796,7 +1796,7 @@ error: char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *model = virDomainSoundModelTypeToString(sound->model); @@ -1858,7 +1858,7 @@ error: static char * qemuBuildVideoDevStr(virDomainVideoDefPtr video, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; const char *model = qemuVideoTypeToString(video->type); @@ -1914,7 +1914,7 @@ qemuOpenPCIConfig(virDomainHostdevDefPtr dev) char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev, const char *configfd, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -2007,7 +2007,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; @@ -2185,7 +2185,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) @@ -2423,7 +2423,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) @@ -2546,7 +2546,7 @@ no_memory: static char * qemuBuildSmpArgStr(const virDomainDefPtr def, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -2599,7 +2599,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, @@ -2637,7 +2637,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: @@ -2687,7 +2687,7 @@ qemuBuildCommandLine(virConnectPtr conn, /* Currently only x86_64 and i686 support PCI-multibus. */ if (STREQLEN(def->os.arch, "x86_64", 6) || STREQLEN(def->os.arch, "i686", 4)) { - qemuCapsSet(&qemuCaps, QEMU_CAPS_PCI_MULTIBUS); + qemuCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS); } cmd = virCommandNewArgList(emulator, "-S", NULL); @@ -3185,13 +3185,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 65af8d8..fd8b323 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -42,7 +42,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, @@ -64,44 +64,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); @@ -115,13 +115,13 @@ char * qemuBuildUSBHostdevDevStr(virDomainHostdevDefPtr dev); int qemuNetworkIfaceConnect(virConnectPtr conn, struct qemud_driver *driver, virDomainNetDefPtr net, - unsigned long long qemuCaps) + 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); @@ -151,7 +151,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 f76d452..481062e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -919,7 +919,7 @@ qemuReconnectDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq struct virReconnectDomainData *data = opaque; struct qemud_driver *driver = data->driver; qemuDomainObjPrivatePtr priv; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; virConnectPtr conn = data->conn; virDomainObjLock(obj); @@ -965,9 +965,12 @@ qemuReconnectDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq if (virDomainObjUnref(obj) > 0) virDomainObjUnlock(obj); + + qemuCapsFree(qemuCaps); return; error: + qemuCapsFree(qemuCaps); if (!virDomainObjIsActive(obj)) { if (virDomainObjUnref(obj) > 0) virDomainObjUnlock(obj); @@ -2000,7 +2003,7 @@ static int qemuInitPasswords(virConnectPtr conn, struct qemud_driver *driver, virDomainObjPtr vm, - unsigned long long qemuCaps) { + virBitmapPtr qemuCaps) { int ret = 0; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -2513,7 +2516,7 @@ static int qemuAssignPCIAddresses(virDomainDefPtr def) { int ret = -1; - unsigned long long qemuCaps = 0; + virBitmapPtr qemuCaps = NULL; qemuDomainPCIAddressSetPtr addrs = NULL; if (qemuCapsExtractVersionInfo(def->emulator, @@ -2532,6 +2535,7 @@ qemuAssignPCIAddresses(virDomainDefPtr def) ret = 0; cleanup: + qemuCapsFree(qemuCaps); qemuDomainPCIAddressSetFree(addrs); return ret; @@ -2622,7 +2626,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, const char *stdin_path, enum virVMOperationType vmop) { int ret; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; off_t pos = -1; char ebuf[1024]; char *pidfile = NULL; @@ -2959,6 +2963,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) goto cleanup; + qemuCapsFree(qemuCaps); virCommandFree(cmd); VIR_FORCE_CLOSE(logfile); @@ -2968,6 +2973,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); qemudShutdownVMDaemon(driver, vm, 0); @@ -6097,7 +6103,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; @@ -6170,6 +6176,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, cleanup: qemuDriverUnlock(driver); + qemuCapsFree(qemuCaps); virCommandFree(cmd); virDomainDefFree(def); return ret; @@ -6506,7 +6513,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; @@ -6637,6 +6644,7 @@ cleanup: if (cgroup) virCgroupFree(&cgroup); + qemuCapsFree(qemuCaps); virDomainDeviceDefFree(dev); if (vm) virDomainObjUnlock(vm); @@ -6664,7 +6672,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; @@ -6770,6 +6778,7 @@ cleanup: if (cgroup) virCgroupFree(&cgroup); + qemuCapsFree(qemuCaps); virDomainDeviceDefFree(dev); if (vm) virDomainObjUnlock(vm); @@ -6782,7 +6791,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; @@ -6855,6 +6864,7 @@ endjob: vm = NULL; cleanup: + qemuCapsFree(qemuCaps); virDomainDeviceDefFree(dev); if (vm) virDomainObjUnlock(vm); @@ -8004,7 +8014,7 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn, int ret = -1; int internalret; char *unixfile = NULL; - unsigned long long qemuCaps; + virBitmapPtr qemuCaps = NULL; qemuDomainObjPrivatePtr priv = NULL; struct timeval now; @@ -8156,6 +8166,7 @@ endjob: } cleanup: + qemuCapsFree(qemuCaps); virDomainDefFree(def); if (unixfile) unlink(unixfile); @@ -8528,7 +8539,7 @@ static int doTunnelMigrate(virDomainPtr dom, 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; @@ -8713,6 +8724,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_hotplug.c b/src/qemu/qemu_hotplug.c index a6e3f2b..d148553 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; @@ -1300,7 +1300,7 @@ cleanup: int qemuDomainDetachPciControllerDevice(struct qemud_driver *driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev, - unsigned long long qemuCaps) + virBitmapPtr qemuCaps) { int i, ret = -1; virDomainControllerDefPtr detach = NULL; @@ -1378,7 +1378,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; @@ -1505,7 +1505,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; @@ -1605,7 +1605,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; @@ -1687,7 +1687,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__ */ -- 1.7.4

On 02/09/2011 09:02 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
Does gcc warn about that (possible via some -W flag that we aren't currently using)? Or are we silently relying on a (common) extension that might bite us elsewhere?
- *flags = qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version); + qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version, flags); + + if (!(strflags = virBitmapString(flags))) { + virReportOOMError(); + return -1; + } + + VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s", + major, minor, micro, *version, strflags); + VIR_FREE(strflags);
Using virReportOOMError() is harsh, when the only thing that we lack is a VIR_DEBUG(). Would it be any better to do: if ((strflags = virBitmapString(flags))) { VIR_DEBUG(...); VIR_FREE(strflags); } and just lose the debug message if we're tight on memory? Then again, if we're that close to running out of memory, it won't be much longer before something else pushes us over the boundary, so giving up now might not be too bad.
void -qemuCapsClear(unsigned long long *caps, +qemuCapsClear(virBitmapPtr caps, enum qemuCapsFlags flag) { - *caps &= ~flag; + ignore_value(virBitmapClearBit(caps, flag));
So why does this require caps to exist...
}
bool -qemuCapsGet(unsigned long long caps, +qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag) { - return !!(caps & flag); + bool b; + + if (!caps || virBitmapGetBit(caps, flag, &b) < 0)
while this does not? Shouldn't qemuCapsGet be marked ATTRIBUTE_NONNULL(1)?
-void qemuCapsSet(unsigned long long *caps, - enum qemuCapsFlags flag); +virBitmapPtr qemuCapsNew(void); + +# define qemuCapsFree(caps) virBitmapFree(caps)
Add this to cfg.mk's list of free-like functions.
-bool qemuCapsGet(unsigned long long caps, +bool qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag);
I guess you really did intend for qemuCapsGet to work even if qemuCapsFree failed. I like the idea of this series, and agree that it's too late to make it into 0.8.8. It's probably worth posting a v2 to address comments I raised, although an incremental diff might be easier to review at that point. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On 02/09/2011 09:02 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
Does gcc warn about that (possible via some -W flag that we aren't currently using)? It doesn't warn about it by default and I'm not aware of any flag which would turn this warning on.
Or are we silently relying on a (common) extension that might bite us elsewhere? Apparently yes.
It already bit me when I wanted to change tests to use qemuCaps* functions before the patch that starts using virBitmap. Passing enum values as variable arguments didn't work at all since the values didn't have all the same type. Those that fit into int were ints and the others were long. Which reminds me I have a possible bug in the last patch...
- *flags = qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version); + qemuCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version, flags); + + if (!(strflags = virBitmapString(flags))) { + virReportOOMError(); + return -1; + } + + VIR_DEBUG("Version %u.%u.%u, cooked version %u, flags %s", + major, minor, micro, *version, strflags); + VIR_FREE(strflags);
Using virReportOOMError() is harsh, when the only thing that we lack is a VIR_DEBUG(). Would it be any better to do:
if ((strflags = virBitmapString(flags))) { VIR_DEBUG(...); VIR_FREE(strflags); }
and just lose the debug message if we're tight on memory?
Yeah, that's probably better, although it wouldn't make a huge difference in practise anyway. After all, logging functions also just ignore OOM conditions.
void -qemuCapsClear(unsigned long long *caps, +qemuCapsClear(virBitmapPtr caps, enum qemuCapsFlags flag) { - *caps &= ~flag; + ignore_value(virBitmapClearBit(caps, flag));
So why does this require caps to exist...
Trying to set caps that are NULL is more a bug in the code than something that is intentional (as oppose to the Get case) and I prefer to get a SIGSEGV instead of magically hiding that, esp. since gcc is not very clever (see below).
}
bool -qemuCapsGet(unsigned long long caps, +qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag) { - return !!(caps & flag); + bool b; + + if (!caps || virBitmapGetBit(caps, flag, &b) < 0)
while this does not? Shouldn't qemuCapsGet be marked ATTRIBUTE_NONNULL(1)?
This is mostly for two reasons. First, gcc only warns on ATTRIBUTE_NONNULL if NULL is explicitly passed as a parameter and not if it's done through a variable. So it doesn't really help with detecting cases where NULL is indirectly passed to qemuCapsGet(). Second, there are places (actually it's probably just one case currently) in the code where we don't care what the qemu binary is capable of when calling a function that expect qemuCaps argument. So we want to pass NULL there. And it seems more practical to me to do the test inside qemuCapsGet that in any place where it could possibly be called with NULL.
-void qemuCapsSet(unsigned long long *caps, - enum qemuCapsFlags flag); +virBitmapPtr qemuCapsNew(void); + +# define qemuCapsFree(caps) virBitmapFree(caps)
Add this to cfg.mk's list of free-like functions.
Ah, I forgot to do that because I originally wanted to just get rid of qemuCapsFree() and call virBitmapFree directly instead. I didn't do that so I'll add the macro to cfg.mk.
-bool qemuCapsGet(unsigned long long caps, +bool qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag);
I guess you really did intend for qemuCapsGet to work even if qemuCapsFree failed.
I didn't get this last comment. Could you be more specific about what you wanted to say? :-) Jirka

On 02/10/2011 06:48 AM, Jiri Denemark wrote:
On 02/09/2011 09:02 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
Does gcc warn about that (possible via some -W flag that we aren't currently using)? It doesn't warn about it by default and I'm not aware of any flag which would turn this warning on.
-pedantic But that's a heavy hammer. So I filed a gcc bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47701
This is mostly for two reasons. First, gcc only warns on ATTRIBUTE_NONNULL if NULL is explicitly passed as a parameter and not if it's done through a variable. So it doesn't really help with detecting cases where NULL is indirectly passed to qemuCapsGet().
That's likewise a bug in gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17308 Meanwhile, clang DOES do better NULL analysis, and will warn where gcc currently doesn't. It's just that we don't build under clang as often. So just because gcc doesn't exploit the attribute as well as it should is not a reason to avoid use of the attribute.
-bool qemuCapsGet(unsigned long long caps, +bool qemuCapsGet(virBitmapPtr caps, enum qemuCapsFlags flag);
I guess you really did intend for qemuCapsGet to work even if qemuCapsFree failed.
I didn't get this last comment. Could you be more specific about what you wanted to say? :-)
I was noticing that you omitted the ATTRIBUTE_NONNULL check in the header and having the explicit NULL check in the code, and therefore assuming that you meant to do it this way (if you had marked this ATTRIBUTE_NONNULL, then the check in the code would have been redundant). But you've convinced me that we have at least one case where we DO pass a null bitset, and so this part of the patch is correct; nothing to change. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

This needs to be squashed into the previous patch but is provided separately for easier review. --- src/qemu/qemu_capabilities.c | 14 + src/qemu/qemu_capabilities.h | 2 + tests/qemuhelptest.c | 727 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 468 ++++++++++++++-------------- 4 files changed, 617 insertions(+), 594 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4f63823..3ef7962 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 @@ -1245,6 +1246,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 193f23d..3dded1b 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -104,6 +104,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 e334bce..37ec331 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,364 +137,358 @@ 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, - 12001, 1, 0); + QEMU_CAPS_CCID_PASSTHRU, + QEMU_CAPS_CHARDEV_SPICEVMC); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 5a39f7f..f5e5bc8 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; @@ -112,7 +112,7 @@ static int testCompareXMLToArgvFiles(const char *xml, virResetLastError(); if (!(cmd = qemuBuildCommandLine(conn, &driver, - vmdef, &monitor_chr, false, flags, + vmdef, &monitor_chr, false, extraFlags, migrateFrom, migrateFd, NULL, VIR_VM_OP_CREATE))) goto fail; @@ -160,7 +160,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; @@ -221,18 +221,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 @@ -247,241 +253,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, 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", QEMUD_CMD_FLAG_NAME, false); - DO_TEST("blkiotune", QEMUD_CMD_FLAG_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); + 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

On 02/09/2011 09:02 AM, Jiri Denemark wrote:
This needs to be squashed into the previous patch but is provided separately for easier review. --- src/qemu/qemu_capabilities.c | 14 + src/qemu/qemu_capabilities.h | 2 + tests/qemuhelptest.c | 727 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 468 ++++++++++++++-------------- 4 files changed, 617 insertions(+), 594 deletions(-)
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);
QEMU_CAPS_LAST as a terminal seems a bit awkward. Would it be any better to require 0 to be the terminal? Then again, since it would be 0 and not NULL, we can't use ATTRIBUTE_SENTINEL as a compile-time aid that we remembered to use the sentinel.
@@ -124,364 +137,358 @@ 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); \
And this is a nice trick for encapsulating the sentinel in only one place.
- 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,
How nice of git to mess up the context. But the change you made looks obvious. ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Wed, Feb 09, 2011 at 10:33:01 -0700, Eric Blake wrote:
On 02/09/2011 09:02 AM, Jiri Denemark wrote:
This needs to be squashed into the previous patch but is provided separately for easier review. --- src/qemu/qemu_capabilities.c | 14 + src/qemu/qemu_capabilities.h | 2 + tests/qemuhelptest.c | 727 +++++++++++++++++++++--------------------- tests/qemuxml2argvtest.c | 468 ++++++++++++++-------------- 4 files changed, 617 insertions(+), 594 deletions(-)
void +qemuCapsSetList(virBitmapPtr caps, ...) +{ + va_list list; + int flag; + + va_start(list, caps); + while ((flag = va_arg(list, int)) < QEMU_CAPS_LAST)
This is the bug I was talking about in the previous email. I should rather use "enum qemuCapsFlags" instead of "int" in case someone passes -fshort-enum option to gcc which would result in the enum being represented as char rather than int.
+ ignore_value(virBitmapSetBit(caps, flag)); + va_end(list);
QEMU_CAPS_LAST as a terminal seems a bit awkward. Would it be any better to require 0 to be the terminal?
The problem is that 0 is a valid flag value (QEMU_CAPS_KQEMU) addressing the lowest bit. We could reserve the value for a terminal but in that case we could never make use of the lowest bit in the bitmap. Not that it would make a huge difference but QEMU_CAPS_LAST just seemed good enough to me :-) Also it's kinda nice to have a call like qemuCapsSetList(caps, QEMU_CAPS_1, QEMU_CAPS_2, ..., QEMU_CAPS_LAST) Jirka

On 02/10/2011 07:03 AM, Jiri Denemark wrote:
+ va_start(list, caps); + while ((flag = va_arg(list, int)) < QEMU_CAPS_LAST)
This is the bug I was talking about in the previous email. I should rather use "enum qemuCapsFlags" instead of "int" in case someone passes -fshort-enum option to gcc which would result in the enum being represented as char rather than int.
Ah, but char promotes to int, so you still end up getting the right value from va_arg() (since varargs arguments are always passed via default promotion rules). Not a bug, even under -fshort-enum. In fact, gcc will warn if you do va_arg(list, enum xyz) when -fshort-enum is in effect, since va_arg's second "argument" must be the promoted type.
QEMU_CAPS_LAST as a terminal seems a bit awkward. Would it be any better to require 0 to be the terminal?
The problem is that 0 is a valid flag value (QEMU_CAPS_KQEMU) addressing the lowest bit. We could reserve the value for a terminal but in that case we could never make use of the lowest bit in the bitmap. Not that it would make a huge difference but QEMU_CAPS_LAST just seemed good enough to me :-) Also it's kinda nice to have a call like
qemuCapsSetList(caps, QEMU_CAPS_1, QEMU_CAPS_2, ..., QEMU_CAPS_LAST)
Yeah, on second thought, I think this is as good as we can get. Maybe it's worth an enhancement request to gcc to implement a new attribute sentinel_value(value), where the existing sentinel(position) maps to sentinel_value(NULL, position). http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47702 But in the meantime, your approach worked out. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Wed, Feb 09, 2011 at 05:01:57PM +0100, Jiri Denemark wrote:
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
This is a very conflict-prone patchset so I'd like to get some feedback on the ideas and naming used so that this could possible be among the first patches pushed after 0.8.8 release.
ACK on the principle and timing ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (3)
-
Daniel Veillard
-
Eric Blake
-
Jiri Denemark