don't walk all the timers as they're sorted.
Modified: trunk/reactos/ntoskrnl/ke/timer.c

Modified: trunk/reactos/ntoskrnl/ke/timer.c
--- trunk/reactos/ntoskrnl/ke/timer.c	2005-02-14 16:49:36 UTC (rev 13567)
+++ trunk/reactos/ntoskrnl/ke/timer.c	2005-02-14 17:03:16 UTC (rev 13568)
@@ -245,15 +245,14 @@
         Timer = CONTAINING_RECORD(CurrentEntry, KTIMER, TimerListEntry);
         DPRINT("Looping for Timer: %x. Duetime: %I64d. InterruptTime %I64d \n", Timer, Timer->DueTime.QuadPart, InterruptTime);
         
-        CurrentEntry = CurrentEntry->Flink;
-        
         /* Check if we have to Expire it */
-        if (InterruptTime >= Timer->DueTime.QuadPart) {
+        if (InterruptTime < Timer->DueTime.QuadPart) break;
+        
+        CurrentEntry = CurrentEntry->Flink;
        
-           /* Remove it from the Timer List, add it to the Expired List */
-           RemoveEntryList(&Timer->TimerListEntry);
-           InsertTailList(&ExpiredTimerList, &Timer->TimerListEntry);
-        }
+        /* Remove it from the Timer List, add it to the Expired List */
+        RemoveEntryList(&Timer->TimerListEntry);
+        InsertTailList(&ExpiredTimerList, &Timer->TimerListEntry);
     }
     
     /* Expire the Timers */