psss / rpms / libguestfs

Forked from rpms/libguestfs 5 years ago
Clone
Blob Blame History Raw
diff -ur libguestfs-1.12.5.old/src/launch.c libguestfs-1.12.5/src/launch.c
--- libguestfs-1.12.5.old/src/launch.c	2011-08-28 09:19:27.000000000 +0100
+++ libguestfs-1.12.5/src/launch.c	2011-08-28 11:04:27.349272807 +0100
@@ -76,10 +76,10 @@
 static void print_qemu_command_line (guestfs_h *g, char **argv);
 static int connect_unix_socket (guestfs_h *g, const char *sock);
 static int qemu_supports (guestfs_h *g, const char *option);
-
-#if 0
 static int qemu_supports_re (guestfs_h *g, const pcre *option_regex);
 
+static pcre *re_machine_name;
+
 static void compile_regexps (void) __attribute__((constructor));
 static void free_regexps (void) __attribute__((destructor));
 
@@ -97,13 +97,15 @@
       abort ();                                                         \
     }                                                                   \
   } while (0)
+
+  COMPILE (re_machine_name, "-machine .*\\bname\\b", 0);
 }
 
 static void
 free_regexps (void)
 {
+  pcre_free (re_machine_name);
 }
-#endif
 
 /* Add a string to the current command line. */
 static void
@@ -517,14 +519,19 @@
     if (qemu_supports (g, "-nodefconfig"))
       add_cmdline (g, "-nodefconfig");
 
-    /* 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).
+    /* The qemu -machine option (added 2010-12) falls back through
+     * various different acceleration modes, so try that first (thanks
+     * Markus Armbruster).  However in qemu commit 9052ea6bf4962b13
+     * the syntax was changed, so we have to detect that.
      */
-    if (qemu_supports (g, "-machine")) {
+    if (qemu_supports_re (g, re_machine_name)) { /* after 2011-07-23 */
+      add_cmdline (g, "-machine");
+      add_cmdline (g, "pc,accel=kvm:tcg");
+    }
+    else if (qemu_supports (g, "-machine")) { /* after 2010-12 */
       add_cmdline (g, "-machine");
       add_cmdline (g, "accel=kvm:tcg");
-    } else {
+    } else {    /* no -machine option */
       /* qemu sometimes needs this option to enable hardware
        * virtualization, but some versions of 'qemu-kvm' will use KVM
        * regardless (even where this option appears in the help text).
@@ -1165,7 +1172,6 @@
   return strstr (g->qemu_help, option) != NULL;
 }
 
-#if 0
 /* As above but using a regex instead of a fixed string. */
 static int
 qemu_supports_re (guestfs_h *g, const pcre *option_regex)
@@ -1177,7 +1183,6 @@
 
   return match (g, g->qemu_help, option_regex);
 }
-#endif
 
 /* Check if a file can be opened. */
 static int