[libvirt] [PATCH 05/11] qemu_process: move video validation out of qemu_command

John Ferlan jferlan at redhat.com
Mon Oct 10 12:35:12 UTC 2016



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




More information about the libvir-list mailing list