Index: kernel/arch/amd64/src/interrupt.c
===================================================================
--- kernel/arch/amd64/src/interrupt.c	(revision df4ed852a2d1b242f9bdce0a873009a2cb77cec7)
+++ kernel/arch/amd64/src/interrupt.c	(revision f74bbaf20e8d8be55495c56affc5b17ef6ea2bf0)
@@ -157,7 +157,8 @@
 	
 	int inum = n - IVT_IRQBASE;
+	bool ack = false;
 	ASSERT(inum < IRQ_COUNT);
 	ASSERT((inum != IRQ_PIC_SPUR) && (inum != IRQ_PIC1));
-
+	
 	irq_t *irq = irq_dispatch_and_lock(inum);
 	if (irq) {
@@ -165,4 +166,10 @@
 		 * The IRQ handler was found.
 		 */
+		 
+		if (irq->preack) {
+			/* Send EOI before processing the interrupt */
+			trap_virtual_eoi();
+			ack = true;
+		}
 		irq->handler(irq, irq->arg);
 		spinlock_unlock(&irq->lock);
@@ -175,5 +182,7 @@
 #endif
 	}
-	trap_virtual_eoi();
+	
+	if (!ack)
+		trap_virtual_eoi();
 }
 
