Index: kernel/generic/include/adt/hash_table.h
===================================================================
--- kernel/generic/include/adt/hash_table.h	(revision 963037b03d0c4638e2e8a5213a3c29228dec8382)
+++ kernel/generic/include/adt/hash_table.h	(revision 30f1a25ef3be685966ce1377e11888810d47aab9)
@@ -95,5 +95,6 @@
 extern bool hash_table_insert_unique(hash_table_t *, ht_link_t *);
 extern ht_link_t *hash_table_find(const hash_table_t *, void *);
-extern ht_link_t *hash_table_find_next(const hash_table_t *, ht_link_t *);
+extern ht_link_t *hash_table_find_next(const hash_table_t *, ht_link_t *,
+    ht_link_t *);
 extern size_t hash_table_remove(hash_table_t *, void *);
 extern void hash_table_remove_item(hash_table_t *, ht_link_t *);
Index: kernel/generic/src/adt/hash_table.c
===================================================================
--- kernel/generic/src/adt/hash_table.c	(revision 963037b03d0c4638e2e8a5213a3c29228dec8382)
+++ kernel/generic/src/adt/hash_table.c	(revision 30f1a25ef3be685966ce1377e11888810d47aab9)
@@ -269,5 +269,6 @@
 
 /** Find the next item equal to item. */
-ht_link_t *hash_table_find_next(const hash_table_t *h, ht_link_t *item)
+ht_link_t *
+hash_table_find_next(const hash_table_t *h, ht_link_t *first, ht_link_t *item)
 {
 	assert(item);
@@ -277,5 +278,6 @@
 
 	/* Traverse the circular list until we reach the starting item again. */
-	for (link_t *cur = item->link.next; cur != &item->link; cur = cur->next) {
+	for (link_t *cur = item->link.next; cur != &first->link;
+	    cur = cur->next) {
 		assert(cur);
 
Index: kernel/generic/src/ddi/irq.c
===================================================================
--- kernel/generic/src/ddi/irq.c	(revision 963037b03d0c4638e2e8a5213a3c29228dec8382)
+++ kernel/generic/src/ddi/irq.c	(revision 30f1a25ef3be685966ce1377e11888810d47aab9)
@@ -141,6 +141,7 @@
 {
 	irq_spinlock_lock(l, false);
-	for (ht_link_t *lnk = hash_table_find(h, &inr); lnk;
-	    lnk = hash_table_find_next(h, lnk)) {
+	ht_link_t *first = hash_table_find(h, &inr);
+	for (ht_link_t *lnk = first; lnk;
+	    lnk = hash_table_find_next(h, first, lnk)) {
 		irq_t *irq = hash_table_get_inst(lnk, irq_t, link);
 		irq_spinlock_lock(&irq->lock, false);
