diff options
-rw-r--r-- | arch/x86/kernel/apic_64.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/io_apic_64.c | 7 | ||||
-rw-r--r-- | include/asm-x86/hw_irq_64.h | 1 |
3 files changed, 13 insertions, 2 deletions
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c index 915808bd8a2a..994298bf4921 100644 --- a/arch/x86/kernel/apic_64.c +++ b/arch/x86/kernel/apic_64.c | |||
@@ -774,6 +774,13 @@ void __cpuinit setup_local_APIC(void) | |||
774 | value = APIC_DM_NMI | APIC_LVT_MASKED; | 774 | value = APIC_DM_NMI | APIC_LVT_MASKED; |
775 | apic_write(APIC_LVT1, value); | 775 | apic_write(APIC_LVT1, value); |
776 | 776 | ||
777 | /* | ||
778 | * Now enable IO-APICs, actually call clear_IO_APIC | ||
779 | * We need clear_IO_APIC before enabling vector on BP | ||
780 | */ | ||
781 | if (!smp_processor_id() && !skip_ioapic_setup && nr_ioapics) | ||
782 | enable_IO_APIC(); | ||
783 | |||
777 | { | 784 | { |
778 | unsigned oldvalue; | 785 | unsigned oldvalue; |
779 | maxlvt = lapic_get_maxlvt(); | 786 | maxlvt = lapic_get_maxlvt(); |
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index 3e471d0fb150..4ef85a3b3f9f 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c | |||
@@ -1172,7 +1172,7 @@ void __apicdebuginit print_PIC(void) | |||
1172 | 1172 | ||
1173 | #endif /* 0 */ | 1173 | #endif /* 0 */ |
1174 | 1174 | ||
1175 | static void __init enable_IO_APIC(void) | 1175 | void __init enable_IO_APIC(void) |
1176 | { | 1176 | { |
1177 | union IO_APIC_reg_01 reg_01; | 1177 | union IO_APIC_reg_01 reg_01; |
1178 | int i8259_apic, i8259_pin; | 1178 | int i8259_apic, i8259_pin; |
@@ -1789,7 +1789,10 @@ __setup("no_timer_check", notimercheck); | |||
1789 | 1789 | ||
1790 | void __init setup_IO_APIC(void) | 1790 | void __init setup_IO_APIC(void) |
1791 | { | 1791 | { |
1792 | enable_IO_APIC(); | 1792 | |
1793 | /* | ||
1794 | * calling enable_IO_APIC() is moved to setup_local_APIC for BP | ||
1795 | */ | ||
1793 | 1796 | ||
1794 | if (acpi_ioapic) | 1797 | if (acpi_ioapic) |
1795 | io_apic_irqs = ~0; /* all IRQs go through IOAPIC */ | 1798 | io_apic_irqs = ~0; /* all IRQs go through IOAPIC */ |
diff --git a/include/asm-x86/hw_irq_64.h b/include/asm-x86/hw_irq_64.h index a470d59da678..a346159b6ac3 100644 --- a/include/asm-x86/hw_irq_64.h +++ b/include/asm-x86/hw_irq_64.h | |||
@@ -135,6 +135,7 @@ extern void init_8259A(int aeoi); | |||
135 | extern void send_IPI_self(int vector); | 135 | extern void send_IPI_self(int vector); |
136 | extern void init_VISWS_APIC_irqs(void); | 136 | extern void init_VISWS_APIC_irqs(void); |
137 | extern void setup_IO_APIC(void); | 137 | extern void setup_IO_APIC(void); |
138 | extern void enable_IO_APIC(void); | ||
138 | extern void disable_IO_APIC(void); | 139 | extern void disable_IO_APIC(void); |
139 | extern void print_IO_APIC(void); | 140 | extern void print_IO_APIC(void); |
140 | extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); | 141 | extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn); |