Index: /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp	(revision 35022)
+++ /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp	(revision 35023)
@@ -21,4 +21,5 @@
 *******************************************************************************/
 #define LOG_GROUP LOG_GROUP_HWACCM
+#include <iprt/asm-amd64-x86.h>
 #include <VBox/hwaccm.h>
 #include <VBox/pgm.h>
@@ -34,5 +35,4 @@
 #include <VBox/err.h>
 #include <VBox/log.h>
-#include <iprt/asm-amd64-x86.h>
 #include <iprt/assert.h>
 #include <iprt/param.h>
@@ -1901,4 +1901,11 @@
     {
         uint64_t cTicksToDeadline = TMCpuTickGetDeadlineAndTscOffset(pVCpu, &fOffsettedTsc, &pVCpu->hwaccm.s.vmx.u64TSCOffset);
+
+        /* Make sure the returned values have sane upper and lower boundaries. */
+        uint64_t u64CpuHz = SUPGetCpuHzFromGIP(g_pSUPGlobalInfoPage);
+
+        cTicksToDeadline = RT_MIN(cTicksToDeadline, u64CpuHz / 64);   /* 1/64 of a second */
+        cTicksToDeadline = RT_MAX(cTicksToDeadline, u64CpuHz / 2048); /* 1/2048th of a second */
+
         cTicksToDeadline >>= pVM->hwaccm.s.vmx.cPreemptTimerShift;
         uint32_t cPreemptionTickCount = (uint32_t)RT_MIN(cTicksToDeadline, UINT32_MAX - 16);
