[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 03/14] Nested Virtualization: data structure
On Tuesday 17 August 2010 12:28:17 Keir Fraser wrote: > On 17/08/2010 11:01, "Christoph Egger" <Christoph.Egger@xxxxxxx> wrote: > >> Yes, we should be strict on the layout of this structure. > >> SVM/VMX-specific stuff goes into a sub-structure in a union. Absolutely. > > > > I have moved the SVM/VMX-specific pieces into the 'void *nh_arch' field > > above. It is initialized in the svm/vmx specific vcpu initialization. > > I suggest to make this a union including SVM/VMX-specific struct pointers. > It will avoid unnecessary explicit casting, and you can use an anonymous > union if you want. Is using pointers better than actually including the > structures in the union, do you think? > > So I mean something like: union { > void *nh_arch; > struct nestedsvm *nh_svm; > struct nestedvmx *nh_vmx; > }; > > Or: union { > struct nestedsvm nh_svm; > struct nestedvmx nh_vmx; > }; All of this is possible but a union is actually only needed if you want to access svm or vmx specific data from common code which is bad from the software engineering side. The advantage of using a pointer is that gcc can point you to such a mistake. In svm/vmx code you don't need explicit casts with a pointer. Have a look at the top of the nsvm_vmcb_prepare4vmrun() function in the nh_svm patch. There you see how I access 'struct nestedsvm' w/o a cast. > What is the nh_arch_size field for? Well I can guess what it represents, > but why do you need such a thing? It's purpose is to allow to copy svm/vmx specific data to somewhere else w/o knowing them. It is currently nowhere needed. Once it turns out it is neither needed for VMX it can go away. > > When you look into the svm specific patch, you will find a 'struct > > nestedsvm' in xen/include/asm-x86/hvm/svm/vmcb.h > > > >> And you would only go peeking at the SVM sub-structure > >> if hvm_svm_enabled(v)==TRUE. > > > > Correct. On a Intel CPU Xen should never allow the guest to > > set the EFER.SVME bit. > > > >> And we'd have a similar predicate hvm_vmx_enabled(v)==TRUE, presumably. > >> And maybe a generic hvm_nestedvirt_enabled(v) too. > > > > What you call hvm_nestedvirt_enabled() actually exists as > > nestedhvm_enabled(). > > Fine. > > -- Keir -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85609 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |