]> xenbits.xensource.com Git - libvirt.git/commitdiff
fix kvm_pv_eoi with kvmclock
authorMartin Kletzander <mkletzan@redhat.com>
Mon, 8 Oct 2012 16:51:57 +0000 (18:51 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Mon, 8 Oct 2012 18:13:55 +0000 (20:13 +0200)
When both kvmclock and kvm_pv_eoi are configured (either disabled or
enabled) libvirt will generate invalid CPU specification due to the
fact that even though kvmclock causes the CPU to be specified, it
doesn't set have_cpu flag to true (and the new kvm_pv_eoi as well).
This patch fixes the issue and adds a test exactly for that to show
that it is fixed correctly (and also to keep it that way in the future
of course).

src/qemu/qemu_command.c
tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args [new file with mode: 0644]
tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.xml [new file with mode: 0644]
tests/qemuxml2argvtest.c

index 20730a90eb21f5d005a43b171ec3eef063117cb6..09f412e93d08587b76e48c5464cffbe8847fda16 100644 (file)
@@ -4210,6 +4210,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
             virBufferAsprintf(&buf, "%s,%ckvmclock",
                               have_cpu ? "" : default_model,
                               sign);
+            have_cpu = true;
             break;
         }
     }
@@ -4224,6 +4225,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
         virBufferAsprintf(&buf, "%s,%ckvm_pv_eoi",
                           have_cpu ? "" : default_model,
                           sign);
+        have_cpu = true;
     }
 
     if (virBufferError(&buf))
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args b/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.args
new file mode 100644 (file)
index 0000000..f7ade0a
--- /dev/null
@@ -0,0 +1,4 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
+-cpu qemu32,-kvmclock,-kvm_pv_eoi -m 214 -smp 6 -nographic -monitor \
+unix:/tmp/test-monitor,server,nowait -boot n -net none -serial \
+none -parallel none -usb
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.xml b/tests/qemuxml2argvdata/qemuxml2argv-kvmclock+eoi-disabled.xml
new file mode 100644 (file)
index 0000000..a79b09f
--- /dev/null
@@ -0,0 +1,27 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219100</memory>
+  <currentMemory unit='KiB'>219100</currentMemory>
+  <vcpu placement='static'>6</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='network'/>
+  </os>
+  <features>
+    <acpi/>
+    <apic eoi='off'/>
+    <pae/>
+  </features>
+  <clock offset='utc'>
+    <timer name='kvmclock' present='no'/>
+    </clock>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu</emulator>
+    <controller type='usb' index='0'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
index 0757e37be44db0ec1fcf06694affa08180364217..7732ae1d360fff71626eb5ba42d5f9aacc123bba 100644 (file)
@@ -407,6 +407,7 @@ mymain(void)
     DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
     DO_TEST("eoi-disabled", NONE);
     DO_TEST("eoi-enabled", NONE);
+    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
 
     DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
     DO_TEST("disk-cdrom", NONE);