Index: kernel/arch/ia64/src/drivers/it.c
===================================================================
--- kernel/arch/ia64/src/drivers/it.c	(revision 9a5b556abb26634c82cbd3954b0fdb4db62b828e)
+++ kernel/arch/ia64/src/drivers/it.c	(revision de57e0601410d3336e18d797fc95a74b2dce44c0)
@@ -42,8 +42,14 @@
 #include <arch/barrier.h>
 #include <time/clock.h>
+#include <ddi/irq.h>
+#include <ddi/device.h>
 #include <arch.h>
 
+#define IT_SERVICE_CLOCKS 64
 
-#define IT_SERVICE_CLOCKS 64
+static irq_t it_irq;
+
+static irq_ownership_t it_claim(void);
+static void it_interrupt(irq_t *irq, void *arg, ...);
 
 /** Initialize Interval Timer. */
@@ -51,4 +57,11 @@
 {
 	cr_itv_t itv;
+
+	irq_initialize(&it_irq);
+	it_irq.inr = INTERRUPT_TIMER;
+	it_irq.devno = device_assign_devno();
+	it_irq.claim = it_claim;
+	it_irq.handler = it_interrupt;
+	irq_register(&it_irq);
 
 	/* initialize Interval Timer external interrupt vector */
@@ -68,7 +81,17 @@
 }
 
+/** Always claim ownership for this IRQ.
+ *
+ * Other devices are responsible to avoid using INR 0.
+ *
+ * @return Always IRQ_ACCEPT.
+ */
+irq_ownership_t it_claim(void)
+{
+	return IRQ_ACCEPT;
+}
 
 /** Process Interval Timer interrupt. */
-void it_interrupt(void)
+void it_interrupt(irq_t *irq, void *arg, ...)
 {
 	int64_t c;
@@ -84,5 +107,5 @@
 
 		m += IT_DELTA;
-		if (m-c<0)
+		if (m - c < 0)
 			CPU->missed_clock_ticks++;
 		else
@@ -94,4 +117,9 @@
 	
 	clock();
+	
+	/*
+	 * This one is a good candidate for moving to a separate
+	 * kernel thread private to ski.c
+	 */
 	poll_keyboard();
 }
