<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
 > Date: Wed, 14 Jul 2010 16:21:47 +0100<br>> From: 
berrange@redhat.com<br>> To: johnlumby@hotmail.com<br>> CC: 
libvir-list@redhat.com<br>> Subject: Re: [libvirt] (how much) support
 for kqemu domain<br>> <br>> On Wed, Jul 14, 2010 at 11:11:48AM 
-0400, John Lumby wrote:<br>> > <br>> > I am wondering about
 the extent to which "old" qemu-0.11.1<br>> > and kqemu-1.4.0 are 
supported by virt-manager.<br>> > <br>> > <br>> <br>> It looks for presence of /dev/kqemu and a -no-kqemu arg in<br>>
 QEMU's help. I had no idea that arg had been changed to<br>> be 
-enable-kqemu.  Patches welcome to support that new<br>> arg. See 
qemudBuildCommandLine() & qemudComputeCmdFlags()<br>> methods in 
src/qemu/qemu_conf.c<br>> <br>> Daniel<br>><br>Thanks Daniel for the pointer to the source code .    Interesting "interface".<br><br>Here's my patch  -  works for me but tested only on my own qemu-1.11.1<br><br>--- src/qemu/qemu_conf.h.orig    2010-04-23 11:52:47.000000000 -0400<br>+++ src/qemu/qemu_conf.h    2010-07-15 15:27:44.000000000 -0400<br>@@ -88,6 +88,13 @@ enum qemud_cmd_flags {<br>     QEMUD_CMD_FLAG_NO_HPET       = (1LL << 33), /* -no-hpet flag is supported */<br>     QEMUD_CMD_FLAG_NO_KVM_PIT    = (1LL << 34), /* -no-kvm-pit-reinjection supported */<br>     QEMUD_CMD_FLAG_TDF           = (1LL << 35), /* -tdf flag (user-mode pit catchup) */<br>+<br>+    /* features added in qemu-0.11.x   jel  */<br>+    QEMUD_CMD_FLAG_KQEMU_EXPLICIT = (1LL << 36) /* KQEMU is available but must be explicitly requested<br>+                                                ** using options  -enable-kqemu -kernel-kqemu<br>+                                                ** note we either specify both or neither<br>+                                                **      since qemu domain is always system mode (I think?) jel <br>+                                                */<br> };<br> <br> /* Main driver state */<br>--- src/qemu/qemu_conf.c.orig    2010-04-30 08:46:09.000000000 -0400<br>+++ src/qemu/qemu_conf.c    2010-07-15 21:15:12.000000000 -0400<br>@@ -1130,6 +1130,14 @@ static unsigned long long qemudComputeCm<br> <br>     if (strstr(help, "-no-kqemu"))<br>         flags |= QEMUD_CMD_FLAG_KQEMU;<br>+    /*  here we check for qemu version of *exactly* 0.11.x,<br>+    **  which requires different options to select kqemu      jel  */<br>+    if (     ( version >= 11000 ) && ( version <= 11999 )<br>+     &&  (      ( strstr(help, "-enable-kqemu") )<br>+                 || ( strstr(help, "-kernel-kqemu") )<br>+             )<br>+       )<br>+      flags |= ( QEMUD_CMD_FLAG_KQEMU | QEMUD_CMD_FLAG_KQEMU_EXPLICIT );<br>     if (strstr(help, "-no-kvm"))<br>         flags |= QEMUD_CMD_FLAG_KVM;<br>     if (strstr(help, "-enable-kvm"))<br>@@ -3431,7 +3439,10 @@ int qemudBuildCommandLine(virConnectPtr <br>     char memory[50];<br>     char boot[VIR_DOMAIN_BOOT_LAST];<br>     struct utsname ut;<br>-    int disableKQEMU = 0;<br>+    int disableKQEMU = 0;           /*   0 means don't enable or disable<br>+                                    **  +1 means do explicitly disable<br>+                                    **  -1 means do explicitly enable (double-negative)<br>+                                    */<br>     int disableKVM = 0;<br>     int enableKVM = 0;<br>     int qargc = 0, qarga = 0;<br>@@ -3484,10 +3495,24 @@ int qemudBuildCommandLine(virConnectPtr <br>     /* Need to explicitly disable KQEMU if<br>      * 1. Guest domain is 'qemu'<br>      * 2. The qemu binary has the -no-kqemu flag<br>+     *<br>+     * and need to explicitly enable KQEMU if<br>+     * 1. Guest domain is 'kqemu'<br>+     * 2. The qemu binary has the -enable-kqemu flag<br>      */<br>-    if ((qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU) &&<br>-        def->virtType == VIR_DOMAIN_VIRT_QEMU)<br>-        disableKQEMU = 1;<br>+<br>+    if (qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU) {<br>+      /*  we need to decide whether to explictly enable,<br>+      ** explicitly disable, or neither (default) */<br>+      if (def->virtType == VIR_DOMAIN_VIRT_QEMU) {<br>+            disableKQEMU = 1;<br>+      } else<br>+      if (    ( def->virtType == VIR_DOMAIN_VIRT_KQEMU )<br>+           && ( qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU_EXPLICIT )<br>+         ) {<br>+            disableKQEMU = -1;    /*  explicitly enable */<br>+      }<br>+    }<br> <br>     /* Need to explicitly disable KVM if<br>      * 1. Guest domain is 'qemu'<br>@@ -3617,8 +3642,12 @@ int qemudBuildCommandLine(virConnectPtr <br>         VIR_FREE(cpu);<br>     }<br> <br>-    if (disableKQEMU)<br>+    if (disableKQEMU == 1)<br>         ADD_ARG_LIT("-no-kqemu");<br>+    else if (disableKQEMU == -1) {<br>+        ADD_ARG_LIT("-enable-kqemu");<br>+        ADD_ARG_LIT("-kernel-kqemu");<br>+    }<br>     if (disableKVM)<br>         ADD_ARG_LIT("-no-kvm");<br>     if (enableKVM)<br><br><br><br>John Lumby<br><br>                                        <a href="http://go.microsoft.com/?linkid=9734379"><br></a>                                          <br /><hr /> <a href='' target='_new'></a></body>
</html>