[Libguestfs] [PATCH v2 3/9] Require QEMU >= 1.0.

Richard W.M. Jones rjones at redhat.com
Tue Jun 12 21:15:48 UTC 2012


From: "Richard W.M. Jones" <rjones at redhat.com>

QEMU 1.0 was released at the end of 2011.

Remove all the cruft about detecting broken -machine type which
was only required for QEMU 0.15.

This also reverts commit 30ecbf3ec2ada68f7e125a180553e31b069033b7.
Even on ARM you can pass -machine accel=kvm:tcg and qemu does the
right thing, so I'm not sure why we wanted to disable that.
---
 README       |    2 +-
 configure.ac |   68 ++++++++++++++++++----------------------------------------
 src/launch.c |   27 +++++------------------
 3 files changed, 27 insertions(+), 70 deletions(-)

diff --git a/README b/README
index 2b133c6..4dd2075 100644
--- a/README
+++ b/README
@@ -46,7 +46,7 @@ For basic functionality and the C tools:
 - look at appliance/packagelist.in and install as many of the packages
   that apply to your distro as possible
 
-- recent QEMU >= 0.13 (0.14 or later is better) with virtio-serial support
+- QEMU >= 1.0.
 
 - kernel >= 2.6.34 with virtio-serial support enabled.
 
diff --git a/configure.ac b/configure.ac
index 69da9a5..ca0f9f1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -568,55 +568,29 @@ working.
 ])
     fi
 
-    AS_IF([test "x$QEMU_OPTIONS" = "x"],[
-        dnl qemu 0.15 was released with broken support for '-machine',
-        dnl requiring you to add the machine type: '-machine pc,[...]'.
-        dnl The problem is that 'pc' is only applicable for PC-like
-        dnl hardware, so we cannot do this as a general solution.  Since
-        dnl qemu 0.15, this problem has been fixed so now the default
-        dnl machine type is chosen (qemu commit 2645c6dcaf6ea2a51a).
-        dnl
-        dnl We need to work out if this qemu is the broken version, so we
-        dnl can add 'pc' just for this broken version.
-        dnl
-        dnl Note that old qemu didn't support the '-machine' option at all.
-        dnl
-        dnl We use the -kernel option for testing this, because this option
-        dnl is processed very late, after qemu has set up the machine.
-        AC_MSG_CHECKING([for broken '-machine accel=tcg' option in $QEMU])
-        LC_ALL=C $QEMU -nographic -machine accel=tcg -kernel /NO_SUCH_FILE \
-             > config1.tmp 2>&1
-        LC_ALL=C $QEMU -nographic -machine pc,accel=tcg -kernel /NO_SUCH_FILE \
-             > config2.tmp 2>&1
-        if cmp -s config1.tmp config2.tmp; then
-            AC_MSG_RESULT([no])
-        else
-            AC_MSG_RESULT([yes])
-            AC_DEFINE([QEMU_MACHINE_TYPE_IS_BROKEN],[1],[qemu -machine accel=tcg option is broken (in qemu 0.15 only)])
-        fi
-        rm config1.tmp config2.tmp
-
-        dnl See if the '-machine [pc,]accel=tcg' option is required in
-        dnl order to run the virtio-serial test below.  This happens when
-        dnl we run qemu-kvm inside a VM without forcing TCG:
-        dnl
-        dnl   Could not access KVM kernel module: No such file or directory
-        dnl   failed to initialize KVM: No such file or directory
-        dnl   No accelerator found!
-        AC_MSG_CHECKING([if -machine @<:@pc,@:>@accel=tcg option is required to test virtio-serial feature])
-        if $QEMU -nographic -device \? >/dev/null 2>&1; then
-            :
-        elif $QEMU -machine accel=tcg -nographic -device \? >/dev/null 2>&1; then
-            QEMU_OPTIONS_FOR_TEST="-machine accel=tcg"
-        elif $QEMU -machine pc,accel=tcg -nographic -device \? >/dev/null 2>&1; then
-            QEMU_OPTIONS_FOR_TEST="-machine pc,accel=tcg"
-        # else nothing ... it'll fail below.
-        fi
-        AC_MSG_RESULT([$QEMU_OPTIONS_FOR_TEST])
-    ])
+    AC_MSG_CHECKING([that $QEMU -version works])
+    if $QEMU -version >&AS_MESSAGE_LOG_FD 2>&1; then
+        AC_MSG_RESULT([yes])
+    else
+        AC_MSG_RESULT([no])
+        AC_MSG_FAILURE(
+[$QEMU -version: command failed.
+
+This could be a very old version of qemu, or qemu might not be
+working.
+])
+    fi
+
+    AC_MSG_CHECKING([for $QEMU version >= 1])
+    if $QEMU -version | grep -sq 'version @<:@1-@:>@'; then
+        AC_MSG_RESULT([yes])
+    else
+        AC_MSG_RESULT([no])
+        AC_MSG_FAILURE([$QEMU version must be >= 1.0.])
+    fi
 
     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
-    if $QEMU $QEMU_OPTIONS $QEMU_OPTIONS_FOR_TEST -nographic -device \? 2>&1 | grep -sq virtio-serial; then
+    if $QEMU $QEMU_OPTIONS -machine accel=kvm:tcg -device \? 2>&1 | grep -sq virtio-serial; then
         AC_MSG_RESULT([yes])
     else
         AC_MSG_RESULT([no])
diff --git a/src/launch.c b/src/launch.c
index 7bc913b..e175dd9 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -678,29 +678,13 @@ launch_appliance (guestfs_h *g)
       add_cmdline_shell_unquoted (g, QEMU_OPTIONS);
     }
 
-    /* The #if on the next line should really be "architectures for
-     * which KVM is commonly available.
-     */
-#if defined(__i386__) || defined(__x86_64__)
     /* The qemu -machine option (added 2010-12) is a bit more sane
      * since it falls back through various different acceleration
      * modes, so try that first (thanks Markus Armbruster).
      */
     if (qemu_supports (g, "-machine")) {
       add_cmdline (g, "-machine");
-#if QEMU_MACHINE_TYPE_IS_BROKEN
-      /* Workaround for qemu 0.15: We have to add the '[type=]pc'
-       * since there is no default.  This is not a permanent solution
-       * because this only works on PC-like hardware.  Other platforms
-       * like ppc would need a different machine type.
-       *
-       * This bug is fixed in qemu commit 2645c6dcaf6ea2a51a, and was
-       * not a problem in qemu < 0.15.
-       */
-      add_cmdline (g, "pc,accel=kvm:tcg");
-#else
       add_cmdline (g, "accel=kvm:tcg");
-#endif
     } else {
       /* qemu sometimes needs this option to enable hardware
        * virtualization, but some versions of 'qemu-kvm' will use KVM
@@ -718,7 +702,6 @@ launch_appliance (guestfs_h *g)
           is_openable (g, "/dev/kvm", O_RDWR|O_CLOEXEC))
         add_cmdline (g, "-enable-kvm");
     }
-#endif /* i386 or x86-64 */
 
     if (g->smp > 1) {
       snprintf (buf, sizeof buf, "%d", g->smp);
@@ -1339,11 +1322,11 @@ test_qemu (guestfs_h *g)
 
   snprintf (cmd, sizeof cmd, "LC_ALL=C '%s' -nographic -help", g->qemu);
 
-  /* qemu -help should always work (qemu -version OTOH wasn't
-   * supported by qemu 0.9).  If this command doesn't work then it
-   * probably indicates that the qemu binary is missing.
+  /* If this command doesn't work then it probably indicates that the
+   * qemu binary is missing.
    */
   if (test_qemu_cmd (g, cmd, &g->qemu_help) == -1) {
+  qemu_error:
     error (g, _("command failed: %s\n\nIf qemu is located on a non-standard path, try setting the LIBGUESTFS_QEMU\nenvironment variable.  There may also be errors printed above."),
            cmd);
     return -1;
@@ -1352,8 +1335,8 @@ test_qemu (guestfs_h *g)
   snprintf (cmd, sizeof cmd, "LC_ALL=C '%s' -nographic -version 2>/dev/null",
             g->qemu);
 
-  /* Intentionally ignore errors from qemu -version. */
-  ignore_value (test_qemu_cmd (g, cmd, &g->qemu_version));
+  if (test_qemu_cmd (g, cmd, &g->qemu_version) == -1)
+    goto qemu_error;
 
   return 0;
 }
-- 
1.7.10.1




More information about the Libguestfs mailing list