diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2008-05-21 17:09:19 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-08 03:12:54 -0400 |
commit | ecd29476ae0143b1c3641edfa76c0fc3e9ad3021 (patch) | |
tree | e8d836d6494ebc131c0b6576e63f87e1fac106aa /arch/x86/kernel/io_apic_64.c | |
parent | d11d5794e0c21a1054e6cd57381050a999ad7232 (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.c | 21 |
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 | ||
91 | static int disable_timer_pin_1 __initdata; | 91 | static int disable_timer_pin_1 __initdata; |
92 | 92 | ||
93 | int 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 */ |
96 | static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; | 95 | static 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 | ||
433 | static int __init setup_disable_8254_timer(char *s) | ||
434 | { | ||
435 | timer_over_8254 = -1; | ||
436 | return 1; | ||
437 | } | ||
438 | static 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); |