Index: kernel/arch/ia32/src/smp/apic.c
===================================================================
--- kernel/arch/ia32/src/smp/apic.c	(revision bd1deed7b64271415d7ecf3951bd917d8093536f)
+++ kernel/arch/ia32/src/smp/apic.c	(revision 7e5897971c2ec9ea1f833d1f148bc179a7abf5a7)
@@ -140,5 +140,12 @@
 static void l_apic_timer_irq_handler(irq_t *irq, void *arg, ...)
 {
+	/*
+	 * Holding a spinlock could prevent clock() from preempting
+	 * the current thread. In this case, we don't need to hold the
+	 * irq->lock so we just unlock it and then lock it again.
+	 */
+	spinlock_unlock(&irq->lock);
 	clock();
+	spinlock_lock(&irq->lock);
 }
 
