Index: /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp	(revision 19995)
+++ /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp	(revision 19996)
@@ -1997,4 +1997,5 @@
     RTGCUINTPTR errCode, instrInfo;
     bool        fSyncTPR = false;
+    bool        fSetupTPRCaching = false;
     PHWACCM_CPUINFO pCpu = 0;
     RTCCUINTREG uOldEFlags;
@@ -2007,4 +2008,15 @@
     bool fStatExit2Started = false;
 #endif
+
+    /* Check if we need to use TPR shadowing. */
+    if (    pVM->hwaccm.s.vmx.pAPIC
+        &&  (   CPUMIsGuestInLongModeEx(pCtx)
+             || (   (pVM->hwaccm.s.vmx.msr.vmx_proc_ctls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VIRT_APIC)
+                 && PDMHasIoApic(pVM))
+            )
+       )
+    {
+        fSetupTPRCaching = true;
+    }
 
     Log2(("\nE"));
@@ -2163,6 +2175,5 @@
      * @todo reduce overhead
      */
-    if (    PDMHasIoApic(pVM)
-        &&  pVM->hwaccm.s.vmx.pAPIC)
+    if (fSetupTPRCaching)
     {
         /* TPR caching in CR8 */
