Index: /trunk/src/VBox/HostDrivers/Support/SUPDrv.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPDrv.c	(revision 48327)
+++ /trunk/src/VBox/HostDrivers/Support/SUPDrv.c	(revision 48328)
@@ -3371,5 +3371,6 @@
  * @returns VBox status code.
  * @retval  VERR_VMX_NO_VMX
- * @retval  VERR_VMX_MSR_LOCKED_OR_DISABLED
+ * @retval  VERR_VMX_MSR_SMX_VMXON_DISABLED
+ * @retval  VERR_VMX_MSR_VMXON_DISABLED
  * @retval  VERR_SVM_NO_SVM
  * @retval  VERR_SVM_DISABLED
@@ -3390,4 +3391,7 @@
     *pfCaps = 0;
 
+    /** @todo r=ramshankar: Although we're only reading CPUIDs/MSRs here which
+     *        should be identical on all CPUs on the system, it's probably
+     *        cleaner to prevent migration nonetheless? */
     if (ASMHasCpuId())
     {
@@ -3400,5 +3404,5 @@
 
         if (   ASMIsValidStdRange(uMaxId)
-            && (   ASMIsIntelCpuEx(    uVendorEBX, uVendorECX, uVendorEDX)
+            && (   ASMIsIntelCpuEx(     uVendorEBX, uVendorECX, uVendorEDX)
                 || ASMIsViaCentaurCpuEx(uVendorEBX, uVendorECX, uVendorEDX) )
            )
Index: /trunk/src/VBox/VMM/VMMR0/HMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMR0.cpp	(revision 48327)
+++ /trunk/src/VBox/VMM/VMMR0/HMR0.cpp	(revision 48328)
@@ -801,11 +801,12 @@
     PHMR0FIRSTRC pFirstRc = (PHMR0FIRSTRC)pvUser1;
     Assert(idCpu == (RTCPUID)RTMpCpuIdToSetIndex(idCpu)); /// @todo fix idCpu == index assumption (rainy day)
+    Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD));
     NOREF(pvUser2);
 
-    uint64_t fFC = ASMRdMsr(MSR_IA32_FEATURE_CONTROL);
-    bool const fInSmxMode       = !!(ASMGetCR4() & X86_CR4_SMXE);
-    bool       fMsrLocked       = !!(fFC & MSR_IA32_FEATURE_CONTROL_LOCK);
-    bool       fSmxVmxAllowed   = !!(fFC & MSR_IA32_FEATURE_CONTROL_SMX_VMXON);
-    bool       fVmxAllowed      = !!(fFC & MSR_IA32_FEATURE_CONTROL_VMXON);
+    uint64_t   fFC            = ASMRdMsr(MSR_IA32_FEATURE_CONTROL);
+    bool const fInSmxMode     = !!(ASMGetCR4() & X86_CR4_SMXE);
+    bool       fMsrLocked     = !!(fFC & MSR_IA32_FEATURE_CONTROL_LOCK);
+    bool       fSmxVmxAllowed = !!(fFC & MSR_IA32_FEATURE_CONTROL_SMX_VMXON);
+    bool       fVmxAllowed    = !!(fFC & MSR_IA32_FEATURE_CONTROL_VMXON);
 
     /* Check if the LOCK bit is set but excludes the required VMXON bit. */
@@ -835,5 +836,5 @@
 
         /* Verify. */
-        fFC = ASMRdMsr(MSR_IA32_FEATURE_CONTROL);
+        fFC                 = ASMRdMsr(MSR_IA32_FEATURE_CONTROL);
         fMsrLocked          = !!(fFC & MSR_IA32_FEATURE_CONTROL_LOCK);
         fSmxVmxAllowed      = fMsrLocked && !!(fFC & MSR_IA32_FEATURE_CONTROL_SMX_VMXON);
