Index: kernel/arch/ppc32/src/interrupt.c
===================================================================
--- kernel/arch/ppc32/src/interrupt.c	(revision d95f1e24a3ed2800461f743a8f9c97803cacd0a1)
+++ kernel/arch/ppc32/src/interrupt.c	(revision b14e35f21d106227a205a0ef257dff8643000ec4)
@@ -33,4 +33,5 @@
  */
 
+#include <ddi/irq.h>
 #include <interrupt.h>
 #include <arch/interrupt.h>
@@ -41,4 +42,5 @@
 #include <arch/drivers/pic.h>
 #include <arch/mm/tlb.h>
+#include <print.h>
 
 
@@ -57,7 +59,21 @@
 {
 	int inum;
-
+	
 	while ((inum = pic_get_pending()) != -1) {
-		exc_dispatch(inum + INT_OFFSET, istate);
+		irq_t *irq = irq_dispatch_and_lock(inum);
+		if (irq) {
+			/*
+			 * The IRQ handler was found.
+			 */
+			irq->handler(irq, irq->arg);
+			spinlock_unlock(&irq->lock);
+		} else {
+			/*
+			 * Spurious interrupt.
+			 */
+#ifdef CONFIG_DEBUG
+			printf("cpu%d: spurious interrupt (inum=%d)\n", CPU->id, inum);
+#endif
+		}
 		pic_ack_interrupt(inum);
 	}
