Index: /trunk/include/VBox/vmm/cpum.mac
===================================================================
--- /trunk/include/VBox/vmm/cpum.mac	(revision 68402)
+++ /trunk/include/VBox/vmm/cpum.mac	(revision 68403)
@@ -276,4 +276,5 @@
     .hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES   1
     .hwvirt.svm.pvIoBitmapR3           RTR3PTR_RES   1
+    .hwvirt.svm.HCPhysVmcb             RTHCPHYS_RES  1
 %if HC_ARCH_BITS == 32
     .hwvirt.svm.abPadding2             resb          16
Index: /trunk/include/VBox/vmm/cpumctx.h
===================================================================
--- /trunk/include/VBox/vmm/cpumctx.h	(revision 68402)
+++ /trunk/include/VBox/vmm/cpumctx.h	(revision 68403)
@@ -509,7 +509,9 @@
                 /** 976 / 964 - IO permission bitmap - R3 ptr. */
                 R3PTRTYPE(void *)   pvIoBitmapR3;
+                /** 984 / 968 - Host physical address of the nested-guest VMCB.  */
+                RTHCPHYS            HCPhysVmcb;
 #if HC_ARCH_BITS == 32
-                /** NA / 968 - Padding. */
-                uint8_t             abPadding2[16];
+                /** NA / 972 - Padding. */
+                uint8_t             abPadding2[20];
 #endif
             } svm;
@@ -521,9 +523,9 @@
         } CPUM_UNION_NM(s);
 
-        /** 984 - A subset of force flags that are preserved while running
+        /** 992 - A subset of force flags that are preserved while running
          *  the nested-guest. */
         uint32_t                fLocalForcedActions;
-        /** 1212 - Padding. */
-        uint8_t                 abPadding1[36];
+        /** 996 - Padding. */
+        uint8_t                 abPadding1[28];
     } hwvirt;
     /** @} */
@@ -594,5 +596,6 @@
 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0,           HC_ARCH_BITS == 64 ? 968 : 960);
 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR3,           HC_ARCH_BITS == 64 ? 976 : 964);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) fLocalForcedActions,        984);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HCPhysVmcb,             HC_ARCH_BITS == 64 ? 984 : 968);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) fLocalForcedActions,        992);
 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR0,       8);
 AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0, 8);
Index: /trunk/src/VBox/VMM/VMMR3/CPUM.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/CPUM.cpp	(revision 68402)
+++ /trunk/src/VBox/VMM/VMMR3/CPUM.cpp	(revision 68403)
@@ -767,4 +767,5 @@
             pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3 = NULL;
         }
+        pVCpu->cpum.s.Guest.hwvirt.svm.HCPhysVmcb = NIL_RTHCPHYS;
 
         if (pVCpu->cpum.s.Guest.hwvirt.svm.pvMsrBitmapR3)
@@ -803,7 +804,11 @@
          * Allocate the nested-guest VMCB.
          */
+        SUPPAGE SupNstGstVmcbPage;
+        RT_ZERO(SupNstGstVmcbPage);
+        SupNstGstVmcbPage.Phys = NIL_RTHCPHYS;
+        Assert(SVM_VMCB_PAGES == 1);
         Assert(!pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3);
         rc = SUPR3PageAllocEx(SVM_VMCB_PAGES, 0 /* fFlags */, (void **)&pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3,
-                              &pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR0, NULL /* paPages */);
+                              &pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR0, &SupNstGstVmcbPage);
         if (RT_FAILURE(rc))
         {
@@ -812,4 +817,5 @@
             break;
         }
+        pVCpu->cpum.s.Guest.hwvirt.svm.HCPhysVmcb = SupNstGstVmcbPage.Phys;
 
         /*
Index: /trunk/src/VBox/VMM/include/CPUMInternal.mac
===================================================================
--- /trunk/src/VBox/VMM/include/CPUMInternal.mac	(revision 68402)
+++ /trunk/src/VBox/VMM/include/CPUMInternal.mac	(revision 68403)
@@ -249,4 +249,5 @@
     .Guest.hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES  1
     .Guest.hwvirt.svm.pvIoBitmapR3           RTR3PTR_RES  1
+    .Guest.hwvirt.svm.HCPhysVmcb             RTHCPHYS_RES 1
 %if HC_ARCH_BITS == 32
     .Guest.hwvirt.svm.abPadding2             resb         16
@@ -534,4 +535,5 @@
     .Hyper.hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES  1
     .Hyper.hwvirt.svm.pvIoBitmapR3           RTR3PTR_RES  1
+    .Hyper.hwvirt.svm.HCPhysVmcb             RTHCPHYS_RES 1
 %if HC_ARCH_BITS == 32
     .Hyper.hwvirt.svm.abPadding2             resb         16
Index: /trunk/src/VBox/VMM/testcase/tstVMStruct.h
===================================================================
--- /trunk/src/VBox/VMM/testcase/tstVMStruct.h	(revision 68402)
+++ /trunk/src/VBox/VMM/testcase/tstVMStruct.h	(revision 68403)
@@ -145,4 +145,5 @@
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pvIoBitmapR0);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pvIoBitmapR3);
+    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.HCPhysVmcb);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.fLocalForcedActions);
     /** @todo add rest of hwvirt fields when code is more
