diff options
| -rw-r--r-- | arch/x86/include/asm/apic.h | 8 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 32 |
2 files changed, 5 insertions, 35 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 2bd5a463fd1f..d4cb7e590c06 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
| @@ -204,14 +204,6 @@ static inline int x2apic_enabled(void) | |||
| 204 | 204 | ||
| 205 | extern int get_physical_broadcast(void); | 205 | extern int get_physical_broadcast(void); |
| 206 | 206 | ||
| 207 | #ifdef CONFIG_X86_X2APIC | ||
| 208 | static inline void ack_x2APIC_irq(void) | ||
| 209 | { | ||
| 210 | /* Docs say use 0 for future compatibility */ | ||
| 211 | native_apic_msr_write(APIC_EOI, 0); | ||
| 212 | } | ||
| 213 | #endif | ||
| 214 | |||
| 215 | extern void apic_disable(void); | 207 | extern void apic_disable(void); |
| 216 | extern int lapic_get_maxlvt(void); | 208 | extern int lapic_get_maxlvt(void); |
| 217 | extern void clear_local_APIC(void); | 209 | extern void clear_local_APIC(void); |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 849900022407..ea22a86e3cda 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
| @@ -2552,20 +2552,6 @@ eoi_ioapic_irq(struct irq_desc *desc) | |||
| 2552 | spin_unlock_irqrestore(&ioapic_lock, flags); | 2552 | spin_unlock_irqrestore(&ioapic_lock, flags); |
| 2553 | } | 2553 | } |
| 2554 | 2554 | ||
| 2555 | #ifdef CONFIG_X86_X2APIC | ||
| 2556 | static void ack_x2apic_level(unsigned int irq) | ||
| 2557 | { | ||
| 2558 | struct irq_desc *desc = irq_to_desc(irq); | ||
| 2559 | ack_x2APIC_irq(); | ||
| 2560 | eoi_ioapic_irq(desc); | ||
| 2561 | } | ||
| 2562 | |||
| 2563 | static void ack_x2apic_edge(unsigned int irq) | ||
| 2564 | { | ||
| 2565 | ack_x2APIC_irq(); | ||
| 2566 | } | ||
| 2567 | #endif | ||
| 2568 | |||
| 2569 | static void ack_apic_edge(unsigned int irq) | 2555 | static void ack_apic_edge(unsigned int irq) |
| 2570 | { | 2556 | { |
| 2571 | struct irq_desc *desc = irq_to_desc(irq); | 2557 | struct irq_desc *desc = irq_to_desc(irq); |
| @@ -2629,9 +2615,6 @@ static void ack_apic_level(unsigned int irq) | |||
| 2629 | */ | 2615 | */ |
| 2630 | ack_APIC_irq(); | 2616 | ack_APIC_irq(); |
| 2631 | 2617 | ||
| 2632 | if (irq_remapped(irq)) | ||
| 2633 | eoi_ioapic_irq(desc); | ||
| 2634 | |||
| 2635 | /* Now we can move and renable the irq */ | 2618 | /* Now we can move and renable the irq */ |
| 2636 | if (unlikely(do_unmask_irq)) { | 2619 | if (unlikely(do_unmask_irq)) { |
| 2637 | /* Only migrate the irq if the ack has been received. | 2620 | /* Only migrate the irq if the ack has been received. |
| @@ -2680,20 +2663,15 @@ static void ack_apic_level(unsigned int irq) | |||
| 2680 | #ifdef CONFIG_INTR_REMAP | 2663 | #ifdef CONFIG_INTR_REMAP |
| 2681 | static void ir_ack_apic_edge(unsigned int irq) | 2664 | static void ir_ack_apic_edge(unsigned int irq) |
| 2682 | { | 2665 | { |
| 2683 | #ifdef CONFIG_X86_X2APIC | 2666 | ack_APIC_irq(); |
| 2684 | if (x2apic_enabled()) | ||
| 2685 | return ack_x2apic_edge(irq); | ||
| 2686 | #endif | ||
| 2687 | return ack_apic_edge(irq); | ||
| 2688 | } | 2667 | } |
| 2689 | 2668 | ||
| 2690 | static void ir_ack_apic_level(unsigned int irq) | 2669 | static void ir_ack_apic_level(unsigned int irq) |
| 2691 | { | 2670 | { |
| 2692 | #ifdef CONFIG_X86_X2APIC | 2671 | struct irq_desc *desc = irq_to_desc(irq); |
| 2693 | if (x2apic_enabled()) | 2672 | |
| 2694 | return ack_x2apic_level(irq); | 2673 | ack_APIC_irq(); |
| 2695 | #endif | 2674 | eoi_ioapic_irq(desc); |
| 2696 | return ack_apic_level(irq); | ||
| 2697 | } | 2675 | } |
| 2698 | #endif /* CONFIG_INTR_REMAP */ | 2676 | #endif /* CONFIG_INTR_REMAP */ |
| 2699 | 2677 | ||
