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))