[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.