42 lines
1.4 KiB
Diff
42 lines
1.4 KiB
Diff
|
# HG changeset patch
|
||
|
# User Tim Deegan <tim@xen.org>
|
||
|
# Date 1349356850 -3600
|
||
|
# Node ID a9c84069c2489e2c432a5068adc7cf8d51ae3366
|
||
|
# Parent 72d89cc43c72848be9bf49da9a87729ed8f48433
|
||
|
x86/nested-svm: Update the paging mode on VMRUN and VMEXIT emulation.
|
||
|
|
||
|
This allows Xen to walk the l1 hypervisor's shadow pagetable
|
||
|
correctly. Not needed for hap-on-hap guests because they are handled
|
||
|
at lookup time. Problem found with 64bit Win7 and 32bit XPMode where Win7
|
||
|
switches forth and back between long mode and PAE legacy pagetables.
|
||
|
|
||
|
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
|
||
|
[Adjusted to update in all cases where the l1 vmm uses shadows]
|
||
|
Signed-off-by: Tim Deegan <tim@xen.org>
|
||
|
Committed-by: Tim Deegan <tim@xen.org>
|
||
|
|
||
|
--- a/xen/arch/x86/hvm/svm/nestedsvm.c
|
||
|
+++ b/xen/arch/x86/hvm/svm/nestedsvm.c
|
||
|
@@ -741,6 +741,10 @@ nsvm_vcpu_vmrun(struct vcpu *v, struct c
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
+ /* If l1 guest uses shadow paging, update the paging mode. */
|
||
|
+ if (!nestedhvm_paging_mode_hap(v))
|
||
|
+ paging_update_paging_modes(v);
|
||
|
+
|
||
|
nv->nv_vmswitch_in_progress = 0;
|
||
|
return 0;
|
||
|
}
|
||
|
@@ -1408,6 +1412,10 @@ nestedsvm_vcpu_vmexit(struct vcpu *v, st
|
||
|
*/
|
||
|
rc = nhvm_vcpu_vmexit(v, regs, exitcode);
|
||
|
|
||
|
+ /* If l1 guest uses shadow paging, update the paging mode. */
|
||
|
+ if (!nestedhvm_paging_mode_hap(v))
|
||
|
+ paging_update_paging_modes(v);
|
||
|
+
|
||
|
nv->nv_vmswitch_in_progress = 0;
|
||
|
|
||
|
if (rc)
|