diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
index 3e5ec5c69f8056203328aba4b56cfb8e1b8ad867..7510cdae2ed4083cdb205faa8d89084928d68131 100644
--- a/arch/i386/kernel/io_apic.c
+++ b/arch/i386/kernel/io_apic.c
@@ -682,6 +682,21 @@ __initcall(balanced_irq_init);
 
 #else /* !SMP */
 static inline void move_irq(int irq) { }
+
+void send_IPI_self(int vector)
+{
+	unsigned int cfg;
+
+	/*
+	 * Wait for idle.
+	 */
+	apic_wait_icr_idle();
+	cfg = APIC_DM_FIXED | APIC_DEST_SELF | vector | APIC_DEST_LOGICAL;
+	/*
+	 * Send the IPI. The write to APIC_ICR fires this off.
+	 */
+	apic_write_around(APIC_ICR, cfg);
+}
 #endif /* defined(CONFIG_SMP) */
 
 
diff --git a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h
index 65e0461fd8bedd739c02918d8378c84193fb1857..30e4cfa8395b4d01f1c7b9645386ec0ae6e06fad 100644
--- a/include/asm-i386/hw_irq.h
+++ b/include/asm-i386/hw_irq.h
@@ -107,7 +107,7 @@ static inline void x86_do_profile(struct pt_regs * regs)
 	atomic_inc((atomic_t *)&prof_buffer[eip]);
 }
  
-#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_SMP)
+#if defined(CONFIG_X86_IO_APIC)
 static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i)
 {
 	if (IO_APIC_IRQ(i))