Index: /trunk/src/VBox/VMM/VMMR3/EM.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/EM.cpp	(revision 92519)
+++ /trunk/src/VBox/VMM/VMMR3/EM.cpp	(revision 92520)
@@ -1902,4 +1902,5 @@
          * Guest event injection.
          */
+        Assert(!(pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI)));
         bool fWakeupPending = false;
         if (   !VM_FF_IS_SET(pVM, VM_FF_PGM_NO_MEMORY)
Index: /trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux.cpp	(revision 92519)
+++ /trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux.cpp	(revision 92520)
@@ -1905,6 +1905,19 @@
 static VBOXSTRICTRC nemHCLnxHandleInterruptFF(PVM pVM, PVMCPU pVCpu, struct kvm_run *pRun)
 {
-    Assert(!TRPMHasTrap(pVCpu));
     RT_NOREF_PV(pVM);
+
+    /*
+     * Do not doing anything if TRPM has something pending already as we can
+     * only inject one event per KVM_RUN call.  This can only happend if we
+     * can directly from the loop in EM, so the inhibit bits must be internal.
+     */
+    if (!TRPMHasTrap(pVCpu))
+    { /* semi likely */ }
+    else
+    {
+        Assert(!(pVCpu->cpum.GstCtx.fExtrn & (CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI)));
+        Log8(("nemHCLnxHandleInterruptFF: TRPM has an pending event already\n"));
+        return VINF_SUCCESS;
+    }
 
     /*
@@ -2537,5 +2550,6 @@
     {
         /* Try anticipate what we might need. */
-        uint64_t fImport = IEM_CPUMCTX_EXTRN_MUST_MASK;
+        uint64_t fImport = CPUMCTX_EXTRN_INHIBIT_INT | CPUMCTX_EXTRN_INHIBIT_NMI /* Required for processing APIC,PIC,NMI & SMI FFs. */
+                         | IEM_CPUMCTX_EXTRN_MUST_MASK /*?*/;
         if (   (rcStrict >= VINF_EM_FIRST && rcStrict <= VINF_EM_LAST)
             || RT_FAILURE(rcStrict))
