[libvirt] [PATCH v4 2/2] qemu: Add support to QXL's max_outputs parameter
Martin Kletzander
mkletzan at redhat.com
Wed Mar 30 11:50:19 UTC 2016
On Wed, Mar 30, 2016 at 01:32:15PM +0200, Martin Kletzander wrote:
>Historically, we added heads=1 to videos, but for example for qxl, we
>did not reflect that on the command line. Implementing that now could
>mean that if user were to migrate from older to newer libvirt, the
>command-line for qemu would differ. In order for that not to happen a
>migration cookie flag is introduced.
>
>Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>---
> src/qemu/qemu_command.c | 8 +++
> src/qemu/qemu_migration.c | 64 ++++++++++++++++++++--
> .../qemuhotplug-agent-nopath.xml | 5 ++
> .../qemuhotplug-hotplug-base+agent-nopath.xml | 58 ++++++++++++++++++++
> .../qemuxml2argv-video-qxl-heads.args | 28 ++++++++++
> .../qemuxml2argv-video-qxl-heads.xml | 47 ++++++++++++++++
> .../qemuxml2argv-video-qxl-noheads.args | 24 ++++++++
> .../qemuxml2argv-video-qxl-noheads.xml | 39 +++++++++++++
> tests/qemuxml2argvtest.c | 16 ++++++
> .../qemuxml2xmlout-video-qxl-heads.xml | 47 ++++++++++++++++
> .../qemuxml2xmlout-video-qxl-noheads.xml | 39 +++++++++++++
> tests/qemuxml2xmltest.c | 3 +
> 12 files changed, 373 insertions(+), 5 deletions(-)
> create mode 100644 tests/qemuhotplugtestdata/qemuhotplug-agent-nopath.xml
> create mode 100644 tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+agent-nopath.xml
Oh, for ... sake, don't look at the hotplug stuff, consider it not being
part of the series, I removed it from the local index and github repo.
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.xml
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.xml
> create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-heads.xml
> create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-noheads.xml
>
>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>index 45c5398ad8b9..0f1657f09e99 100644
>--- a/src/qemu/qemu_command.c
>+++ b/src/qemu/qemu_command.c
>@@ -3985,6 +3985,14 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
> /* QEMU accepts mebibytes for vgamem_mb. */
> virBufferAsprintf(&buf, ",vgamem_mb=%u", video->vgamem / 1024);
> }
>+
>+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QXL_VGA_MAX_OUTPUTS) &&
>+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_QXL_MAX_OUTPUTS)) {
>+ if (video->heads)
>+ virBufferAsprintf(&buf, ",max_outputs=%u", video->heads);
>+ } else {
>+ video->heads = 0;
>+ }
> } else if (video->vram &&
> ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA &&
> virQEMUCapsGet(qemuCaps, QEMU_CAPS_VGA_VGAMEM)) ||
>diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
>index 8bc76bf1671d..609252ae3ccc 100644
>--- a/src/qemu/qemu_migration.c
>+++ b/src/qemu/qemu_migration.c
>@@ -87,6 +87,7 @@ enum qemuMigrationCookieFlags {
> QEMU_MIGRATION_COOKIE_FLAG_NBD,
> QEMU_MIGRATION_COOKIE_FLAG_STATS,
> QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG,
>+ QEMU_MIGRATION_COOKIE_FLAG_VIDEO_HEADS,
>
> QEMU_MIGRATION_COOKIE_FLAG_LAST
> };
>@@ -100,7 +101,8 @@ VIR_ENUM_IMPL(qemuMigrationCookieFlag,
> "network",
> "nbd",
> "statistics",
>- "memory-hotplug");
>+ "memory-hotplug",
>+ "video-heads");
>
> enum qemuMigrationCookieFeatures {
> QEMU_MIGRATION_COOKIE_GRAPHICS = (1 << QEMU_MIGRATION_COOKIE_FLAG_GRAPHICS),
>@@ -110,6 +112,7 @@ enum qemuMigrationCookieFeatures {
> QEMU_MIGRATION_COOKIE_NBD = (1 << QEMU_MIGRATION_COOKIE_FLAG_NBD),
> QEMU_MIGRATION_COOKIE_STATS = (1 << QEMU_MIGRATION_COOKIE_FLAG_STATS),
> QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG = (1 << QEMU_MIGRATION_COOKIE_FLAG_MEMORY_HOTPLUG),
>+ QEMU_MIGRATION_COOKIE_VIDEO_HEADS = (1 << QEMU_MIGRATION_COOKIE_FLAG_VIDEO_HEADS),
> };
>
> typedef struct _qemuMigrationCookieGraphics qemuMigrationCookieGraphics;
>@@ -1386,6 +1389,9 @@ qemuMigrationBakeCookie(qemuMigrationCookiePtr mig,
> if (flags & QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG)
> mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG;
>
>+ if (flags & QEMU_MIGRATION_COOKIE_VIDEO_HEADS)
>+ mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_VIDEO_HEADS;
>+
> if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, mig)))
> return -1;
>
>@@ -3132,7 +3138,6 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver,
> if (nmigrate_disks) {
> if (has_drive_mirror) {
> size_t i, j;
>-
> /* Check user requested only known disk targets. */
> for (i = 0; i < nmigrate_disks; i++) {
> for (j = 0; j < vm->def->ndisks; j++) {
>@@ -3177,6 +3182,29 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver,
> vm->newDef && virDomainDefHasMemoryHotplug(vm->newDef)))
> cookieFlags |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG;
>
>+ /*
>+ * If there is at least one QXL video with number of heads
>+ * defined, we need to indicate that we now know how to
>+ * properly specify that on the command-line. Destination
>+ * that cannot do this will properly block such migration and
>+ * new enough destination will know that the value can be kept
>+ * and not reset.
>+ */
>+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QXL_MAX_OUTPUTS) &&
>+ virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QXL_VGA_MAX_OUTPUTS)) {
>+ size_t i = 0;
>+
>+ for (i = 0; i < vm->def->nvideos; i++) {
>+ virDomainVideoDefPtr vid = vm->def->videos[i];
>+
>+ if (vid->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
>+ vid->heads) {
>+ cookieFlags |= QEMU_MIGRATION_COOKIE_VIDEO_HEADS;
>+ break;
>+ }
>+ }
>+ }
>+
> if (!(mig = qemuMigrationEatCookie(driver, vm, NULL, 0, 0)))
> goto cleanup;
>
>@@ -3404,6 +3432,32 @@ qemuMigrationPrepareIncoming(virDomainObjPtr vm,
> }
>
> static int
>+qemuMigratePrepareDomain(virConnectPtr dconn,
>+ virQEMUDriverPtr driver,
>+ virDomainObjPtr vm,
>+ qemuMigrationCookiePtr mig)
>+{
>+ size_t i = 0;
>+
>+ if (!(mig->flags & QEMU_MIGRATION_COOKIE_VIDEO_HEADS)) {
>+ /*
>+ * Source didn't know how to properly specify number of heads
>+ * for QXL video, so in order to migrate with ABI kept, leave
>+ * the value unspecified.
>+ */
>+ for (i = 0; i < vm->def->nvideos; i++) {
>+ virDomainVideoDefPtr vid = vm->def->videos[i];
>+
>+ if (vid->type == VIR_DOMAIN_VIDEO_TYPE_QXL)
>+ vid->heads = 0;
>+ }
>+ }
>+
>+ return qemuProcessPrepareDomain(dconn, driver, vm,
>+ VIR_QEMU_PROCESS_START_AUTODESTROY);
>+}
>+
>+static int
> qemuMigrationPrepareAny(virQEMUDriverPtr driver,
> virConnectPtr dconn,
> const char *cookiein,
>@@ -3546,7 +3600,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
> if (!(mig = qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen,
> QEMU_MIGRATION_COOKIE_LOCKSTATE |
> QEMU_MIGRATION_COOKIE_NBD |
>- QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG)))
>+ QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG |
>+ QEMU_MIGRATION_COOKIE_VIDEO_HEADS)))
> goto cleanup;
>
> if (STREQ_NULLABLE(protocol, "rdma") &&
>@@ -3590,8 +3645,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
> goto stopjob;
> dataFD[0] = -1; /* the FD is now owned by incoming */
>
>- if (qemuProcessPrepareDomain(dconn, driver, vm,
>- VIR_QEMU_PROCESS_START_AUTODESTROY) < 0)
>+ if (qemuMigratePrepareDomain(dconn, driver, vm, mig) < 0)
> goto stopjob;
>
> if (qemuProcessPrepareHost(driver, vm, !!incoming) < 0)
>diff --git a/tests/qemuhotplugtestdata/qemuhotplug-agent-nopath.xml b/tests/qemuhotplugtestdata/qemuhotplug-agent-nopath.xml
>new file mode 100644
>index 000000000000..f0e90dea3cc2
>--- /dev/null
>+++ b/tests/qemuhotplugtestdata/qemuhotplug-agent-nopath.xml
>@@ -0,0 +1,5 @@
>+ <channel type='unix'>
>+ <source mode='bind'/>
>+ <target type='virtio' name='org.qemu.guest_agent.0'/>
>+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
>+ </channel>
>diff --git a/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+agent-nopath.xml b/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+agent-nopath.xml
>new file mode 100644
>index 000000000000..cf1fdf3b887b
>--- /dev/null
>+++ b/tests/qemuhotplugtestdata/qemuhotplug-hotplug-base+agent-nopath.xml
>@@ -0,0 +1,58 @@
>+<domain type='kvm' id='7'>
>+ <name>hotplug</name>
>+ <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
>+ <memory unit='KiB'>4194304</memory>
>+ <currentMemory unit='KiB'>4194304</currentMemory>
>+ <vcpu placement='static'>4</vcpu>
>+ <os>
>+ <type arch='x86_64' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <features>
>+ <acpi/>
>+ <apic/>
>+ <pae/>
>+ </features>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>restart</on_crash>
>+ <devices>
>+ <emulator>/usr/libexec/qemu-kvm</emulator>
>+ <controller type='usb' index='0'>
>+ <alias name='usb'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>+ </controller>
>+ <controller type='ide' index='0'>
>+ <alias name='ide'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>+ </controller>
>+ <controller type='scsi' index='0' model='virtio-scsi'>
>+ <alias name='scsi0'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>+ </controller>
>+ <controller type='pci' index='0' model='pci-root'>
>+ <alias name='pci'/>
>+ </controller>
>+ <controller type='virtio-serial' index='0'>
>+ <alias name='virtio-serial0'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
>+ </controller>
>+ <channel type='unix'>
>+ <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain--1-hotplug/org.qemu.guest_agent.0'/>
>+ <target type='virtio' name='org.qemu.guest_agent.0'/>
>+ <alias name='channel0'/>
>+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
>+ </channel>
>+ <input type='mouse' bus='ps2'>
>+ <alias name='input0'/>
>+ </input>
>+ <input type='keyboard' bus='ps2'>
>+ <alias name='input1'/>
>+ </input>
>+ <memballoon model='none'>
>+ <alias name='balloon0'/>
>+ </memballoon>
>+ </devices>
>+ <seclabel type='none' model='none'/>
>+</domain>
>diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args
>new file mode 100644
>index 000000000000..a939177088f9
>--- /dev/null
>+++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.args
>@@ -0,0 +1,28 @@
>+LC_ALL=C \
>+PATH=/bin \
>+HOME=/home/test \
>+USER=test \
>+LOGNAME=test \
>+QEMU_AUDIO_DRV=none \
>+/usr/bin/qemu \
>+-name QEMUGuest1 \
>+-S \
>+-M pc \
>+-m 214 \
>+-smp 1 \
>+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>+-nographic \
>+-nodefaults \
>+-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
>+-no-acpi \
>+-boot c \
>+-usb \
>+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
>+-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
>+-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,max_outputs=1,\
>+bus=pci.0,addr=0x2 \
>+-device qxl,id=video1,ram_size=67108864,vram_size=33554432,max_outputs=3,\
>+bus=pci.0,addr=0x4 \
>+-device qxl,id=video2,ram_size=67108864,vram_size=67108864,max_outputs=7,\
>+bus=pci.0,addr=0x5 \
>+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
>diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.xml b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.xml
>new file mode 100644
>index 000000000000..45d08745e652
>--- /dev/null
>+++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-heads.xml
>@@ -0,0 +1,47 @@
>+<domain type='qemu'>
>+ <name>QEMUGuest1</name>
>+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>+ <memory unit='KiB'>219136</memory>
>+ <currentMemory unit='KiB'>219136</currentMemory>
>+ <vcpu placement='static'>1</vcpu>
>+ <os>
>+ <type arch='i686' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>destroy</on_crash>
>+ <devices>
>+ <emulator>/usr/bin/qemu</emulator>
>+ <disk type='block' device='disk'>
>+ <source dev='/dev/HostVG/QEMUGuest1'/>
>+ <target dev='hda' bus='ide'/>
>+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>+ </disk>
>+ <controller type='usb' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>+ </controller>
>+ <controller type='ide' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>+ </controller>
>+ <controller type='pci' index='0' model='pci-root'/>
>+ <input type='mouse' bus='ps2'/>
>+ <input type='keyboard' bus='ps2'/>
>+ <video>
>+ <model type='qxl' ram='65536' vram='32768' vgamem='8192' heads='3'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
>+ </video>
>+ <video>
>+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='7'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
>+ </video>
>+ <video>
>+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='1' primary='yes'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>+ </video>
>+ <memballoon model='virtio'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>+ </memballoon>
>+ </devices>
>+</domain>
>diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args
>new file mode 100644
>index 000000000000..c609d487e181
>--- /dev/null
>+++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.args
>@@ -0,0 +1,24 @@
>+LC_ALL=C \
>+PATH=/bin \
>+HOME=/home/test \
>+USER=test \
>+LOGNAME=test \
>+QEMU_AUDIO_DRV=none \
>+/usr/bin/qemu \
>+-name QEMUGuest1 \
>+-S \
>+-M pc \
>+-m 214 \
>+-smp 1 \
>+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>+-nographic \
>+-nodefaults \
>+-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
>+-no-acpi \
>+-boot c \
>+-usb \
>+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
>+-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
>+-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,max_outputs=1,\
>+bus=pci.0,addr=0x2 \
>+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
>diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.xml b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.xml
>new file mode 100644
>index 000000000000..de003be53707
>--- /dev/null
>+++ b/tests/qemuxml2argvdata/qemuxml2argv-video-qxl-noheads.xml
>@@ -0,0 +1,39 @@
>+<domain type='qemu'>
>+ <name>QEMUGuest1</name>
>+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>+ <memory unit='KiB'>219136</memory>
>+ <currentMemory unit='KiB'>219136</currentMemory>
>+ <vcpu placement='static'>1</vcpu>
>+ <os>
>+ <type arch='i686' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>destroy</on_crash>
>+ <devices>
>+ <emulator>/usr/bin/qemu</emulator>
>+ <disk type='block' device='disk'>
>+ <source dev='/dev/HostVG/QEMUGuest1'/>
>+ <target dev='hda' bus='ide'/>
>+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>+ </disk>
>+ <controller type='usb' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>+ </controller>
>+ <controller type='ide' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>+ </controller>
>+ <controller type='pci' index='0' model='pci-root'/>
>+ <input type='mouse' bus='ps2'/>
>+ <input type='keyboard' bus='ps2'/>
>+ <video>
>+ <model type='qxl' ram='65536' vram='65536' vgamem='8192'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>+ </video>
>+ <memballoon model='virtio'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>+ </memballoon>
>+ </devices>
>+</domain>
>diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
>index e9b8d6412f63..3fc8d2b93411 100644
>--- a/tests/qemuxml2argvtest.c
>+++ b/tests/qemuxml2argvtest.c
>@@ -1858,6 +1858,22 @@ mymain(void)
> DO_TEST("ppc64-usb-controller-legacy",
> QEMU_CAPS_PIIX3_USB_UHCI);
>
>+ DO_TEST("video-qxl-heads",
>+ QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
>+ QEMU_CAPS_VGA_QXL,
>+ QEMU_CAPS_DEVICE_QXL_VGA,
>+ QEMU_CAPS_DEVICE_QXL,
>+ QEMU_CAPS_QXL_MAX_OUTPUTS,
>+ QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
>+
>+ DO_TEST("video-qxl-noheads",
>+ QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
>+ QEMU_CAPS_VGA_QXL,
>+ QEMU_CAPS_DEVICE_QXL_VGA,
>+ QEMU_CAPS_DEVICE_QXL,
>+ QEMU_CAPS_QXL_MAX_OUTPUTS,
>+ QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
>+
> DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
> VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
> NONE);
>diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-heads.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-heads.xml
>new file mode 100644
>index 000000000000..e7b18ab2b2ab
>--- /dev/null
>+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-heads.xml
>@@ -0,0 +1,47 @@
>+<domain type='qemu'>
>+ <name>QEMUGuest1</name>
>+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>+ <memory unit='KiB'>219136</memory>
>+ <currentMemory unit='KiB'>219136</currentMemory>
>+ <vcpu placement='static'>1</vcpu>
>+ <os>
>+ <type arch='i686' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>destroy</on_crash>
>+ <devices>
>+ <emulator>/usr/bin/qemu</emulator>
>+ <disk type='block' device='disk'>
>+ <source dev='/dev/HostVG/QEMUGuest1'/>
>+ <target dev='hda' bus='ide'/>
>+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>+ </disk>
>+ <controller type='usb' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>+ </controller>
>+ <controller type='ide' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>+ </controller>
>+ <controller type='pci' index='0' model='pci-root'/>
>+ <input type='mouse' bus='ps2'/>
>+ <input type='keyboard' bus='ps2'/>
>+ <video>
>+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='1' primary='yes'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>+ </video>
>+ <video>
>+ <model type='qxl' ram='65536' vram='32768' vgamem='8192' heads='3'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
>+ </video>
>+ <video>
>+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='7'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
>+ </video>
>+ <memballoon model='virtio'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>+ </memballoon>
>+ </devices>
>+</domain>
>diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-noheads.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-noheads.xml
>new file mode 100644
>index 000000000000..ee22e30ad026
>--- /dev/null
>+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-video-qxl-noheads.xml
>@@ -0,0 +1,39 @@
>+<domain type='qemu'>
>+ <name>QEMUGuest1</name>
>+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>+ <memory unit='KiB'>219136</memory>
>+ <currentMemory unit='KiB'>219136</currentMemory>
>+ <vcpu placement='static'>1</vcpu>
>+ <os>
>+ <type arch='i686' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>destroy</on_crash>
>+ <devices>
>+ <emulator>/usr/bin/qemu</emulator>
>+ <disk type='block' device='disk'>
>+ <source dev='/dev/HostVG/QEMUGuest1'/>
>+ <target dev='hda' bus='ide'/>
>+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>+ </disk>
>+ <controller type='usb' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>+ </controller>
>+ <controller type='ide' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>+ </controller>
>+ <controller type='pci' index='0' model='pci-root'/>
>+ <input type='mouse' bus='ps2'/>
>+ <input type='keyboard' bus='ps2'/>
>+ <video>
>+ <model type='qxl' ram='65536' vram='65536' vgamem='8192' heads='1' primary='yes'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>+ </video>
>+ <memballoon model='virtio'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>+ </memballoon>
>+ </devices>
>+</domain>
>diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
>index 07356777b1c2..6f5fb1316d6d 100644
>--- a/tests/qemuxml2xmltest.c
>+++ b/tests/qemuxml2xmltest.c
>@@ -761,6 +761,9 @@ mymain(void)
> DO_TEST("virtio-input");
> DO_TEST("virtio-input-passthrough");
>
>+ DO_TEST("video-qxl-heads");
>+ DO_TEST("video-qxl-noheads");
>+
> qemuTestDriverFree(&driver);
>
> return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
>--
>2.8.0
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160330/21558f8d/attachment-0001.sig>
More information about the libvir-list
mailing list