Index: kernel/arch/ppc32/src/interrupt.c
===================================================================
--- kernel/arch/ppc32/src/interrupt.c	(revision df4ed852a2d1b242f9bdce0a873009a2cb77cec7)
+++ kernel/arch/ppc32/src/interrupt.c	(revision 04d45129f69d986fd89e6d7719e54cfbf4212bdb)
@@ -61,4 +61,5 @@
 	
 	while ((inum = pic_get_pending()) != -1) {
+		bool ack = false;
 		irq_t *irq = irq_dispatch_and_lock(inum);
 		if (irq) {
@@ -66,4 +67,11 @@
 			 * The IRQ handler was found.
 			 */
+			
+			if (irq->preack) {
+				/* Acknowledge the interrupt before processing */
+				pic_ack_interrupt(inum);
+				ack = true;
+			}
+			
 			irq->handler(irq, irq->arg);
 			spinlock_unlock(&irq->lock);
@@ -76,5 +84,7 @@
 #endif
 		}
-		pic_ack_interrupt(inum);
+		
+		if (!ack)
+			pic_ack_interrupt(inum);
 	}
 }
