From 18b988720d9e7ce92f05557b38047b75ec98c6a9 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Sun, 28 Nov 2004 21:39:09 -0800 Subject: [PATCH] x86_64: Fix lost edge triggered irqs on UP kernel Patch from Petr Vandrovec Recently I've observed problems with IDE disks while running UP kernel on x86-64 - it complained a lot about lost irq from hda/hdc. I tracked problem down to the problem that at enable_irq() code calls hw_resend_irq(), but on x86-64 hw_resend_irq() does something useful only when CONFIG_SMP is defined, on UP systems it does nothing. Due to this IRQ is lost - and when IDE retries command, it can again happen that IRQ is delivered before IDE code does enable_irq(), and again and again, unless due to drive being lazy finally once kernel does enable_irq() before drive prepares its answer, and things move forward ... to next lost IRQ. Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- include/asm-x86_64/hw_irq.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/asm-x86_64/hw_irq.h b/include/asm-x86_64/hw_irq.h index 4a42816524a8..767e11abd5c5 100644 --- a/include/asm-x86_64/hw_irq.h +++ b/include/asm-x86_64/hw_irq.h @@ -130,7 +130,7 @@ __asm__( \ "push $" #nr "-256 ; " \ "jmp common_interrupt"); -#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)) send_IPI_self(IO_APIC_VECTOR(i)); -- cgit v1.2.3