On Fri, Nov 20, 2015 at 04:30:40PM +0100, Marc-André Lureau wrote: > qemu 2.5 provides virtio video device. Similarly to other devices, > it can be used with -vga virtio or -device virtio-vga for primary > devices, or -device virtio-gpu for non-vga devices. > This adds virtio-vga but not virtio-gpu. It would be nice to say so in the commit message. There is a public bug filed for this functionality that would also be nice to include in the commit message. https://bugzilla.redhat.com/show_bug.cgi?id=1195176 > Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > --- > docs/formatdomain.html.in | 5 +++-- > docs/schemas/domaincommon.rng | 1 + > src/conf/domain_conf.c | 3 ++- > src/conf/domain_conf.h | 1 + The .xml test file could be squashed in with the parser changes and added to qemuxml2xmltest as well. > src/qemu/qemu_capabilities.c | 11 +++++++++++ > src/qemu/qemu_capabilities.h | 3 +++ > src/qemu/qemu_command.c | 19 +++++++++++++++---- > tests/qemucapabilitiesdata/caps_2.4.0-1.caps | 3 +++ > 8 files changed, 39 insertions(+), 7 deletions(-) Similarly to qemu command line builder and the qemuxml2argvtest addition. > > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index e5e0167..df29fa1 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -5153,8 +5153,9 @@ qemu-kvm -net nic,model=? /dev/null > <p> > The <code>model</code> element has a mandatory <code>type</code> > attribute which takes the value "vga", "cirrus", "vmvga", "xen", > - "vbox", or "qxl" (<span class="since">since 0.8.6</span>) depending > - on the hypervisor features available. > + "vbox", "qxl" (<span class="since">since 0.8.6</span>) or > + "virtio" (<span class="since">since 1.2.22</span>) > + depending on the hypervisor features available. The next planned version is 1.3.0. > </p> > <p> > You can provide the amount of video memory in kibibytes (blocks of > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > index 994face..228f062 100644 > --- a/docs/schemas/domaincommon.rng > +++ b/docs/schemas/domaincommon.rng > @@ -2921,6 +2921,7 @@ > <value>vmvga</value> > <value>xen</value> > <value>vbox</value> > + <value>virtio</value> > </choice> > </attribute> > <group> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 0ac7dbf..15413dc 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -532,7 +532,8 @@ VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, > "xen", > "vbox", > "qxl", > - "parallels") > + "parallels", > + "virtio") > This is for QEMUs without -device support, I hope nobody would bother backporting the feature to such ancient QEMUs. > VIR_ENUM_IMPL(virDomainInput, VIR_DOMAIN_INPUT_TYPE_LAST, > "mouse", > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 8d43ee6..c26c56d 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -1374,6 +1374,7 @@ typedef enum { > VIR_DOMAIN_VIDEO_TYPE_VBOX, > VIR_DOMAIN_VIDEO_TYPE_QXL, > VIR_DOMAIN_VIDEO_TYPE_PARALLELS, /* pseudo device for VNC in containers */ > + VIR_DOMAIN_VIDEO_TYPE_VIRTIO, > > VIR_DOMAIN_VIDEO_TYPE_LAST > } virDomainVideoType; > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c > index 2813212..357980b 100644 > --- a/src/qemu/qemu_capabilities.c > +++ b/src/qemu/qemu_capabilities.c > @@ -301,6 +301,9 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, > "gic-version", > > "incoming-defer", /* 200 */ > + "vga-virtio", > + "virtio-gpu", > + "virtio-vga", > ); > > > @@ -1117,6 +1120,8 @@ virQEMUCapsComputeCmdFlags(const char *help, > const char *nl = strstr(p, "\n"); > if (strstr(p, "|qxl")) > virQEMUCapsSet(qemuCaps, QEMU_CAPS_VGA_QXL); > + if (strstr(p, "|virtio")) > + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VGA_VIRTIO); The -help output is only parsed for QEMUs older than 1.2.0, this capability can be dropped too. > if ((p = strstr(p, "|none")) && p < nl) > virQEMUCapsSet(qemuCaps, QEMU_CAPS_VGA_NONE); > } > @@ -1543,6 +1548,9 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { > { "virtio-net-ccw", QEMU_CAPS_DEVICE_VIRTIO_NET }, > { "virtio-net-s390", QEMU_CAPS_DEVICE_VIRTIO_NET }, > { "virtio-net-device", QEMU_CAPS_DEVICE_VIRTIO_NET }, > + { "virtio-gpu-pci", QEMU_CAPS_DEVICE_VIRTIO_GPU }, > + { "virtio-gpu-device", QEMU_CAPS_DEVICE_VIRTIO_GPU }, > + { "virtio-vga", QEMU_CAPS_DEVICE_VIRTIO_VGA }, > }; > > static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = { > @@ -2399,6 +2407,9 @@ virQEMUCapsProbeQMPObjects(virQEMUCapsPtr qemuCaps, > /* If qemu supports newer -device qxl it supports -vga qxl as well */ > if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) > virQEMUCapsSet(qemuCaps, QEMU_CAPS_VGA_QXL); > + /* If qemu supports newer -device virtio-gpu-pci it supports -vga virtio as well */ Actually, -vga virtio was added one commit later than virtio-vga. Either way, just one capability should be enough. (Also, we will never use -vga virtio - we prefer the -device syntax for primary video since QEMU 1.6.0, see QEMU_CAPS_DEVICE_VIDEO_PRIMARY). > + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) > + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VGA_VIRTIO); > > return 0; > } > diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h > index e3e40e5..cbe28ae 100644 > --- a/src/qemu/qemu_capabilities.h > +++ b/src/qemu/qemu_capabilities.h > @@ -327,6 +327,9 @@ typedef enum { > > /* 200 */ > QEMU_CAPS_INCOMING_DEFER, /* -incoming defer and migrate_incoming */ > + QEMU_CAPS_VGA_VIRTIO, /* The 'virtio' arg for '-vga' */ > + QEMU_CAPS_DEVICE_VIRTIO_GPU, /* -device virtio-gpu-* */ > + QEMU_CAPS_DEVICE_VIRTIO_VGA, /* -device virtio-vga */ > > QEMU_CAPS_LAST /* this must always be the last item */ > } virQEMUCapsFlags; > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index ef5ef93..787e3bb 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -104,7 +104,8 @@ VIR_ENUM_IMPL(qemuVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, > "", /* no arg needed for xen */ > "", /* don't support vbox */ > "qxl", > - "" /* don't support parallels */); > + "", /* don't support parallels */ > + "virtio"); Changing this to an empty string (since it is not supported for QEMUs < 1.6.0) would remove the need for the specific error message below [1]. > VIR_ENUM_DECL(qemuDeviceVideo) > > @@ -115,7 +116,8 @@ VIR_ENUM_IMPL(qemuDeviceVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, > "", /* no device for xen */ > "", /* don't support vbox */ > "qxl-vga", > - "" /* don't support parallels */); > + "", /* don't support parallels */ > + "virtio-vga"); > > VIR_ENUM_DECL(qemuSoundCodec) > > @@ -10496,8 +10498,10 @@ qemuBuildCommandLine(virConnectPtr conn, > (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_VGA))) > - ) { > + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL_VGA)) || > + (primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_VIRTIO && > + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_VGA))) > + ) { > for (i = 0; i < def->nvideos; i++) { > char *str; > virCommandAddArg(cmd, "-device"); > @@ -10518,6 +10522,13 @@ qemuBuildCommandLine(virConnectPtr conn, > goto error; > } > > + if ((primaryVideoType == VIR_DOMAIN_VIDEO_TYPE_VIRTIO) && > + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VGA_VIRTIO)) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("This QEMU does not support virtio graphics adapters")); > + goto error; > + } > + See [1], this can be handled by the generic error below. Jan
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list