Index: /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 48219)
+++ /trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp	(revision 48220)
@@ -4067,5 +4067,18 @@
     {
         /* Guest is not in long mode, use the 32-bit handler. */
+#if HC_ARCH_BITS == 32 && !defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
+        if (pVCpu->hm.s.vmx.pfnStartVM != VMXR0StartVM32)
+        {
+            pVCpu->hm.s.vmx.pfnStartVM = VMXR0StartVM32;
+            /** @todo r=bird: Don't we need to set up the host resume (after
+             *        vmlaunch/vmresume) state here??  I'm forcing a trip to ring-3 now
+             *        in the hope that it will prevent crashing the host.  A better
+             *        fix should be found as the guest may be going back and forth
+             *        between 16/32-bit and long mode frequently at times. */
+            VMCPU_FF_SET(pVCpu, VMCPU_FF_TO_R3);
+        }
+#else
         pVCpu->hm.s.vmx.pfnStartVM = VMXR0StartVM32;
+#endif
     }
     Assert(pVCpu->hm.s.vmx.pfnStartVM);
@@ -7335,5 +7348,5 @@
         return VINF_EM_RAW_TO_R3;
     }
-    else if (RTThreadPreemptIsPending(NIL_RTTHREAD))
+    if (RTThreadPreemptIsPending(NIL_RTTHREAD))
     {
         ASMSetFlags(pVmxTransient->uEflags);
