Index: kernel/generic/src/ddi/irq.c
===================================================================
--- kernel/generic/src/ddi/irq.c	(revision 7dcf22a389ae4373e29fc2686bf9bae2ac3a8d39)
+++ kernel/generic/src/ddi/irq.c	(revision 63530c623718a69d8b980518b5dec7e17f4d991d)
@@ -64,4 +64,5 @@
 #include <typedefs.h>
 #include <synch/spinlock.h>
+#include <atomic.h>
 #include <arch.h>
 
@@ -128,11 +129,14 @@
 {
 	link_initialize(&irq->link);
+	spinlock_initialize(&irq->lock, "irq.lock");
 	irq->inr = -1;
 	irq->devno = -1;
-	irq->notif = 0;
 	irq->trigger = 0;
 	irq->claim = NULL;
 	irq->handler = NULL;
 	irq->arg = NULL;
+	irq->notif_answerbox = NULL;
+	irq->code = NULL;
+	atomic_set(&irq->counter, 0);
 }
 
@@ -221,6 +225,11 @@
 	irq_t *irq = hash_table_get_instance(item, irq_t, link);
 	inr_t *inr = (inr_t *) key;
-	
-	return ((irq->inr == *inr) && (irq->claim() == IRQ_ACCEPT));
+	bool rv;
+	
+	spinlock_lock(&irq->lock);
+	rv = ((irq->inr == *inr) && (irq->claim() == IRQ_ACCEPT));
+	spinlock_unlock(&irq->lock);
+
+	return rv;
 }
 
@@ -260,6 +269,11 @@
 {
 	irq_t *irq = list_get_instance(item, irq_t, link);
-	
-	return (irq->claim() == IRQ_ACCEPT);
+	bool rv;
+	
+	spinlock_lock(&irq->lock);
+	rv = (irq->claim() == IRQ_ACCEPT);
+	spinlock_unlock(&irq->lock);
+	
+	return rv;
 }
 
