Index: /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 46706)
+++ /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 46707)
@@ -4794,5 +4794,5 @@
                     && uExitVector == X86_XCPT_PF)
                 {
-                    Log4(("IDT: Contributory #PF uCR2=%#RX64\n", pMixedCtx->cr2));
+                    Log4(("IDT: vcpu[%RU32] Contributory #PF uCR2=%#RX64\n", pVCpu->idCpu, pMixedCtx->cr2));
                 }
 #endif
@@ -4801,5 +4801,5 @@
                 {
                     pVmxTransient->fVectoringPF = true;
-                    Log4(("IDT: Vectoring #PF uCR2=%#RX64\n", pMixedCtx->cr2));
+                    Log4(("IDT: vcpu[%RU32] Vectoring #PF uCR2=%#RX64\n", pVCpu->idCpu, pMixedCtx->cr2));
                 }
                 else if (   (pVCpu->hm.s.vmx.u32XcptBitmap & HMVMX_CONTRIBUTORY_XCPT_MASK)
@@ -4813,7 +4813,7 @@
                     enmReflect = VMXREFLECTXCPT_TF;
             }
-            else if (   uIntType != VMX_IDT_VECTORING_INFO_TYPE_SW_INT
-                     && uIntType != VMX_IDT_VECTORING_INFO_TYPE_SW_XCPT
-                     && uIntType != VMX_IDT_VECTORING_INFO_TYPE_PRIV_SW_XCPT)
+            else if (   uIntType == VMX_IDT_VECTORING_INFO_TYPE_HW_XCPT
+                     || uIntType == VMX_IDT_VECTORING_INFO_TYPE_EXT_INT
+                     || uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI)
             {
                 /*
@@ -4831,5 +4831,10 @@
              * original exception to the guest after handling the VM-exit.
              */
-            enmReflect = VMXREFLECTXCPT_XCPT;
+            if (   uIntType == VMX_IDT_VECTORING_INFO_TYPE_HW_XCPT
+                || uIntType == VMX_IDT_VECTORING_INFO_TYPE_EXT_INT
+                || uIntType == VMX_IDT_VECTORING_INFO_TYPE_NMI)
+            {
+                enmReflect = VMXREFLECTXCPT_XCPT;
+            }
         }
 
@@ -4838,4 +4843,8 @@
             case VMXREFLECTXCPT_XCPT:
             {
+                Assert(   uIntType != VMX_IDT_VECTORING_INFO_TYPE_SW_INT
+                       && uIntType != VMX_IDT_VECTORING_INFO_TYPE_SW_XCPT
+                       && uIntType != VMX_IDT_VECTORING_INFO_TYPE_PRIV_SW_XCPT);
+
                 uint32_t u32ErrCode = 0;
                 if (VMX_IDT_VECTORING_INFO_ERROR_CODE_IS_VALID(pVCpu->hm.s.Event.u64IntrInfo))
@@ -4850,6 +4859,6 @@
                                        0 /* cbInstr */,  u32ErrCode, pMixedCtx->cr2);
                 rc = VINF_SUCCESS;
-                Log4(("IDT: Pending vectoring event %#RX64 Err=%#RX32\n", pVCpu->hm.s.Event.u64IntrInfo,
-                      pVCpu->hm.s.Event.u32ErrCode));
+                Log4(("IDT: vcpu[%RU32] Pending vectoring event %#RX64 Err=%#RX32\n", pVCpu->idCpu,
+                      pVCpu->hm.s.Event.u64IntrInfo, pVCpu->hm.s.Event.u32ErrCode));
                 break;
             }
@@ -4859,6 +4868,6 @@
                 hmR0VmxSetPendingXcptDF(pVCpu, pMixedCtx);
                 rc = VINF_HM_DOUBLE_FAULT;
-                Log4(("IDT: Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->hm.s.Event.u64IntrInfo,
-                      uIdtVector, uExitVector));
+                Log4(("IDT: vcpu[%RU32] Pending vectoring #DF %#RX64 uIdtVector=%#x uExitVector=%#x\n", pVCpu->idCpu,
+                      pVCpu->hm.s.Event.u64IntrInfo, uIdtVector, uExitVector));
                 break;
             }
@@ -4867,5 +4876,6 @@
             {
                 rc = VINF_EM_RESET;
-                Log4(("IDT: Pending vectoring triple-fault uIdt=%#x uExit=%#x\n", uIdtVector, uExitVector));
+                Log4(("IDT: vcpu[%RU32] Pending vectoring triple-fault uIdt=%#x uExit=%#x\n", pVCpu->idCpu, uIdtVector,
+                      uExitVector));
                 break;
             }
@@ -6083,5 +6093,5 @@
         if (fInject)
         {
-            Log4(("Injecting pending event\n"));
+            Log4(("Injecting pending event vcpu[%RU32]\n", pVCpu->idCpu));
             rc = hmR0VmxInjectEventVmcs(pVCpu, pMixedCtx, pVCpu->hm.s.Event.u64IntrInfo, pVCpu->hm.s.Event.cbInstr,
                                         pVCpu->hm.s.Event.u32ErrCode, pVCpu->hm.s.Event.GCPtrFaultAddress, &uIntrState);
@@ -6494,6 +6504,6 @@
     }
 
-    Log4(("Injecting u32IntrInfo=%#x u32ErrCode=%#x cbInstr=%#x pMixedCtx->uCR2=%#RX64\n", u32IntrInfo, u32ErrCode, cbInstr,
-          pMixedCtx->cr2));
+    Log4(("Injecting vcpu[%RU32] u32IntrInfo=%#x u32ErrCode=%#x cbInstr=%#x pMixedCtx->uCR2=%#RX64\n", pVCpu->idCpu,
+          u32IntrInfo, u32ErrCode, cbInstr, pMixedCtx->cr2));
 
     AssertRCReturn(rc, rc);
