[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH 00/13] Nested Virtualization: Overview
On Saturday 04 September 2010 03:30:56 Dong, Eddie wrote: > Christoph Egger wrote: > > On Friday 03 September 2010 10:12:08 Dong, Eddie wrote: > >> The fundamental argument of whether we should convert vendor > >> specific code into vendor neutral code is not solved yet. > >> I guess I don;t need to review rest of the code due to this :) I > >> strongly suggest we remove those unnecessary wrapper for readibilty, > >> flexibility and performance. > > > > I am sort of surprised that you raise the same things again that have > > been discussed in the last round. Please correct me if I am wrong: > > This sounds to me that the statements/explanations from Keir, Tim and > > me are not clear > > to you. Please feel free to ask whatever is unclear / questionable to > > you. > > So you are actually not asking for my review comments, though you > explicitly called it. Well, when you say so :) > I am not convinced a wrapper for wrapping, which is just make it like C > style as you said, should be taken just because somebody have called it > out. I wouldn't call it a wrapper. I call as the implementation of an abstraction. And regarding to what Tim said: http://lists.xensource.com/archives/html/xen-devel/2010-08/msg01044.html Is there a particular reason not to do so apart from the LOC as you brought up in http://lists.xensource.com/archives/html/xen-devel/2010-08/msg01255.html (As Tim said in http://lists.xensource.com/archives/html/xen-devel/2010-08/msg01256.html it's the duplication of logic that counts.) > Freely (at any time) preload/post-store of VMCS fields is very hard because > VMX only provide access to current VMCS (because it is CPU register), while > SVM may be able to access all VMCBs given that it is in memory. I can't say > it is impossible (one can solve it with further limitation/complexity), > however enforcing those conversion simply put trickies to VMX code to > limiting the time of pre-load/post-load, and the additional cost of VMCS > access. > When the VCPU switches between host and guest mode then you need to save the l1 guest state, restore the l2 guest state and vice versa. This requires a lot of accesses from/to the vmcb/vmcs unless you have a lazy switching technique, do you ? > > Another portion of so called common code are actually SVM code only. Here > are part of them: > > > > + > +static enum nestedhvm_vmexits > +nestedhvm_vmexit_msr(unsigned long *msr_bitmap, uint32_t msr, bool_t > write) +{ > + bool_t enabled; > + unsigned long *msr_bit = NULL; > + > + /* > + * See AMD64 Programmers Manual, Vol 2, Section 15.10 > + * (MSR-Bitmap Address). > + */ > + if ( msr <= 0x1fff ) > + msr_bit = msr_bitmap + 0x0000 / BYTES_PER_LONG; > + else if ( (msr >= 0xc0000000) && (msr <= 0xc0001fff) ) > + msr_bit = msr_bitmap + 0x0800 / BYTES_PER_LONG; > + else if ( (msr >= 0xc0010000) && (msr <= 0xc0011fff) ) > + msr_bit = msr_bitmap + 0x1000 / BYTES_PER_LONG; > Why does above code snippet not work on Intel CPUs ? > > +/* Virtual GIF */ > +int > +nestedsvm_vcpu_clgi(struct vcpu *v) > +{ > + if (!nestedhvm_enabled(v->domain)) { > + hvm_inject_exception(TRAP_invalid_op, 0, 0); > + return -1; > + } > + > + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) > + return 0; > + > + /* clear gif flag */ > + vcpu_nestedhvm(v).nh_gif = 0; > + local_event_delivery_disable(); /* mask events for PV drivers */ > + return 0; > +} > + > +int > +nestedsvm_vcpu_stgi(struct vcpu *v) > +{ > + if (!nestedhvm_enabled(v->domain)) { > + hvm_inject_exception(TRAP_invalid_op, 0, 0); > + return -1; > + } > + > + /* Always set the GIF to make hvm_interrupt_blocked work. */ > + vcpu_nestedhvm(v).nh_gif = 1; > + > + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) > + return 0; > + > + local_event_delivery_enable(); /* unmask events for PV drivers */ > + return 0; > +} > + The reason to leave this in the generic code is what Keir stated out as feedback to the second patch series: http://lists.xensource.com/archives/html/xen-devel/2010-06/msg00280.html (What was patch #10 there is patch #8 in latest patch series). Christoph -- ---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 |