Index: kernel/generic/src/ddi/irq.c
===================================================================
--- kernel/generic/src/ddi/irq.c	(revision 84afc7bf42bf4b5e22750a7f377f4bfc31636630)
+++ kernel/generic/src/ddi/irq.c	(revision 2845930ac60c1fddd2f6cb32cb2b2f34c75a7e4e)
@@ -102,9 +102,10 @@
 static index_t irq_ht_hash(unative_t *key);
 static bool irq_ht_compare(unative_t *key, count_t keys, link_t *item);
+static void irq_ht_remove(link_t *item);
 
 static hash_table_operations_t irq_ht_ops = {
 	.hash = irq_ht_hash,
 	.compare = irq_ht_compare,
-	.remove_callback = NULL		/* not used */
+	.remove_callback = irq_ht_remove,
 };
 
@@ -117,9 +118,10 @@
 static index_t irq_lin_hash(unative_t *key);
 static bool irq_lin_compare(unative_t *key, count_t keys, link_t *item);
+static void irq_lin_remove(link_t *item);
 
 static hash_table_operations_t irq_lin_ops = {
 	.hash = irq_lin_hash,
 	.compare = irq_lin_compare,
-	.remove_callback = NULL		/* not used */
+	.remove_callback = irq_lin_remove,
 };
 
@@ -348,4 +350,14 @@
 }
 
+/** Unlock IRQ structure after hash_table_remove().
+ *
+ * @param lnk		Link in the removed and locked IRQ structure.
+ */
+void irq_ht_remove(link_t *lnk)
+{
+	irq_t *irq = hash_table_get_instance(lnk, irq_t, link);
+	spinlock_unlock(&irq->lock);
+}
+
 /** Compute hash index for the key.
  *
@@ -407,4 +419,14 @@
 }
 
+/** Unlock IRQ structure after hash_table_remove().
+ *
+ * @param lnk		Link in the removed and locked IRQ structure.
+ */
+void irq_lin_remove(link_t *lnk)
+{
+	irq_t *irq = hash_table_get_instance(lnk, irq_t, link);
+	spinlock_unlock(&irq->lock);
+}
+
 /** @}
  */
