[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