diff options
| -rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 085e60e303cf..b377b973899e 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
| @@ -2583,6 +2583,20 @@ static void ack_apic_level(unsigned int irq) | |||
| 2583 | */ | 2583 | */ |
| 2584 | ack_APIC_irq(); | 2584 | ack_APIC_irq(); |
| 2585 | 2585 | ||
| 2586 | /* Tail end of version 0x11 I/O APIC bug workaround */ | ||
| 2587 | if (!(v & (1 << (i & 0x1f)))) { | ||
| 2588 | atomic_inc(&irq_mis_count); | ||
| 2589 | |||
| 2590 | if (use_eoi_reg) | ||
| 2591 | eoi_ioapic_irq(desc); | ||
| 2592 | else { | ||
| 2593 | spin_lock(&ioapic_lock); | ||
| 2594 | __mask_and_edge_IO_APIC_irq(cfg); | ||
| 2595 | __unmask_and_level_IO_APIC_irq(cfg); | ||
| 2596 | spin_unlock(&ioapic_lock); | ||
| 2597 | } | ||
| 2598 | } | ||
| 2599 | |||
| 2586 | /* Now we can move and renable the irq */ | 2600 | /* Now we can move and renable the irq */ |
| 2587 | if (unlikely(do_unmask_irq)) { | 2601 | if (unlikely(do_unmask_irq)) { |
| 2588 | /* Only migrate the irq if the ack has been received. | 2602 | /* Only migrate the irq if the ack has been received. |
| @@ -2616,20 +2630,6 @@ static void ack_apic_level(unsigned int irq) | |||
| 2616 | move_masked_irq(irq); | 2630 | move_masked_irq(irq); |
| 2617 | unmask_IO_APIC_irq_desc(desc); | 2631 | unmask_IO_APIC_irq_desc(desc); |
| 2618 | } | 2632 | } |
| 2619 | |||
| 2620 | /* Tail end of version 0x11 I/O APIC bug workaround */ | ||
| 2621 | if (!(v & (1 << (i & 0x1f)))) { | ||
| 2622 | atomic_inc(&irq_mis_count); | ||
| 2623 | |||
| 2624 | if (use_eoi_reg) | ||
| 2625 | eoi_ioapic_irq(desc); | ||
| 2626 | else { | ||
| 2627 | spin_lock(&ioapic_lock); | ||
| 2628 | __mask_and_edge_IO_APIC_irq(cfg); | ||
| 2629 | __unmask_and_level_IO_APIC_irq(cfg); | ||
| 2630 | spin_unlock(&ioapic_lock); | ||
| 2631 | } | ||
| 2632 | } | ||
| 2633 | } | 2633 | } |
| 2634 | 2634 | ||
| 2635 | #ifdef CONFIG_INTR_REMAP | 2635 | #ifdef CONFIG_INTR_REMAP |
