Index: trunk/include/VBox/vmm/cpum.h
===================================================================
--- trunk/include/VBox/vmm/cpum.h	(revision 69715)
+++ trunk/include/VBox/vmm/cpum.h	(revision 69764)
@@ -1333,4 +1333,5 @@
 DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCCPUMCTX pCtx, uint64_t fIntercept)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u64InterceptCtrl & fIntercept);
@@ -1347,4 +1348,5 @@
 DECLINLINE(bool) CPUMIsGuestSvmReadCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptRdCRx & (1 << uCr));
@@ -1361,4 +1363,5 @@
 DECLINLINE(bool) CPUMIsGuestSvmWriteCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptWrCRx & (1 << uCr));
@@ -1375,4 +1378,5 @@
 DECLINLINE(bool) CPUMIsGuestSvmReadDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptRdDRx & (1 << uDr));
@@ -1389,4 +1393,5 @@
 DECLINLINE(bool) CPUMIsGuestSvmWriteDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptWrDRx & (1 << uDr));
@@ -1403,4 +1408,5 @@
 DECLINLINE(bool) CPUMIsGuestSvmXcptInterceptSet(PCCPUMCTX pCtx, uint8_t uVector)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     Assert(uVector < 32);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
Index: trunk/include/VBox/vmm/cpum.mac
===================================================================
--- trunk/include/VBox/vmm/cpum.mac	(revision 69715)
+++ trunk/include/VBox/vmm/cpum.mac	(revision 69764)
@@ -271,5 +271,5 @@
     .hwvirt.svm.cPauseFilterThreshold  resw          1
     .hwvirt.svm.fInterceptEvents       resb          1
-    .hwvirt.svm.u8Padding1             resb          1
+    .hwvirt.svm.fHMCachedVmcb          resb          1
     .hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES   1
     .hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES   1
Index: trunk/include/VBox/vmm/cpumctx.h
===================================================================
--- trunk/include/VBox/vmm/cpumctx.h	(revision 69715)
+++ trunk/include/VBox/vmm/cpumctx.h	(revision 69764)
@@ -499,6 +499,6 @@
                 /** 950 - Whether the injected event is subject to event intercepts. */
                 bool                fInterceptEvents;
-                /** 951 - Padding. */
-                uint8_t             u8Padding1;
+                /** 951 - Whether parts of the VMCB are cached (and potentially modified) by HM. */
+                bool                fHMCachedVmcb;
                 /** 952 - MSR permission bitmap - R0 ptr. */
                 R0PTRTYPE(void *)   pvMsrBitmapR0;
Index: trunk/include/VBox/vmm/hm.h
===================================================================
--- trunk/include/VBox/vmm/hm.h	(revision 69715)
+++ trunk/include/VBox/vmm/hm.h	(revision 69764)
@@ -167,5 +167,5 @@
  */
 #ifdef VBOX_WITH_NESTED_HWVIRT
-VMM_INT_DECL(void)              HMSvmNstGstVmExitNotify(PVMCPU pVCpu, PSVMVMCB pVmcbNstGst);
+VMM_INT_DECL(void)              HMSvmNstGstVmExitNotify(PVMCPU pVCpu, PCPUMCTX pCtx);
 #endif
 /** @} */
Index: trunk/include/VBox/vmm/hm_svm.h
===================================================================
--- trunk/include/VBox/vmm/hm_svm.h	(revision 69715)
+++ trunk/include/VBox/vmm/hm_svm.h	(revision 69764)
@@ -1012,13 +1012,8 @@
     /** @name Other miscellaneous state.
      * @{ */
-    /** Whether the VMCB exit code and info fields are updated during \#VMEXIT
-     *  processing. */
-    bool                fExitCodeAndInfoUpdated;
     /** Cache of V_INTR_MASKING bit. */
     bool                fVIntrMasking;
-    /** Whether the fields above are updated or not. */
-    bool                fValid;
     /** Alignment. */
-    bool                afPadding0[5];
+    bool                afPadding0[7];
     /** @} */
 } SVMNESTEDVMCBCACHE;
