Avi Kivity wrote:
> Zhang, Xiantao wrote:
>>>> For driver/kvm/kvm.h,  I have a proposal before in mailing list. 
>>>> In my proposal, we can split x86-specific code of kvm.h into
>>>> current x86.h, and make code in kvm.h as common. Then, we rename
>>>> kvm.h to kvm_comm.h, and also rename x86.h to kvm-x86.h, and
>>>> meantime kvm-x86.h would include kvm_comm.h. At compile time, we
>>>> can make symbol link for changing kvm-x86.h to kvm.h.  So, it
>>>> should be more portable, because different archs can define its
>>>> kvm-$arch.h to hold its arch-specific code. 
>>>> 
>>>> 
>>> I prefer not to have dynamic symlinks, it's too tricky.
>>> 
>>> What's wrong with just the first part, x86.h which includes kvm.h?
>>> x86.c will include x86.h, and arch neutral files will include kvm.h.
>>> 
>> 
>> I think it may have issues. For example, where do we put struct
>> kvm_vcpu, and struct kvm? If we place them in x86.h, then kvm_main.c
>> and other neutral files can't reach it.  If we put them in kvm.h,
>> how to handle arch-specific fields in them ?
>> 
> 
> Someone (I forget who) suggested using the same trick we use for vmx
> and svm.  We nest as follows:
> 
> struct vcpu_vmx {
>    struct vcpu_x86 {
>         struct kvm_vcpu {
>              // common fields;
>         } vcpu;
>         // x86 specific fields;
>    } x86;
>    // vmx specific fields;
> };
> 
> Allocation is done by arch specific code which allocates the outermost
> structure.  Common code sees only kvm_vcpu and its fields.  When it
> calls x86 arch hooks, they use the vcpu_x86() macro (which is a call
> to container_of()) to gain access to x86 specific fields.  When x86
> code calls vmx specific code (using kvm_x86_ops), that uses
> vcpu_vmx() to gain access to the vmx specific fields.  Any similarity
> to a language derived from C, living or dead, is purely coincidental
> and unintended. 

Indeed a tricky way!  From code logic, it should works well, but don't
know it is an elegant way to define such structure :-)

Xiantao

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to