[libvirt] (how much) support for kqemu domain
Eric Blake
eblake at redhat.com
Mon Jun 6 17:49:22 UTC 2011
[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)
>
>
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110606/e86dfeb6/attachment-0001.sig>
More information about the libvir-list
mailing list