Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > ebe084c140192657f9094e135a84202c > files > 114

libvirt-0.8.2-29.el5.src.rpm

From ac506405c92f44be593da54c533ceef3d0c8b7a4 Mon Sep 17 00:00:00 2001
Message-Id: <ac506405c92f44be593da54c533ceef3d0c8b7a4.1291824465.git.jdenemar@redhat.com>
From: Jiri Denemark <jdenemar@redhat.com>
Date: Wed, 8 Dec 2010 14:45:00 +0100
Subject: [PATCH] qemu: Use -vga none only if it is supported

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=661152

Commit febc591683cf51e4551f8bcf3ce279a776056e1c introduced -vga none in
case no video card is included in domain XML. However, old qemu
versions do not support this and such domain cannot be successfully
started.

(backported from 2cfb10790573a5ac70b1c9f05bdd806be83d67ec)
---
 src/qemu/qemu_conf.c                               |   12 ++++++++-
 src/qemu/qemu_conf.h                               |    1 +
 tests/qemuhelptest.c                               |   18 ++++++++++-----
 .../qemuxml2argvdata/qemuxml2argv-nographics.args  |    1 +
 tests/qemuxml2argvdata/qemuxml2argv-nographics.xml |   24 ++++++++++++++++++++
 tests/qemuxml2argvtest.c                           |    4 ++-
 6 files changed, 51 insertions(+), 9 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-nographics.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-nographics.xml

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index e2ab654..df89866 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1146,6 +1146,7 @@ static unsigned long long qemudComputeCmdFlags(const char *help,
                                                unsigned int kvm_version)
 {
     unsigned long long flags = 0;
+    const char *p;
 
     if (strstr(help, "-no-kqemu"))
         flags |= QEMUD_CMD_FLAG_KQEMU;
@@ -1172,8 +1173,14 @@ static unsigned long long qemudComputeCmdFlags(const char *help,
         if (strstr(help, "readonly="))
             flags |= QEMUD_CMD_FLAG_DRIVE_READONLY;
     }
-    if (strstr(help, "-vga") && !strstr(help, "-std-vga"))
+    if ((p = strstr(help, "-vga")) && !strstr(help, "-std-vga")) {
+        const char *nl = strstr(p, "\n");
+
         flags |= QEMUD_CMD_FLAG_VGA;
+
+        if ((p = strstr(p, "|none")) && p < nl)
+            flags |= QEMUD_CMD_FLAG_VGA_NONE;
+    }
     if (strstr(help, "boot=on"))
         flags |= QEMUD_CMD_FLAG_DRIVE_BOOT;
     if (strstr(help, "serial=s"))
@@ -4623,7 +4630,8 @@ int qemudBuildCommandLine(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) &&
+            (qemuCmdFlags & QEMUD_CMD_FLAG_VGA_NONE)) {
             ADD_ARG_LIT("-vga");
             ADD_ARG_LIT("none");
         }
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 462206f..92cb63d 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -92,6 +92,7 @@ enum qemud_cmd_flags {
     QEMUD_CMD_FLAG_PCI_CONFIGFD  = (1LL << 36), /* pci-assign.configfd */
     QEMUD_CMD_FLAG_NODEFCONFIG   = (1LL << 37), /* -nodefconfig */
     QEMUD_CMD_FLAG_DRIVE_READONLY    = (1LL << 43), /* -drive readonly=on|off */
+    QEMUD_CMD_FLAG_VGA_NONE      = (1LL << 47), /* The 'none' arg for '-vga' */
 };
 
 /* Main driver state */
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 4e67264..373672a 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -171,7 +171,8 @@ mymain(int argc, char **argv)
             QEMUD_CMD_FLAG_ENABLE_KVM |
             QEMUD_CMD_FLAG_SDL |
             QEMUD_CMD_FLAG_RTC_TD_HACK |
-            QEMUD_CMD_FLAG_NO_HPET,
+            QEMUD_CMD_FLAG_NO_HPET |
+            QEMUD_CMD_FLAG_VGA_NONE,
             10005, 0,  0);
     DO_TEST("qemu-kvm-0.10.5",
             QEMUD_CMD_FLAG_VNC_COLON |
@@ -195,7 +196,8 @@ mymain(int argc, char **argv)
             QEMUD_CMD_FLAG_RTC_TD_HACK |
             QEMUD_CMD_FLAG_NO_HPET |
             QEMUD_CMD_FLAG_NO_KVM_PIT |
-            QEMUD_CMD_FLAG_TDF,
+            QEMUD_CMD_FLAG_TDF |
+            QEMUD_CMD_FLAG_VGA_NONE,
             10005, 1,  0);
     DO_TEST("kvm-86",
             QEMUD_CMD_FLAG_VNC_COLON |
@@ -218,7 +220,8 @@ mymain(int argc, char **argv)
             QEMUD_CMD_FLAG_RTC_TD_HACK |
             QEMUD_CMD_FLAG_NO_HPET |
             QEMUD_CMD_FLAG_NO_KVM_PIT |
-            QEMUD_CMD_FLAG_TDF,
+            QEMUD_CMD_FLAG_TDF |
+            QEMUD_CMD_FLAG_VGA_NONE,
             10050, 1,  0);
     DO_TEST("qemu-kvm-0.11.0-rc2",
             QEMUD_CMD_FLAG_VNC_COLON |
@@ -244,7 +247,8 @@ mymain(int argc, char **argv)
             QEMUD_CMD_FLAG_RTC_TD_HACK |
             QEMUD_CMD_FLAG_NO_HPET |
             QEMUD_CMD_FLAG_NO_KVM_PIT |
-            QEMUD_CMD_FLAG_TDF,
+            QEMUD_CMD_FLAG_TDF |
+            QEMUD_CMD_FLAG_VGA_NONE,
             10092, 1,  0);
     DO_TEST("qemu-0.12.1",
             QEMUD_CMD_FLAG_VNC_COLON |
@@ -269,7 +273,8 @@ mymain(int argc, char **argv)
             QEMUD_CMD_FLAG_DEVICE |
             QEMUD_CMD_FLAG_SMP_TOPOLOGY |
             QEMUD_CMD_FLAG_RTC |
-            QEMUD_CMD_FLAG_NO_HPET,
+            QEMUD_CMD_FLAG_NO_HPET |
+            QEMUD_CMD_FLAG_VGA_NONE,
             12001, 0,  0);
     DO_TEST("qemu-kvm-0.12.3",
             QEMUD_CMD_FLAG_VNC_COLON |
@@ -300,7 +305,8 @@ mymain(int argc, char **argv)
             QEMUD_CMD_FLAG_VNET_HOST |
             QEMUD_CMD_FLAG_NO_HPET |
             QEMUD_CMD_FLAG_NO_KVM_PIT |
-            QEMUD_CMD_FLAG_TDF,
+            QEMUD_CMD_FLAG_TDF |
+            QEMUD_CMD_FLAG_VGA_NONE,
             12003, 1,  0);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-nographics.args b/tests/qemuxml2argvdata/qemuxml2argv-nographics.args
new file mode 100644
index 0000000..0d3ef6f
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-nographics.args
@@ -0,0 +1 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-nographics.xml b/tests/qemuxml2argvdata/qemuxml2argv-nographics.xml
new file mode 100644
index 0000000..533ea59
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-nographics.xml
@@ -0,0 +1,24 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory>219200</memory>
+  <currentMemory>219200</currentMemory>
+  <vcpu>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' unit='0'/>
+    </disk>
+    <controller type='ide' index='0'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index cc85d06..e312db8 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -292,7 +292,9 @@ mymain(int argc, char **argv)
 
     DO_TEST("graphics-sdl", 0);
     DO_TEST("graphics-sdl-fullscreen", 0);
-    DO_TEST("nographics-vga", QEMUD_CMD_FLAG_VGA);
+    DO_TEST("nographics", QEMUD_CMD_FLAG_VGA);
+    DO_TEST("nographics-vga", QEMUD_CMD_FLAG_VGA |
+                              QEMUD_CMD_FLAG_VGA_NONE);
     DO_TEST("input-usbmouse", 0);
     DO_TEST("input-usbtablet", 0);
     DO_TEST("input-xen", QEMUD_CMD_FLAG_DOMID);
-- 
1.7.3.3