WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[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