[libvirt] (how much) support for kqemu domain
John Lumby
johnlumby at hotmail.com
Mon Jun 6 20:19:54 UTC 2011
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)
>>
>>
More information about the libvir-list
mailing list