Hello Eric.
I am fairly sure I remember *someone* saying they had integrated a
modified version of the fix into libvirt but can't find any email saying
so now. Maybe Daniel? On a very quick look at 0.9.2 source,
it *appears* to have been implemented in qemu_command.c (but I didn't
verify running it).
Cheers, John Lumby
On 06/06/11 13:49, Eric Blake wrote:
[digging through old mail]
On 07/17/2010 10:58 AM, John Lumby wrote:
I am wondering about
the extent to which "old" qemu-0.11.1
and kqemu-1.4.0 are
supported by virt-manager.
It looks for presence of /dev/kqemu and a -no-kqemu arg in
QEMU's help. I had no idea that arg had been changed to
be
-enable-kqemu. Patches welcome to support that new
arg. See
qemudBuildCommandLine()& qemudComputeCmdFlags()
methods in
src/qemu/qemu_conf.c
Daniel
Thanks Daniel for the pointer to the source code . Interesting "interface".
Here's my patch - works for me but tested only on my own qemu-1.11.1
I never saw a reply to this. Is this a patch that should be revived and
rebased onto the latest git?
--- src/qemu/qemu_conf.h.orig 2010-04-23 11:52:47.000000000 -0400
+++ src/qemu/qemu_conf.h 2010-07-15 15:27:44.000000000 -0400
@@ -88,6 +88,13 @@ enum qemud_cmd_flags {
QEMUD_CMD_FLAG_NO_HPET = (1LL<< 33), /* -no-hpet flag is supported
*/
QEMUD_CMD_FLAG_NO_KVM_PIT = (1LL<< 34), /* -no-kvm-pit-reinjection
supported */
QEMUD_CMD_FLAG_TDF = (1LL<< 35), /* -tdf flag (user-mode pit
catchup) */
+
+ /* features added in qemu-0.11.x jel */
+ QEMUD_CMD_FLAG_KQEMU_EXPLICIT = (1LL<< 36) /* KQEMU is available but must
be explicitly requested
+ ** using options
-enable-kqemu -kernel-kqemu
+ ** note we either specify both
or neither
+ ** since qemu domain is
always system mode (I think?) jel
+ */
};
/* Main driver state */
--- src/qemu/qemu_conf.c.orig 2010-04-30 08:46:09.000000000 -0400
+++ src/qemu/qemu_conf.c 2010-07-15 21:15:12.000000000 -0400
@@ -1130,6 +1130,14 @@ static unsigned long long qemudComputeCm
if (strstr(help, "-no-kqemu"))
flags |= QEMUD_CMD_FLAG_KQEMU;
+ /* here we check for qemu version of *exactly* 0.11.x,
+ ** which requires different options to select kqemu jel */
+ if ( ( version>= 11000 )&& ( version<= 11999 )
+&& ( ( strstr(help, "-enable-kqemu") )
+ || ( strstr(help, "-kernel-kqemu") )
+ )
+ )
+ flags |= ( QEMUD_CMD_FLAG_KQEMU | QEMUD_CMD_FLAG_KQEMU_EXPLICIT );
if (strstr(help, "-no-kvm"))
flags |= QEMUD_CMD_FLAG_KVM;
if (strstr(help, "-enable-kvm"))
@@ -3431,7 +3439,10 @@ int qemudBuildCommandLine(virConnectPtr
char memory[50];
char boot[VIR_DOMAIN_BOOT_LAST];
struct utsname ut;
- int disableKQEMU = 0;
+ int disableKQEMU = 0; /* 0 means don't enable or disable
+ ** +1 means do explicitly disable
+ ** -1 means do explicitly enable
(double-negative)
+ */
int disableKVM = 0;
int enableKVM = 0;
int qargc = 0, qarga = 0;
@@ -3484,10 +3495,24 @@ int qemudBuildCommandLine(virConnectPtr
/* Need to explicitly disable KQEMU if
* 1. Guest domain is 'qemu'
* 2. The qemu binary has the -no-kqemu flag
+ *
+ * and need to explicitly enable KQEMU if
+ * 1. Guest domain is 'kqemu'
+ * 2. The qemu binary has the -enable-kqemu flag
*/
- if ((qemuCmdFlags& QEMUD_CMD_FLAG_KQEMU)&&
- def->virtType == VIR_DOMAIN_VIRT_QEMU)
- disableKQEMU = 1;
+
+ if (qemuCmdFlags& QEMUD_CMD_FLAG_KQEMU) {
+ /* we need to decide whether to explictly enable,
+ ** explicitly disable, or neither (default) */
+ if (def->virtType == VIR_DOMAIN_VIRT_QEMU) {
+ disableKQEMU = 1;
+ } else
+ if ( ( def->virtType == VIR_DOMAIN_VIRT_KQEMU )
+&& ( qemuCmdFlags& QEMUD_CMD_FLAG_KQEMU_EXPLICIT )
+ ) {
+ disableKQEMU = -1; /* explicitly enable */
+ }
+ }
/* Need to explicitly disable KVM if
* 1. Guest domain is 'qemu'
@@ -3617,8 +3642,12 @@ int qemudBuildCommandLine(virConnectPtr
VIR_FREE(cpu);
}
- if (disableKQEMU)
+ if (disableKQEMU == 1)
ADD_ARG_LIT("-no-kqemu");
+ else if (disableKQEMU == -1) {
+ ADD_ARG_LIT("-enable-kqemu");
+ ADD_ARG_LIT("-kernel-kqemu");
+ }
if (disableKVM)
ADD_ARG_LIT("-no-kvm");
if (enableKVM)
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list