Index: arch/ia64/src/drivers/it.c
===================================================================
--- arch/ia64/src/drivers/it.c	(revision 41d33aca6323fda79c1a11fc827a1a73ba58c85f)
+++ arch/ia64/src/drivers/it.c	(revision 152b2b0ca223d7a95abf0fbd5e89c977c114a9ce)
@@ -36,5 +36,8 @@
 #include <arch/barrier.h>
 #include <time/clock.h>
+#include <arch.h>
 
+
+#define IT_SERVICE_CLOCKS 64
 
 /** Initialize Interval Timer. */
@@ -59,10 +62,34 @@
 }
 
+
 /** Process Interval Timer interrupt. */
 void it_interrupt(void)
 {
+	__s64 c;
+	__s64 m;
+	
 	eoi_write(EOI);
-	itm_write(itc_read() + IT_DELTA);	/* program next interruption */
+	
+	m=itm_read();
+	
+	while(1)
+	{
+	
+		c=itc_read();
+		c+=IT_SERVICE_CLOCKS;
+
+		m+=IT_DELTA;
+		if(m-c<0)
+		{
+			CPU->missed_clock_ticks++;
+		}
+		else break;
+	}
+	
+	itm_write(m);
 	srlz_d();				/* propagate changes */
+	
+	
+	
 	clock();
 	poll_keyboard();
