[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [v2] nested EPT: fix the handling of nested EPT



Sorry for the  wrong email of Yang's, please ignore. I will resend.

Liang


> -----Original Message-----
> From: Li, Liang Z
> Sent: Saturday, June 27, 2015 5:57 AM
> To: xen-devel@xxxxxxxxxxxxx
> Cc: tim@xxxxxxx; keir@xxxxxxx; jbeulich@xxxxxxxx;
> andrew.cooper3@xxxxxxxxxx; Tian, Kevin; Li, Liang Z; Yang Zhang
> Subject: [v2] nested EPT: fix the handling of nested EPT
> 
> If the host EPT entry is changed, the nested EPT should be updated.
> the current code does not do this, and it's wrong.
> I have tested this patch, the L2 guest can boot and run as normal.
> 
> Signed-off-by: Liang Li <liang.z.li@xxxxxxxxx>
> Signed-off-by: Yang Zhang <yang.z.li@xxxxxxxxx>
> Reported-by: Tim Deegan <tim@xxxxxxx>
> ---
>  xen/arch/x86/mm/p2m-ept.c | 4 ++++
>  xen/arch/x86/mm/p2m.c     | 4 ++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c
> index 5133eb6..ff189e7 100644
> --- a/xen/arch/x86/mm/p2m-ept.c
> +++ b/xen/arch/x86/mm/p2m-ept.c
> @@ -26,6 +26,7 @@
>  #include <asm/p2m.h>
>  #include <asm/hvm/vmx/vmx.h>
>  #include <asm/hvm/vmx/vmcs.h>
> +#include <asm/hvm/nestedhvm.h>
>  #include <xen/iommu.h>
>  #include <asm/mtrr.h>
>  #include <asm/hvm/cacheattr.h>
> @@ -1076,6 +1077,9 @@ void ept_sync_domain(struct p2m_domain *p2m)
> 
>      ASSERT(local_irq_is_enabled());
> 
> +    if ( nestedhvm_enabled(d) && !p2m_is_nestedp2m(p2m) ) {
> +        p2m_flush_nestedp2m(d);
> +    }
>      /*
>       * Flush active cpus synchronously. Flush others the next time this 
> domain
>       * is scheduled onto them. We accept the race of other CPUs adding to 
> diff
> --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index
> 1fd1194..3a06eec 100644
> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -1742,6 +1742,10 @@ p2m_flush_table(struct p2m_domain *p2m)
>      ASSERT(page_list_empty(&p2m->pod.super));
>      ASSERT(page_list_empty(&p2m->pod.single));
> 
> +    if ( p2m->np2m_base == P2M_BASE_EADDR ) {
> +        p2m_unlock(p2m);
> +        return;
> +    }
>      /* This is no longer a valid nested p2m for any address space */
>      p2m->np2m_base = P2M_BASE_EADDR;
> 
> --
> 1.9.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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