Index: /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 31347)
+++ /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 31348)
@@ -965,4 +965,10 @@
             PVMCPU pVCpu = &pVM->aCpus[idCpu];
 
+# ifdef VBOX_WITH_VMMR0_DISABLE_PREEMPTION
+            RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER;
+            RTThreadPreemptDisable(&PreemptState);
+# elif !defined(RT_OS_WINDOWS)
+            RTCCUINTREG uFlags = ASMIntDisableFlags();
+# endif
             /* Select a valid VCPU context. */
             ASMAtomicWriteU32(&pVCpu->idHostCpu, RTMpCpuId());
@@ -982,4 +988,9 @@
             /* Clear the VCPU context. */
             ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
+# ifdef VBOX_WITH_VMMR0_DISABLE_PREEMPTION
+            RTThreadPreemptRestore(&PreemptState);
+# elif !defined(RT_OS_WINDOWS)
+            ASMSetFlags(uFlags);
+# endif
             return rc;
         }
