Index: kernel/arch/ia32/src/smp/apic.c
===================================================================
--- kernel/arch/ia32/src/smp/apic.c	(revision ef56a4328da1ed71522c868067e6224662037a28)
+++ kernel/arch/ia32/src/smp/apic.c	(revision 3e828ea40985ce126affd5d7faa6ba679802b4db)
@@ -47,4 +47,5 @@
 #include <arch.h>
 #include <ddi/irq.h>
+#include <genarch/pic/pic_ops.h>
 
 #ifdef CONFIG_SMP
@@ -63,4 +64,17 @@
  */
 
+static const char *apic_get_name(void);
+static bool l_apic_is_spurious(unsigned int);
+static void l_apic_handle_spurious(unsigned int);
+
+pic_ops_t apic_pic_ops = {
+	.get_name = apic_get_name,
+	.enable_irqs = io_apic_enable_irqs,
+	.disable_irqs = io_apic_disable_irqs,
+	.eoi = l_apic_eoi,
+	.is_spurious = l_apic_is_spurious,
+	.handle_spurious = l_apic_handle_spurious,
+};
+
 /*
  * These variables either stay configured as initilalized, or are changed by
@@ -125,4 +139,18 @@
 #endif /* LAPIC_VERBOSE */
 
+const char *apic_get_name(void)
+{
+	return "apic";
+}
+
+bool l_apic_is_spurious(unsigned int n)
+{
+	return n == VECTOR_APIC_SPUR;
+}
+
+void l_apic_handle_spurious(unsigned int n)
+{
+}
+
 /** APIC spurious interrupt handler.
  *
@@ -134,7 +162,4 @@
     istate_t *istate __attribute__((unused)))
 {
-#ifdef CONFIG_DEBUG
-	log(LF_ARCH, LVL_DEBUG, "cpu%u: APIC spurious interrupt", CPU->id);
-#endif
 }
 
@@ -175,8 +200,5 @@
 	    (iroutine_t) apic_spurious);
 
-	enable_irqs_function = io_apic_enable_irqs;
-	disable_irqs_function = io_apic_disable_irqs;
-	eoi_function = l_apic_eoi;
-	irqs_info = "apic";
+	pic_ops = &apic_pic_ops;
 
 	/*
