aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/io_apic_64.c
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2008-05-21 17:09:19 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 03:12:54 -0400
commitecd29476ae0143b1c3641edfa76c0fc3e9ad3021 (patch)
treee8d836d6494ebc131c0b6576e63f87e1fac106aa /arch/x86/kernel/io_apic_64.c
parentd11d5794e0c21a1054e6cd57381050a999ad7232 (diff)
x86: I/O APIC: remove parameters to fiddle with the 8259A
Remove the "disable_8254_timer" and "enable_8254_timer" kernel parameters. Now that AEOI acknowledgements are no longer needed for correct timer operation, the 8259A can be kept disabled unconditionally unless interrupts, either timer or watchdog ones, are actually passed through it. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/io_apic_64.c')
-rw-r--r--arch/x86/kernel/io_apic_64.c21
1 files changed, 2 insertions, 19 deletions
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c
index 7c34e38e421..9f16ca4b5a2 100644
--- a/arch/x86/kernel/io_apic_64.c
+++ b/arch/x86/kernel/io_apic_64.c
@@ -90,7 +90,6 @@ static int no_timer_check;
90 90
91static int disable_timer_pin_1 __initdata; 91static int disable_timer_pin_1 __initdata;
92 92
93int timer_over_8254 __initdata = 1;
94 93
95/* Where if anywhere is the i8259 connect in external int mode */ 94/* Where if anywhere is the i8259 connect in external int mode */
96static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; 95static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
@@ -430,20 +429,6 @@ static int __init disable_timer_pin_setup(char *arg)
430} 429}
431__setup("disable_timer_pin_1", disable_timer_pin_setup); 430__setup("disable_timer_pin_1", disable_timer_pin_setup);
432 431
433static int __init setup_disable_8254_timer(char *s)
434{
435 timer_over_8254 = -1;
436 return 1;
437}
438static int __init setup_enable_8254_timer(char *s)
439{
440 timer_over_8254 = 2;
441 return 1;
442}
443
444__setup("disable_8254_timer", setup_disable_8254_timer);
445__setup("enable_8254_timer", setup_enable_8254_timer);
446
447 432
448/* 433/*
449 * Find the IRQ entry number of a certain pin. 434 * Find the IRQ entry number of a certain pin.
@@ -1674,8 +1659,6 @@ static inline void __init check_timer(void)
1674 */ 1659 */
1675 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); 1660 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
1676 init_8259A(1); 1661 init_8259A(1);
1677 if (timer_over_8254 > 0)
1678 enable_8259A_irq(0);
1679 1662
1680 pin1 = find_isa_irq_pin(0, mp_INT); 1663 pin1 = find_isa_irq_pin(0, mp_INT);
1681 apic1 = find_isa_irq_apic(0, mp_INT); 1664 apic1 = find_isa_irq_apic(0, mp_INT);
@@ -1693,7 +1676,6 @@ static inline void __init check_timer(void)
1693 if (!no_timer_check && timer_irq_works()) { 1676 if (!no_timer_check && timer_irq_works()) {
1694 nmi_watchdog_default(); 1677 nmi_watchdog_default();
1695 if (nmi_watchdog == NMI_IO_APIC) { 1678 if (nmi_watchdog == NMI_IO_APIC) {
1696 disable_8259A_irq(0);
1697 setup_nmi(); 1679 setup_nmi();
1698 enable_8259A_irq(0); 1680 enable_8259A_irq(0);
1699 } 1681 }
@@ -1715,6 +1697,7 @@ static inline void __init check_timer(void)
1715 * legacy devices should be connected to IO APIC #0 1697 * legacy devices should be connected to IO APIC #0
1716 */ 1698 */
1717 setup_ExtINT_IRQ0_pin(apic2, pin2, cfg->vector); 1699 setup_ExtINT_IRQ0_pin(apic2, pin2, cfg->vector);
1700 enable_8259A_irq(0);
1718 if (timer_irq_works()) { 1701 if (timer_irq_works()) {
1719 apic_printk(APIC_VERBOSE," works.\n"); 1702 apic_printk(APIC_VERBOSE," works.\n");
1720 nmi_watchdog_default(); 1703 nmi_watchdog_default();
@@ -1726,6 +1709,7 @@ static inline void __init check_timer(void)
1726 /* 1709 /*
1727 * Cleanup, just in case ... 1710 * Cleanup, just in case ...
1728 */ 1711 */
1712 disable_8259A_irq(0);
1729 clear_IO_APIC_pin(apic2, pin2); 1713 clear_IO_APIC_pin(apic2, pin2);
1730 } 1714 }
1731 apic_printk(APIC_VERBOSE," failed.\n"); 1715 apic_printk(APIC_VERBOSE," failed.\n");
@@ -1737,7 +1721,6 @@ static inline void __init check_timer(void)
1737 1721
1738 apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); 1722 apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as Virtual Wire IRQ...");
1739 1723
1740 disable_8259A_irq(0);
1741 irq_desc[0].chip = &lapic_irq_type; 1724 irq_desc[0].chip = &lapic_irq_type;
1742 apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ 1725 apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */
1743 enable_8259A_irq(0); 1726 enable_8259A_irq(0);