On 10/10/2016 05:44 AM, Pavel Hrdina wrote: > On Sat, Oct 08, 2016 at 09:58:15AM -0400, John Ferlan wrote: >> >> >> On 09/30/2016 12:02 PM, Pavel Hrdina wrote: >>> Runtime validation that depend on qemu capabilities should be moved >>> into qemuProcessStartValidateXML. >>> >>> Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> >>> --- >>> src/qemu/qemu_command.c | 33 +------------------- >>> src/qemu/qemu_process.c | 50 ++++++++++++++++++++++++++++++- >>> tests/qemuxml2argvtest.c | 78 +++++++++++++++++++++++++++++------------------- >>> 3 files changed, 98 insertions(+), 63 deletions(-) >>> >> >> Could the qemuxml2argvtest.c to add QEMU_CAPS_DEVICE_CIRRUS_VGA move to >> earlier? Perhaps there is a relationship, but it's not clear from the >> commit message... > > The changes to qemuxml2argvtest.c can be moved to separate patch, the only > relationship is that the movement of validation code depends on the changes > to qemuxml2argvtest.c because this patch adds the validation for secondary > video devices too. > >>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c >>> index 761968b..d283c67 100644 >>> --- a/src/qemu/qemu_command.c >>> +++ b/src/qemu/qemu_command.c >>> @@ -4312,26 +4312,12 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, >>> model = "virtio-gpu-pci"; >>> } >>> } else { >>> - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) { >>> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>> - "%s", _("only one video card is currently supported")); >>> - goto error; >>> - } >>> - >> >> Just checking - does the removal of this end up as part of the (now) >> singular video loop in qemuProcessStartValidateVideo? Same for the >> removed check in qemuBuildVideoCommandLine? >> >> It wasn't "clear" the first pass through reading... > > That exact error message is replaced by different error message: > > "this QEMU does not support '%s' video device" > > Currently only QXL can be used as secondary video device so if QXL device is not > supported by QEMU it also implicates that only one video card is supported. > >>> model = "qxl"; >>> } >>> >>> virBufferAsprintf(&buf, "%s,id=%s", model, video->info.alias); >>> >>> if (video->accel && video->accel->accel3d == VIR_TRISTATE_SWITCH_ON) { >>> - if (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO || >>> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL)) { >>> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>> - _("%s 3d acceleration is not supported"), >>> - virDomainVideoTypeToString(video->type)); >>> - goto error; >>> - } >>> - >>> virBufferAsprintf(&buf, ",virgl=%s", >>> virTristateSwitchTypeToString(video->accel->accel3d)); >>> } >>> @@ -4397,17 +4383,7 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, >>> >>> primaryVideoType = def->videos[0]->type; >>> >>> - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY) && >>> - ((primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_VGA && >>> - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) || >>> - (primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_CIRRUS && >>> - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) || >>> - (primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_VMVGA && >>> - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA)) || >>> - (primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_QXL && >>> - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) || >>> - (primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_VIRTIO && >>> - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)))) { >>> + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY)) { >>> for (i = 0; i < def->nvideos; i++) { >>> char *str; >>> virCommandAddArg(cmd, "-device"); >>> @@ -4422,13 +4398,6 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, >>> if (primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_XEN) { >>> /* nothing - vga has no effect on Xen pvfb */ >>> } else { >>> - if ((primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_QXL) && >>> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) { >>> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", >>> - _("This QEMU does not support QXL graphics adapters")); >>> - return -1; >>> - } >>> - >> >> ... Is it safe to assume there can only be one video card here? > > Where did you get the assumption from? > Probably written before I found the gem in domain_conf about primary being [0] and I never got back to the line in my followup pass. I was "attempting to" match the removed code with the new code. I guess I didn't find this as clean as it appears to be. In hindsight it seems to be a shortcut. Probably helps to have the history of when the PRIMARY capability was added... >>> const char *vgastr = qemuVideoTypeToString(primaryVideoType); >>> if (!vgastr || STREQ(vgastr, "")) { >>> virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c >>> index 6ddcc1f..eb3add9 100644 >>> --- a/src/qemu/qemu_process.c >>> +++ b/src/qemu/qemu_process.c >>> @@ -4448,6 +4448,48 @@ qemuProcessStartValidateGraphics(virDomainObjPtr vm) >>> >>> >>> static int >>> +qemuProcessStartValidateVideo(virDomainObjPtr vm, >>> + virQEMUCapsPtr qemuCaps) >>> +{ >>> + size_t i; >>> + virDomainVideoDefPtr video; >>> + >>> + for (i = 0; i < vm->def->nvideos; i++) { >>> + video = vm->def->videos[i]; >>> + >>> + if ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA && >>> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) || >>> + (video->type == VIR_DOMAIN_VIDEO_TYPE_CIRRUS && >>> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) || >>> + (video->type == VIR_DOMAIN_VIDEO_TYPE_VMVGA && >>> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA)) || >>> + (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL && >>> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) || >>> + (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO && >>> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU))) { >>> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>> + _("this QEMU does not support '%s' video device"), >>> + virDomainVideoTypeToString(video->type)); >>> + return -1; >>> + } >> >> This is a different check to the moved qemuBuildVideoCommandLine code. >> >> 1. The video->types were only checked if DEVICE_VIDEO_PRIMARY was >> set. IOW: This is adding checks and failure scenario that weren't being >> checked previously in the event that cap isn't set. > > Yes that's true. > And even though we have other checks to ensure QXL is the only one used for non primary, we are adding checks VGA, CIRRUS_VGA, and VMWARE_SVGA for every non primary until we find QXL.... >> 2. If DEVICE_VIDEO_PRIMARY, then only if the primary (video[0]) was >> one of the types would the corresponding cap be checked. This change >> will check each video[N] and each cap. > > This is also true. > >> Since qemuDomainDefValidateVideo would have been called before this and >> that video[0] == video->primary, then we know video[1]..video[n] can >> only be VIDEO_TYPE_QXL (so far), so I think this check can be augmented >> to match that. > > This is already done by qemuDomainDefValidateVideo(). > > qemuProcessStartValidateXML()->virDomainDefValidate() > ->qemuDomainDefValidate()->qemuDomainDefValidateVideo() > I think I was going for - the primary can/should make all those checks and the secondary really only needs to make the QXL check. Again there's this whole PRIMARY cap which plays a role and it really isn't just code motion here. >> For sure the non primary video checks need the QEMU_CAPS_DEVICE_QXL >> because that is what was removed from qemuBuildDeviceVideoStr. >> >> I think this is close, just needs a tweak. Unless you have it as "innate >> knowledge" that videos[0] == video->primary, it can be trying to look at > > Check the code at src/conf/domain_conf.c:17317 > > ... > if (VIR_INSERT_ELEMENT_INPLACE(def->videos, > ... > > This ensures that there is only one primary video device and that the primary > video device is always first. Right - exactly what I found (eventually). I think it's confusing to see "videos[0]" used in some cases and video->primary used in other cases until you find that INPLACE line and realize it's putting it @ 0. John > >> code that sometimes keys off of video->primary while other code keys off >> videos[0] is primary. >> >>> + >>> + if (video->accel) { >>> + if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON && >>> + (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO || >>> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL))) { >>> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>> + _("%s 3d acceleration is not supported"), >>> + virDomainVideoTypeToString(video->type)); >>> + return -1; >>> + } >>> + } >>> + } >>> + >>> + return 0; >>> +} >>> + >>> + >>> +static int >>> qemuProcessStartValidateXML(virQEMUDriverPtr driver, >>> virDomainObjPtr vm, >>> virQEMUCapsPtr qemuCaps, >>> @@ -4517,11 +4559,17 @@ qemuProcessStartValidate(virQEMUDriverPtr driver, >>> if (qemuProcessStartValidateXML(driver, vm, qemuCaps, caps, flags) < 0) >>> return -1; >>> >>> + if (qemuProcessStartValidateGraphics(vm) < 0) >>> + return -1; >> >> This is a separate "bug fix" due to 'df73f1db8' adding code in that >> "non-fatal" issues section (whether it's a merge thing or not, I don't >> recall). But it should be separate. > > At least I tried to hide this change in this patch. I'll create a separate > patch for this. > > Pavel > >> >>> + >>> + if (qemuProcessStartValidateVideo(vm, qemuCaps) < 0) >>> + return -1; >>> + >>> VIR_DEBUG("Checking for any possible (non-fatal) issues"); >>> >>> qemuProcessStartWarnShmem(vm); >>> >>> - return qemuProcessStartValidateGraphics(vm); >>> + return 0; >>> } >>> >> >> As noted earlier, I think the rest of this should be separate. >> >> John >> >>> >>> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c >>> index 78bfb92..1e910f3 100644 >>> --- a/tests/qemuxml2argvtest.c >>> +++ b/tests/qemuxml2argvtest.c >>> @@ -748,7 +748,8 @@ mymain(void) >>> QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO, >>> QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV, >>> QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE, >>> - QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB); >>> + QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("eoi-disabled", NONE); >>> DO_TEST("eoi-enabled", NONE); >>> DO_TEST("pv-spinlock-disabled", NONE); >>> @@ -963,32 +964,39 @@ mymain(void) >>> QEMU_CAPS_KVM, >>> QEMU_CAPS_DRIVE_SERIAL); >>> >>> - DO_TEST("graphics-vnc", QEMU_CAPS_VNC); >>> - DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC); >>> - DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET); >>> - DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY); >>> - DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC); >>> - DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC); >>> + DO_TEST("graphics-vnc", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->vncAutoUnixSocket = true; >>> - DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC); >>> + DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->vncAutoUnixSocket = false; >>> - DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC); >>> - DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC); >>> - DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC); >>> + DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> >>> driver.config->vncSASL = 1; >>> VIR_FREE(driver.config->vncSASLdir); >>> ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2")); >>> - DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC); >>> + DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->vncTLS = 1; >>> driver.config->vncTLSx509verify = 1; >>> - DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC); >>> + DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0; >>> VIR_FREE(driver.config->vncSASLdir); >>> VIR_FREE(driver.config->vncTLSx509certdir); >>> >>> - DO_TEST("graphics-sdl", QEMU_CAPS_SDL); >>> - DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL); >>> + DO_TEST("graphics-sdl", QEMU_CAPS_SDL, QEMU_CAPS_DEVICE_VGA); >>> + DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("nographics", NONE); >>> DO_TEST("nographics-display", >>> QEMU_CAPS_DISPLAY); >>> @@ -999,7 +1007,7 @@ mymain(void) >>> QEMU_CAPS_DEVICE_QXL, >>> QEMU_CAPS_SPICE_FILE_XFER_DISABLE); >>> DO_TEST("graphics-spice-no-args", >>> - QEMU_CAPS_SPICE); >>> + QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->spiceSASL = 1; >>> ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2")); >>> DO_TEST("graphics-spice-sasl", >>> @@ -1011,14 +1019,16 @@ mymain(void) >>> QEMU_CAPS_DEVICE_QXL, >>> QEMU_CAPS_SPICE, >>> QEMU_CAPS_CHARDEV_SPICEVMC, >>> - QEMU_CAPS_NODEFCONFIG); >>> + QEMU_CAPS_NODEFCONFIG, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("graphics-spice-compression", >>> QEMU_CAPS_SPICE, >>> QEMU_CAPS_DEVICE_QXL); >>> DO_TEST("graphics-spice-timeout", >>> QEMU_CAPS_KVM, >>> QEMU_CAPS_SPICE, >>> - QEMU_CAPS_DEVICE_QXL); >>> + QEMU_CAPS_DEVICE_QXL, >>> + QEMU_CAPS_DEVICE_VGA); >>> DO_TEST("graphics-spice-qxl-vga", >>> QEMU_CAPS_SPICE, >>> QEMU_CAPS_DEVICE_QXL); >>> @@ -1027,21 +1037,24 @@ mymain(void) >>> QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, >>> QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB, >>> QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR, >>> - QEMU_CAPS_CHARDEV_SPICEVMC); >>> + QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("graphics-spice-agent-file-xfer", >>> QEMU_CAPS_SPICE, >>> QEMU_CAPS_DEVICE_QXL, >>> QEMU_CAPS_SPICE_FILE_XFER_DISABLE); >>> DO_TEST("graphics-spice-socket", >>> QEMU_CAPS_SPICE, >>> - QEMU_CAPS_SPICE_UNIX); >>> + QEMU_CAPS_SPICE_UNIX, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("graphics-spice-auto-socket", >>> QEMU_CAPS_SPICE, >>> - QEMU_CAPS_SPICE_UNIX); >>> + QEMU_CAPS_SPICE_UNIX, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->spiceAutoUnixSocket = true; >>> DO_TEST("graphics-spice-auto-socket-cfg", >>> QEMU_CAPS_SPICE, >>> - QEMU_CAPS_SPICE_UNIX); >>> + QEMU_CAPS_SPICE_UNIX, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> driver.config->spiceAutoUnixSocket = false; >>> >>> DO_TEST("input-usbmouse", NONE); >>> @@ -1184,10 +1197,12 @@ mymain(void) >>> QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390); >>> DO_TEST("channel-spicevmc", >>> QEMU_CAPS_NODEFCONFIG, >>> - QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC); >>> + QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("channel-spicevmc-old", >>> QEMU_CAPS_NODEFCONFIG, >>> - QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC); >>> + QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("channel-virtio-default", >>> QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, >>> QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC); >>> @@ -1561,7 +1576,7 @@ mymain(void) >>> QEMU_CAPS_DEVICE_VIDEO_PRIMARY, >>> QEMU_CAPS_DEVICE_QXL, >>> QEMU_CAPS_DEVICE_PCI_BRIDGE); >>> - DO_TEST("video-vga-nodevice", NONE); >>> + DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA); >>> DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA, >>> QEMU_CAPS_DEVICE_VIDEO_PRIMARY); >>> DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA, >>> @@ -1652,11 +1667,14 @@ mymain(void) >>> DO_TEST_PARSE_ERROR("pci-slot-invalid", NONE); >>> DO_TEST_PARSE_ERROR("pci-function-invalid", NONE); >>> >>> - DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE); >>> - DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE); >>> - DO_TEST("pci-autofill-addr", NONE); >>> + DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> + DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("pci-many", >>> - QEMU_CAPS_DEVICE_PCI_BRIDGE); >>> + QEMU_CAPS_DEVICE_PCI_BRIDGE, >>> + QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("pci-bridge-many-disks", >>> QEMU_CAPS_DEVICE_PCI_BRIDGE); >>> DO_TEST("pcie-root", >>> @@ -2131,7 +2149,7 @@ mymain(void) >>> >>> DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS, >>> QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC, >>> - QEMU_CAPS_NAME_GUEST); >>> + QEMU_CAPS_NAME_GUEST, QEMU_CAPS_DEVICE_CIRRUS_VGA); >>> DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS); >>> >>> DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET); >>> >> >> -- >> libvir-list mailing list >> libvir-list@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list