aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhang Xiantao <xiantao.zhang@intel.com>2013-01-15 11:23:05 +0100
committerZhang Xiantao <xiantao.zhang@intel.com>2013-01-15 11:23:05 +0100
commit89f366ba53f52b1a2b0d16c47ac275372ce86ebb (patch)
treeea7d14f394ef560ecc9411a557ddf99feb800833
parentb2c0b32f5ad9ce6f280982e37afb444b94ee7d5d (diff)
downloadxen-89f366ba53f52b1a2b0d16c47ac275372ce86ebb.tar.gz
xen-89f366ba53f52b1a2b0d16c47ac275372ce86ebb.tar.bz2
xen-89f366ba53f52b1a2b0d16c47ac275372ce86ebb.zip
nEPT: Sync PDPTR fields if L2 guest in PAE paging mode
For PAE L2 guest, GUEST_DPPTR registers needs to be synced for each virtual vmentry. Signed-off-by: Zhang Xiantao <xiantao.zhang@intel.com> Acked-by: Tim Deegan <tim@xen.org> Acked-by: Jun Nakajima <jun.nakajima@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com> Committed-by: Jan Beulich <jbeulich@suse.com>
-rw-r--r--xen/arch/x86/hvm/vmx/vvmx.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c
index 17697a8abe..fdf4f65e2c 100644
--- a/xen/arch/x86/hvm/vmx/vvmx.c
+++ b/xen/arch/x86/hvm/vmx/vvmx.c
@@ -882,7 +882,15 @@ static void load_shadow_guest_state(struct vcpu *v)
(__get_vvmcs(vvmcs, CR4_READ_SHADOW) & cr_gh_mask);
__vmwrite(CR4_READ_SHADOW, cr_read_shadow);
- /* TODO: PDPTRs for nested ept */
+ if ( nvmx_ept_enabled(v) && hvm_pae_enabled(v) &&
+ (v->arch.hvm_vcpu.guest_efer & EFER_LMA) )
+ {
+ vvmcs_to_shadow(vvmcs, GUEST_PDPTR0);
+ vvmcs_to_shadow(vvmcs, GUEST_PDPTR1);
+ vvmcs_to_shadow(vvmcs, GUEST_PDPTR2);
+ vvmcs_to_shadow(vvmcs, GUEST_PDPTR3);
+ }
+
/* TODO: CR3 target control */
}