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