Simon Kagstrom wrote:
> (I've edited the patch comments to show the reasoning)
>
> At Tue, 14 Nov 2006 13:44:31 +0200,
> Avi Kivity wrote:
>   
>>     /* Initialize kvm */
>>     if (kvm_allowed) {
>>      if (kvm_qemu_init() < 0) {
>>          fprintf(stderr, "Could not initialize KVM\n");
>>          kvm_allowed = 0;
>>      }
>>     }
>>     /* Fall back to normal qemu if KVM fails */
>>     if (!kvm_allowed) {
>>      phys_ram_base = qemu_vmalloc(phys_ram_size);
>>      if (!phys_ram_base) {
>>          fprintf(stderr, "Could not allocate physical memory\n");
>>          exit(1);
>>      }
>>     }
>>
>> This bit is rather awkward, since it disabled kvm after it has been 
>> enabled.  It's a cleaner to never enable kvm_allowed in the first place 
>> (i.e. during argument parsing).
>>     
>
> OK. My reasoning was this: qemu with KVM defaults to use kvm and
> therefore tries to enable it (kvm_qemu_init), if it cannot be
> initialized, it will disable it again.
>   

Yes, but it leads to code duplication (there's a qemu_vmalloc() outside 
USE_KVM). Also, if some code prior to this depended on kvm_allowed, it 
would be invalidated.

Best to set kvm_allowed once you're sure it's really allowed, and then 
don't touch it.

> I can submit a new patch where kvm_init and kvm_create is separated
> and kvm_init is done at argument-parsing time if you like, but
> personally I think this way is clearer :-)
>
>   
>> How about a
>>
>>     int libkvm_init(kvm_libcontext_t *libcontext);
>>     void libkvm_exit(kvm_libcontext_t libcontext);
>>    
>>     int kvm_create(kvm_libcontext_t libcontext, kvm_context_t* vm);
>>     void kvm_destroy(kvm_context_t *vm);
>>     

I meant kvm_destroy(kvm_context_t vm);

>> at present, libkvm_init() can just call access(2) on /dev/kvm.  In the 
>> future, it is planned that open("/dev/kvm") will not create a VM (it 
>> just opens a communication channel to the driver), so that libkvm_init() 
>> will open the device and store the fd.
>>     
>
> Personally, I would prefer something like
>
>    int kvm_open(kvm_t *kvm;)
>    void kvm_close(kvm_t *kvm);
>
>    int kvm_create_vm(kvm_t *kvm, kvm_context_t *vm);
>    void kvm_destroy_vm(kvm_t *kvm, kvm_context_t *vm);
>   

That means that if sizeof(kvm_t) changes, we need to recompile 
everything. With kvm_context_t and kvm_t as opaque pointers, we preserve 
binary compatibility when their definitions change.

-- 
error compiling committee.c: too many arguments to function


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to