mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
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@intel.com> Signed-off-by: Yang Zhang <yang.z.zhang@intel.com> Reported-by: Tim Deegan <tim@xen.org> Reviewed-by: Tim Deegan <tim@xen.org>
This commit is contained in:
1 parent
a9d44224ed
commit
71bb7304e7
2 files changed
+10
No files matched your search
@@ -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
|
||||
|
||||
@@ -1742,6 +1742,12 @@ 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;
|
||||
|
||||
|
||||