Index: /trunk/include/VBox/vmm/cpum.h
===================================================================
--- /trunk/include/VBox/vmm/cpum.h	(revision 67923)
+++ /trunk/include/VBox/vmm/cpum.h	(revision 67924)
@@ -1315,4 +1315,5 @@
 }
 
+#ifndef IN_RC
 /**
  * Checks if the guest VMCB has the specified ctrl/instruction intercept active.
@@ -1325,5 +1326,6 @@
 DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCCPUMCTX pCtx, uint64_t fIntercept)
 {
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u64InterceptCtrl & fIntercept);
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u64InterceptCtrl & fIntercept);
 }
 
@@ -1338,5 +1340,6 @@
 DECLINLINE(bool) CPUMIsGuestSvmReadCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
 {
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptRdCRx & (1 << uCr));
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u16InterceptRdCRx & (1 << uCr));
 }
 
@@ -1351,5 +1354,6 @@
 DECLINLINE(bool) CPUMIsGuestSvmWriteCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
 {
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptWrCRx & (1 << uCr));
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u16InterceptWrCRx & (1 << uCr));
 }
 
@@ -1364,5 +1368,6 @@
 DECLINLINE(bool) CPUMIsGuestSvmReadDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
 {
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptRdDRx & (1 << uDr));
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u16InterceptRdDRx & (1 << uDr));
 }
 
@@ -1377,5 +1382,6 @@
 DECLINLINE(bool) CPUMIsGuestSvmWriteDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
 {
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u16InterceptWrDRx & (1 << uDr));
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u16InterceptWrDRx & (1 << uDr));
 }
 
@@ -1391,6 +1397,8 @@
 {
     Assert(uVector < 32);
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u32InterceptXcpt & (UINT32_C(1) << uVector));
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u32InterceptXcpt & (UINT32_C(1) << uVector));
 }
+#endif /* !IN_RC */
 
 /**
@@ -1406,5 +1414,11 @@
      * See AMD spec. 15.5 "VMRUN instruction" subsection "Canonicalization and Consistency Checks".
      */
-    return RT_BOOL(pCtx->hwvirt.svm.VmcbCtrl.u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMRUN);
+#ifndef IN_RC
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
+    return RT_BOOL(pVmcbCtrl->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMRUN);
+#else
+    RT_NOREF(pCtx);
+    return false;
+#endif
 }
 
@@ -1417,6 +1431,6 @@
 DECLINLINE(bool) CPUMIsGuestInVmxNestedHwVirtMode(PCCPUMCTX pCtx)
 {
-    RT_NOREF1(pCtx);
     /** @todo Intel. */
+    RT_NOREF(pCtx);
     return false;
 }
Index: /trunk/include/VBox/vmm/cpum.mac
===================================================================
--- /trunk/include/VBox/vmm/cpum.mac	(revision 67923)
+++ /trunk/include/VBox/vmm/cpum.mac	(revision 67924)
@@ -258,21 +258,25 @@
     .abPadding          resb    12
 %endif
-    .hwvirt.svm.uMsrHSavePa              resq    1
-    .hwvirt.svm.GCPhysVmcb               resq    1
-    .hwvirt.svm.VmcbCtrl                 resb  256
-    .hwvirt.svm.HostState                resb  184
-    .hwvirt.svm.fGif                     resb    1
-    .hwvirt.svm.cPauseFilter             resw    1
-    .hwvirt.svm.cPauseFilterThreshold    resw    1
-    .hwvirt.svm.fInterceptEvents         resb    1
-    .hwvirt.svm.abPadding0               resb    2
-    .hwvirt.svm.pvMsrBitmapR0            RTR0PTR_RES 1
-    .hwvirt.svm.pvMsrBitmapR3            RTR3PTR_RES 1
-    .hwvirt.svm.pvIoBitmapR0             RTR0PTR_RES 1
-    .hwvirt.svm.pvIoBitmapR3             RTR3PTR_RES 1
+    .hwvirt.svm.uMsrHSavePa            resq          1
+    .hwvirt.svm.GCPhysVmcb             resq          1
+    .hwvirt.svm.pVmcbR0                RTR0PTR_RES   1
+    .hwvirt.svm.pVmcbR3                RTR3PTR_RES   1
 %if HC_ARCH_BITS == 32
-    .hwvirt.svm.abPadding1               resb   16
-%endif
-    .hwvirt.fLocalForcedActions          resd    1
+    .hwvirt.svm.abPadding0             resb          8
+%endif
+    .hwvirt.svm.HostState              resb        184
+    .hwvirt.svm.fGif                   resb          1
+    .hwvirt.svm.cPauseFilter           resw          1
+    .hwvirt.svm.cPauseFilterThreshold  resw          1
+    .hwvirt.svm.fInterceptEvents       resb          1
+    .hwvirt.svm.abPadding1             resb          2
+    .hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES   1
+    .hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES   1
+    .hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES   1
+    .hwvirt.svm.pvIoBitmapR3           RTR3PTR_RES   1
+%if HC_ARCH_BITS == 32
+    .hwvirt.svm.abPadding2             resb          16
+%endif
+    .hwvirt.fLocalForcedActions        resd          1
     alignb 64
 endstruc
Index: /trunk/include/VBox/vmm/cpumctx.h
===================================================================
--- /trunk/include/VBox/vmm/cpumctx.h	(revision 67923)
+++ /trunk/include/VBox/vmm/cpumctx.h	(revision 67924)
@@ -479,29 +479,35 @@
                 /** 736 - Guest physical address of the nested-guest VMCB. */
                 RTGCPHYS            GCPhysVmcb;
-                /** 744 - Cache of the nested-guest VMCB control area. */
-                SVMVMCBCTRL         VmcbCtrl;
-                /** 1000 - Guest's host-state save area. */
+                /** 744 - Cache of the nested-guest VMCB - R0 ptr. */
+                R0PTRTYPE(PSVMVMCB) pVmcbR0;
+                /** 752 / 748 - Cache of the nested-guest VMCB - R3 ptr. */
+                R3PTRTYPE(PSVMVMCB) pVmcbR3;
+#if HC_ARCH_BITS == 32
+                /** NA / 752 - Padding. */
+                uint8_t             abPadding0[8];
+#endif
+                /** 760 - Guest's host-state save area. */
                 SVMHOSTSTATE        HostState;
-                /** 1184 - Global interrupt flag. */
+                /** 944 - Global interrupt flag. */
                 uint8_t             fGif;
-                /** 1185 - Pause filter count. */
+                /** 945 - Pause filter count. */
                 uint16_t            cPauseFilter;
-                /** 1187 - Pause filter count. */
+                /** 947 - Pause filter count. */
                 uint16_t            cPauseFilterThreshold;
-                /** 1189 - Whether the injected event is subject to event intercepts. */
+                /** 949 - Whether the injected event is subject to event intercepts. */
                 uint8_t             fInterceptEvents;
-                /** 1190 - Padding. */
-                uint8_t             abPadding0[2];
-                /** 1192 - MSR permission bitmap - R0 ptr. */
+                /** 950 - Padding. */
+                uint8_t             abPadding1[2];
+                /** 952 - MSR permission bitmap - R0 ptr. */
                 R0PTRTYPE(void *)   pvMsrBitmapR0;
-                /** 1200 / 1196 - MSR permission bitmap - R3 ptr. */
+                /** 960 / 956 - MSR permission bitmap - R3 ptr. */
                 R3PTRTYPE(void *)   pvMsrBitmapR3;
-                /** 1208 / 1200 - IO permission bitmap - R0 ptr. */
+                /** 968 / 960 - IO permission bitmap - R0 ptr. */
                 R0PTRTYPE(void *)   pvIoBitmapR0;
-                /** 1216 / 1204 - IO permission bitmap - R3 ptr. */
+                /** 976 / 964 - IO permission bitmap - R3 ptr. */
                 R3PTRTYPE(void *)   pvIoBitmapR3;
 #if HC_ARCH_BITS == 32
-                /** NA / 1200 - Padding. */
-                uint8_t             abPadding1[16];
+                /** NA / 968 - Padding. */
+                uint8_t             abPadding2[16];
 #endif
             } svm;
@@ -513,9 +519,9 @@
         } CPUM_UNION_NM(s);
 
-        /** 1224 - A subset of force flags that are preserved while running
+        /** 984 - A subset of force flags that are preserved while running
          *  the nested-guest. */
         uint32_t                fLocalForcedActions;
         /** 1212 - Padding. */
-        uint8_t                 abPadding1[52];
+        uint8_t                 abPadding1[36];
     } hwvirt;
     /** @} */
@@ -575,15 +581,19 @@
 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.uMsrHSavePa,            728);
 AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.GCPhysVmcb,             736);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.VmcbCtrl,               744);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HostState,             1000);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fGif,                  1184);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilter,          1185);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilterThreshold, 1187);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fInterceptEvents,      1189);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0,         1192);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR3,         HC_ARCH_BITS == 64 ? 1200 : 1196);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0,          HC_ARCH_BITS == 64 ? 1208 : 1200);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR3,          HC_ARCH_BITS == 64 ? 1216 : 1204);
-AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) fLocalForcedActions,       1224);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR0,                744);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR3,                HC_ARCH_BITS == 64 ? 752 : 748);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.HostState,              760);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fGif,                   944);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilter,           945);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.cPauseFilterThreshold,  947);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.fInterceptEvents,       949);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0,          952);
+AssertCompileMemberOffset(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR3,          HC_ARCH_BITS == 64 ? 960 : 956);
+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);
+AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pVmcbR0,       8);
+AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvMsrBitmapR0, 8);
+AssertCompileMemberAlignment(CPUMCTX, hwvirt.CPUM_UNION_NM(s.) svm.pvIoBitmapR0,  8);
 
 AssertCompileMembersAtSameOffset(CPUMCTX, CPUM_UNION_STRUCT_NM(g,qw.) rax, CPUMCTX, CPUM_UNION_NM(g.) aGRegs);
Index: /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp	(revision 67923)
+++ /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp	(revision 67924)
@@ -2555,8 +2555,12 @@
 VMM_INT_DECL(bool) CPUMCanSvmNstGstTakePhysIntr(PCCPUMCTX pCtx)
 {
+#ifdef IN_RC
+    RT_NOREF(pCtx);
+    AssertReleaseFailedReturn(false);
+#else
     Assert(CPUMIsGuestInSvmNestedHwVirtMode(pCtx));
     Assert(pCtx->hwvirt.svm.fGif);
 
-    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.VmcbCtrl;
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
     X86EFLAGS fEFlags;
     if (pVmcbCtrl->IntCtrl.n.u1VIntrMasking)
@@ -2566,4 +2570,5 @@
 
     return fEFlags.Bits.u1IF;
+#endif
 }
 
@@ -2580,7 +2585,11 @@
 VMM_INT_DECL(bool) CPUMCanSvmNstGstTakeVirtIntr(PCCPUMCTX pCtx)
 {
+#ifdef IN_RC
+    RT_NOREF(pCtx);
+    AssertReleaseFailedReturn(false);
+#else
     Assert(CPUMIsGuestInSvmNestedHwVirtMode(pCtx));
 
-    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.VmcbCtrl;
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
     if (   !pVmcbCtrl->IntCtrl.n.u1IgnoreTPR
         &&  pVmcbCtrl->IntCtrl.n.u4VIntrPrio <= pVmcbCtrl->IntCtrl.n.u8VTPR)
@@ -2594,4 +2603,5 @@
 
     return true;
+#endif
 }
 
@@ -2605,6 +2615,11 @@
 VMM_INT_DECL(uint8_t) CPUMGetSvmNstGstInterrupt(PCCPUMCTX pCtx)
 {
-    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.VmcbCtrl;
+#ifdef IN_RC
+    RT_NOREF(pCtx);
+    AssertReleaseFailedReturn(0);
+#else
+    PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
     return pVmcbCtrl->IntCtrl.n.u8VIntrVector;
-}
-
+#endif
+}
+
Index: /trunk/src/VBox/VMM/VMMR3/CPUM.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/CPUM.cpp	(revision 67923)
+++ /trunk/src/VBox/VMM/VMMR3/CPUM.cpp	(revision 67924)
@@ -762,4 +762,10 @@
     {
         PVMCPU pVCpu = &pVM->aCpus[i];
+        if (pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3)
+        {
+            SUPR3PageFreeEx(pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3, SVM_VMCB_PAGES);
+            pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3 = NULL;
+        }
+
         if (pVCpu->cpum.s.Guest.hwvirt.svm.pvMsrBitmapR3)
         {
@@ -793,4 +799,17 @@
     {
         PVMCPU pVCpu = &pVM->aCpus[i];
+
+        /*
+         * Allocate the nested-guest VMCB.
+         */
+        Assert(!pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3);
+        rc = SUPR3PageAllocEx(SVM_VMCB_PAGES, 0 /* fFlags */, (void **)&pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3,
+                              (PRTR0PTR)pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR0, NULL /* paPages */);
+        if (RT_FAILURE(rc))
+        {
+            Assert(!pVCpu->cpum.s.Guest.hwvirt.svm.pVmcbR3);
+            LogRel(("CPUM%u: Failed to alloc %u pages for the nested-guest's VMCB\n", pVCpu->idCpu, SVM_VMCB_PAGES));
+            break;
+        }
 
         /*
@@ -1250,5 +1269,5 @@
      */
     /* SVM. */
-    RT_ZERO(pCtx->hwvirt.svm.VmcbCtrl);
+    memset(&pCtx->hwvirt.svm, 0, sizeof(pCtx->hwvirt.svm));
     pCtx->hwvirt.svm.fGif = 1;
 }
@@ -2225,5 +2244,6 @@
         pHlp->pfnPrintf(pHlp, "  GCPhysVmcb                 = %#RGp\n",     pCtx->hwvirt.svm.GCPhysVmcb);
         pHlp->pfnPrintf(pHlp, "  VmcbCtrl:\n");
-        HMR3InfoSvmVmcbCtrl(pHlp, &pCtx->hwvirt.svm.VmcbCtrl, "    " /* pszPrefix */);
+        HMR3InfoSvmVmcbCtrl(pHlp, &pCtx->hwvirt.svm.pVmcbR3->ctrl, "    " /* pszPrefix */);
+        /** @todo HMR3InfoSvmVmcbStateSave. */
         pHlp->pfnPrintf(pHlp, "  HostState:\n");
         pHlp->pfnPrintf(pHlp, "    uEferMsr                   = %#RX64\n",  pCtx->hwvirt.svm.HostState.uEferMsr);
Index: /trunk/src/VBox/VMM/include/CPUMInternal.mac
===================================================================
--- /trunk/src/VBox/VMM/include/CPUMInternal.mac	(revision 67923)
+++ /trunk/src/VBox/VMM/include/CPUMInternal.mac	(revision 67924)
@@ -231,21 +231,25 @@
     .Guest.abPadding          resb    12
 %endif
-    .Guest.hwvirt.svm.uMsrHSavePa               resq    1
-    .Guest.hwvirt.svm.GCPhysVmcb                resq    1
-    .Guest.hwvirt.svm.VmcbCtrl                  resb  256
-    .Guest.hwvirt.svm.HostState                 resb  184
-    .Guest.hwvirt.svm.fGif                      resb    1
-    .Guest.hwvirt.svm.cPauseFilter              resw    1
-    .Guest.hwvirt.svm.cPauseFilterThreshold     resw    1
-    .Guest.hwvirt.svm.fInterceptEvents          resb    1
-    .Guest.hwvirt.svm.abPadding0                resb    2
-    .Guest.hwvirt.svm.pvMsrBitmapR0             RTR0PTR_RES 1
-    .Guest.hwvirt.svm.pvMsrBitmapR3             RTR3PTR_RES 1
-    .Guest.hwvirt.svm.pvIoBitmapR0              RTR0PTR_RES 1
-    .Guest.hwvirt.svm.pvIoBitmapR3              RTR3PTR_RES 1
+    .Guest.hwvirt.svm.uMsrHSavePa            resq         1
+    .Guest.hwvirt.svm.GCPhysVmcb             resq         1
+    .Guest.hwvirt.svm.pVmcbR0                RTR0PTR_RES  1
+    .Guest.hwvirt.svm.pVmcbR3                RTR3PTR_RES  1
 %if HC_ARCH_BITS == 32
-    .Guest.hwvirt.svm.abPadding1                resb    16
-%endif
-    .Guest.hwvirt.fLocalForcedActions           resd    1
+    .Guest.hwvirt.svm.abPadding0             resb         8
+%endif
+    .Guest.hwvirt.svm.HostState              resb         184
+    .Guest.hwvirt.svm.fGif                   resb         1
+    .Guest.hwvirt.svm.cPauseFilter           resw         1
+    .Guest.hwvirt.svm.cPauseFilterThreshold  resw         1
+    .Guest.hwvirt.svm.fInterceptEvents       resb         1
+    .Guest.hwvirt.svm.abPadding1             resb         2
+    .Guest.hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES  1
+    .Guest.hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES  1
+    .Guest.hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES  1
+    .Guest.hwvirt.svm.pvIoBitmapR3           RTR3PTR_RES  1
+%if HC_ARCH_BITS == 32
+    .Guest.hwvirt.svm.abPadding2             resb         16
+%endif
+    .Guest.hwvirt.fLocalForcedActions        resd         1
     alignb 64
 
@@ -511,21 +515,25 @@
     .Hyper.abPadding          resb    12
 %endif
-    .Hyper.hwvirt.svm.uMsrHSavePa               resq    1
-    .Hyper.hwvirt.svm.GCPhysVmcb                resq    1
-    .Hyper.hwvirt.svm.VmcbCtrl                  resb  256
-    .Hyper.hwvirt.svm.HostState                 resb  184
-    .Hyper.hwvirt.svm.fGif                      resb    1
-    .Hyper.hwvirt.svm.cPauseFilter              resw    1
-    .Hyper.hwvirt.svm.cPauseFilterThreshold     resw    1
-    .Hyper.hwvirt.svm.fInterceptEvents          resb    1
-    .Hyper.hwvirt.svm.abPadding0                resb    2
-    .Hyper.hwvirt.svm.pvMsrBitmapR0             RTR0PTR_RES 1
-    .Hyper.hwvirt.svm.pvMsrBitmapR3             RTR3PTR_RES 1
-    .Hyper.hwvirt.svm.pvIoBitmapR0              RTR0PTR_RES 1
-    .Hyper.hwvirt.svm.pvIoBitmapR3              RTR3PTR_RES 1
+    .Hyper.hwvirt.svm.uMsrHSavePa            resq         1
+    .Hyper.hwvirt.svm.GCPhysVmcb             resq         1
+    .Hyper.hwvirt.svm.pVmcbR0                RTR0PTR_RES  1
+    .Hyper.hwvirt.svm.pVmcbR3                RTR3PTR_RES  1
 %if HC_ARCH_BITS == 32
-    .Hyper.hwvirt.svm.abPadding1                resb   16
-%endif
-    .Hyper.hwvirt.fLocalForcedActions           resd    1
+    .Hyper.hwvirt.svm.abPadding0             resb         8
+%endif
+    .Hyper.hwvirt.svm.HostState              resb         184
+    .Hyper.hwvirt.svm.fGif                   resb         1
+    .Hyper.hwvirt.svm.cPauseFilter           resw         1
+    .Hyper.hwvirt.svm.cPauseFilterThreshold  resw         1
+    .Hyper.hwvirt.svm.fInterceptEvents       resb         1
+    .Hyper.hwvirt.svm.abPadding1             resb         2
+    .Hyper.hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES  1
+    .Hyper.hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES  1
+    .Hyper.hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES  1
+    .Hyper.hwvirt.svm.pvIoBitmapR3           RTR3PTR_RES  1
+%if HC_ARCH_BITS == 32
+    .Hyper.hwvirt.svm.abPadding2             resb         16
+%endif
+    .Hyper.hwvirt.fLocalForcedActions        resd         1
     alignb 64
 
Index: /trunk/src/VBox/VMM/testcase/tstVMStruct.h
===================================================================
--- /trunk/src/VBox/VMM/testcase/tstVMStruct.h	(revision 67923)
+++ /trunk/src/VBox/VMM/testcase/tstVMStruct.h	(revision 67924)
@@ -134,5 +134,6 @@
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.uMsrHSavePa);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.GCPhysVmcb);
-    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.VmcbCtrl);
+    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pVmcbR0);
+    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pVmcbR3);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.HostState);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.fGif);
