Index: B:/users/xalex/PREFAST_TRUNK_3_0_0/hw/mlx4/kernel/genutils/gu_timer.cpp
===================================================================
--- B:/users/xalex/PREFAST_TRUNK_3_0_0/hw/mlx4/kernel/genutils/gu_timer.cpp	(revision 8240)
+++ B:/users/xalex/PREFAST_TRUNK_3_0_0/hw/mlx4/kernel/genutils/gu_timer.cpp	(revision 8241)
@@ -50,6 +50,9 @@
     }
 }
 
+#ifdef NTDDI_WIN8
+KSTART_ROUTINE GUThreadFunc;
+#endif
 VOID GUThreadFunc(void *pContext)
 {
     class CGUWorkerThread *pWorkerThread = (CGUWorkerThread*) pContext;
@@ -230,6 +233,9 @@
     return STATUS_SUCCESS;
 }
 
+#ifdef NTDDI_WIN8
+KDEFERRED_ROUTINE GUTimerFunc;
+#endif
 VOID
  GUTimerFunc(
     IN struct _KDPC  *Dpc,
@@ -252,9 +258,13 @@
     m_pWorkItem(pWorkItem),
     m_bExit(false),
     m_IsPeriodic(IsPeriodic),
-    m_TimerIntervalMillis(TimerIntervalMillis),
-    m_TimerIntervalLimit((ULONG)0.9*TimerIntervalMillis)
+    m_TimerIntervalMillis(TimerIntervalMillis)
 {
+	KFLOATING_SAVE fp;
+	KeSaveFloatingPointState(&fp);
+    m_TimerIntervalLimit = (ULONG)0.9*TimerIntervalMillis;
+	KeRestoreFloatingPointState(&fp);
+
     KeInitializeTimer(&m_Timer);
     KeInitializeDpc(&m_Dpc, GUTimerFunc, this);
     
@@ -281,14 +291,19 @@
     bool  IsPeriodic
     )
 {
+	KFLOATING_SAVE fp;
+	
     m_pThread = pThread;
     ASSERT(pWorkItem);
     m_pWorkItem = pWorkItem;
     m_bExit = false;
     m_IsPeriodic = IsPeriodic;
     m_TimerIntervalMillis = TimerIntervalMillis;
+
+	KeSaveFloatingPointState(&fp);
     m_TimerIntervalLimit = (ULONG)0.9*TimerIntervalMillis;
-     
+	KeRestoreFloatingPointState(&fp);
+	
     KeInitializeTimer(&m_Timer);
     KeInitializeDpc(&m_Dpc, GUTimerFunc, this);
     
Index: B:/users/xalex/PREFAST_TRUNK_3_0_0/hw/mlx4/kernel/genutils/gu_utils.cpp
===================================================================
--- B:/users/xalex/PREFAST_TRUNK_3_0_0/hw/mlx4/kernel/genutils/gu_utils.cpp	(revision 8240)
+++ B:/users/xalex/PREFAST_TRUNK_3_0_0/hw/mlx4/kernel/genutils/gu_utils.cpp	(revision 8241)
@@ -84,12 +84,20 @@
 // In units of ns
 uint64_t GetTimeStamp( void )
 {
+	uint64_t ts;
     LARGE_INTEGER tick_count, frequency;
 
+	KFLOATING_SAVE fp;
+	KeSaveFloatingPointState(&fp);
+
     tick_count = KeQueryPerformanceCounter( &frequency );
     double dtick_count = (double)tick_count.QuadPart;
     double dfrequency = (double)frequency.QuadPart;
-    return (uint64_t)( 1000000000 * dtick_count / dfrequency );
+    ts = (uint64_t)( 1000000000 * dtick_count / dfrequency );
+
+	KeRestoreFloatingPointState(&fp);
+
+	return ts;
 }
 
 u32 ROUNDUP_LOG2(u32 arg)

