[libvirt] [PATCH 2/2 v1] qemu: Fix SW emulated machines

Martin Kletzander mkletzan at redhat.com
Sun Oct 28 12:55:23 UTC 2012


This patch fixes building a command-line for QEMU machines without KVM
acceleration and is based on following assumptions:

 - QEMU_CAPS_KVM flag means that QEMU is running KVM accelerated
   machines by default (without explicitely requesting that using a
   command-line option).  It is the closest to the true according to
   the code with the only exception being the comment next to the
   flag, so it's fixed in this patch as well.

 - QEMU_CAPS_ENABLE_KVM flag means that QEMU is, by default, running
   without KVM acceleration and in case we need KVM acceleration it
   needs to be explicitely instructed to do so.  This is partially
   true for the past (this option essentially means that QEMU
   recognizes the '-enable-kvm' option, even though it's almost the
   same).
---
 src/qemu/qemu_capabilities.c | 13 +++++++++----
 src/qemu/qemu_capabilities.h |  2 +-
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index fe462e9..aad366d 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2039,9 +2039,15 @@ qemuCapsProbeQMPKVMState(qemuCapsPtr caps,
     if (qemuMonitorGetKVMState(mon, &enabled, &present) < 0)
         return -1;

-    /* Youre right, this code does nothing, you must have checked out
-     * some weird commit.  Go back to your room and think about what
-     * you've done, young (wo)man. */
+    /* Until now, the QEMU_CAPS_KVM was set according to the QEMU
+     * reporting the recongnition of 'query-kvm' QMP command, but the
+     * flag means whether the KVM is enabled by default and should be
+     * disabled in case we want SW emulated machine, so let's fix that
+     * if it's true. */
+    if (!enabled) {
+        qemuCapsClear(caps, QEMU_CAPS_KVM);
+        qemuCapsSet(caps, QEMU_CAPS_ENABLE_KVM);
+    }

     return 0;
 }
@@ -2177,7 +2183,6 @@ qemuCapsInitQMPBasic(qemuCapsPtr caps)
     qemuCapsSet(caps, QEMU_CAPS_DRIVE_SERIAL);
     qemuCapsSet(caps, QEMU_CAPS_MIGRATE_QEMU_UNIX);
     qemuCapsSet(caps, QEMU_CAPS_CHARDEV);
-    qemuCapsSet(caps, QEMU_CAPS_ENABLE_KVM);
     qemuCapsSet(caps, QEMU_CAPS_MONITOR_JSON);
     qemuCapsSet(caps, QEMU_CAPS_BALLOON);
     qemuCapsSet(caps, QEMU_CAPS_DEVICE);
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 988dfdb..9c5fd0f 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -45,7 +45,7 @@ enum qemuCapsFlags {
     QEMU_CAPS_MIGRATE_QEMU_TCP   = 10, /* have qemu tcp migration */
     QEMU_CAPS_MIGRATE_QEMU_EXEC  = 11, /* have qemu exec migration */
     QEMU_CAPS_DRIVE_CACHE_V2     = 12, /* cache= flag wanting new v2 values */
-    QEMU_CAPS_KVM                = 13, /* Whether KVM is compiled in */
+    QEMU_CAPS_KVM                = 13, /* Whether KVM is enabled by default */
     QEMU_CAPS_DRIVE_FORMAT       = 14, /* Is -drive format= avail */
     QEMU_CAPS_VGA                = 15, /* Is -vga avail */

--
1.7.12.4




More information about the libvir-list mailing list