diff options
| -rw-r--r-- | arch/x86/kernel/io_apic_32.c | 39 | ||||
| -rw-r--r-- | arch/x86/kernel/io_apic_64.c | 40 |
2 files changed, 44 insertions, 35 deletions
diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c index eabaf9244f5b..de9aa0e3a9c5 100644 --- a/arch/x86/kernel/io_apic_32.c +++ b/arch/x86/kernel/io_apic_32.c | |||
| @@ -2177,8 +2177,9 @@ static inline void __init check_timer(void) | |||
| 2177 | pin2 = ioapic_i8259.pin; | 2177 | pin2 = ioapic_i8259.pin; |
| 2178 | apic2 = ioapic_i8259.apic; | 2178 | apic2 = ioapic_i8259.apic; |
| 2179 | 2179 | ||
| 2180 | printk(KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n", | 2180 | apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X " |
| 2181 | vector, apic1, pin1, apic2, pin2); | 2181 | "apic1=%d pin1=%d apic2=%d pin2=%d\n", |
| 2182 | vector, apic1, pin1, apic2, pin2); | ||
| 2182 | 2183 | ||
| 2183 | /* | 2184 | /* |
| 2184 | * Some BIOS writers are clueless and report the ExtINTA | 2185 | * Some BIOS writers are clueless and report the ExtINTA |
| @@ -2216,12 +2217,13 @@ static inline void __init check_timer(void) | |||
| 2216 | } | 2217 | } |
| 2217 | clear_IO_APIC_pin(apic1, pin1); | 2218 | clear_IO_APIC_pin(apic1, pin1); |
| 2218 | if (!no_pin1) | 2219 | if (!no_pin1) |
| 2219 | printk(KERN_ERR "..MP-BIOS bug: " | 2220 | apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: " |
| 2220 | "8254 timer not connected to IO-APIC\n"); | 2221 | "8254 timer not connected to IO-APIC\n"); |
| 2221 | 2222 | ||
| 2222 | printk(KERN_INFO "...trying to set up timer (IRQ0) " | 2223 | apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer " |
| 2223 | "through the 8259A ... "); | 2224 | "(IRQ0) through the 8259A ...\n"); |
| 2224 | printk("\n..... (found pin %d) ...", pin2); | 2225 | apic_printk(APIC_QUIET, KERN_INFO |
| 2226 | "..... (found apic %d pin %d) ...\n", apic2, pin2); | ||
| 2225 | /* | 2227 | /* |
| 2226 | * legacy devices should be connected to IO APIC #0 | 2228 | * legacy devices should be connected to IO APIC #0 |
| 2227 | */ | 2229 | */ |
| @@ -2230,7 +2232,7 @@ static inline void __init check_timer(void) | |||
| 2230 | unmask_IO_APIC_irq(0); | 2232 | unmask_IO_APIC_irq(0); |
| 2231 | enable_8259A_irq(0); | 2233 | enable_8259A_irq(0); |
| 2232 | if (timer_irq_works()) { | 2234 | if (timer_irq_works()) { |
| 2233 | printk("works.\n"); | 2235 | apic_printk(APIC_QUIET, KERN_INFO "....... works.\n"); |
| 2234 | timer_through_8259 = 1; | 2236 | timer_through_8259 = 1; |
| 2235 | if (nmi_watchdog == NMI_IO_APIC) { | 2237 | if (nmi_watchdog == NMI_IO_APIC) { |
| 2236 | disable_8259A_irq(0); | 2238 | disable_8259A_irq(0); |
| @@ -2244,30 +2246,33 @@ static inline void __init check_timer(void) | |||
| 2244 | */ | 2246 | */ |
| 2245 | disable_8259A_irq(0); | 2247 | disable_8259A_irq(0); |
| 2246 | clear_IO_APIC_pin(apic2, pin2); | 2248 | clear_IO_APIC_pin(apic2, pin2); |
| 2247 | printk(" failed.\n"); | 2249 | apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n"); |
| 2248 | } | 2250 | } |
| 2249 | 2251 | ||
| 2250 | if (nmi_watchdog == NMI_IO_APIC) { | 2252 | if (nmi_watchdog == NMI_IO_APIC) { |
| 2251 | printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); | 2253 | apic_printk(APIC_QUIET, KERN_WARNING "timer doesn't work " |
| 2254 | "through the IO-APIC - disabling NMI Watchdog!\n"); | ||
| 2252 | nmi_watchdog = NMI_NONE; | 2255 | nmi_watchdog = NMI_NONE; |
| 2253 | } | 2256 | } |
| 2254 | timer_ack = 0; | 2257 | timer_ack = 0; |
| 2255 | 2258 | ||
| 2256 | printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); | 2259 | apic_printk(APIC_QUIET, KERN_INFO |
| 2260 | "...trying to set up timer as Virtual Wire IRQ...\n"); | ||
| 2257 | 2261 | ||
| 2258 | lapic_register_intr(0, vector); | 2262 | lapic_register_intr(0, vector); |
| 2259 | apic_write(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ | 2263 | apic_write(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ |
| 2260 | enable_8259A_irq(0); | 2264 | enable_8259A_irq(0); |
| 2261 | 2265 | ||
| 2262 | if (timer_irq_works()) { | 2266 | if (timer_irq_works()) { |
| 2263 | printk(" works.\n"); | 2267 | apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); |
| 2264 | goto out; | 2268 | goto out; |
| 2265 | } | 2269 | } |
| 2266 | disable_8259A_irq(0); | 2270 | disable_8259A_irq(0); |
| 2267 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); | 2271 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); |
| 2268 | printk(" failed.\n"); | 2272 | apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n"); |
| 2269 | 2273 | ||
| 2270 | printk(KERN_INFO "...trying to set up timer as ExtINT IRQ..."); | 2274 | apic_printk(APIC_QUIET, KERN_INFO |
| 2275 | "...trying to set up timer as ExtINT IRQ...\n"); | ||
| 2271 | 2276 | ||
| 2272 | init_8259A(0); | 2277 | init_8259A(0); |
| 2273 | make_8259A_irq(0); | 2278 | make_8259A_irq(0); |
| @@ -2276,12 +2281,12 @@ static inline void __init check_timer(void) | |||
| 2276 | unlock_ExtINT_logic(); | 2281 | unlock_ExtINT_logic(); |
| 2277 | 2282 | ||
| 2278 | if (timer_irq_works()) { | 2283 | if (timer_irq_works()) { |
| 2279 | printk(" works.\n"); | 2284 | apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); |
| 2280 | goto out; | 2285 | goto out; |
| 2281 | } | 2286 | } |
| 2282 | printk(" failed :(.\n"); | 2287 | apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n"); |
| 2283 | panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " | 2288 | panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " |
| 2284 | "report. Then try booting with the 'noapic' option"); | 2289 | "report. Then try booting with the 'noapic' option.\n"); |
| 2285 | out: | 2290 | out: |
| 2286 | local_irq_restore(flags); | 2291 | local_irq_restore(flags); |
| 2287 | } | 2292 | } |
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index 834b06afef43..64a46affd858 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c | |||
| @@ -1697,8 +1697,9 @@ static inline void __init check_timer(void) | |||
| 1697 | pin2 = ioapic_i8259.pin; | 1697 | pin2 = ioapic_i8259.pin; |
| 1698 | apic2 = ioapic_i8259.apic; | 1698 | apic2 = ioapic_i8259.apic; |
| 1699 | 1699 | ||
| 1700 | apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n", | 1700 | apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X " |
| 1701 | cfg->vector, apic1, pin1, apic2, pin2); | 1701 | "apic1=%d pin1=%d apic2=%d pin2=%d\n", |
| 1702 | cfg->vector, apic1, pin1, apic2, pin2); | ||
| 1702 | 1703 | ||
| 1703 | /* | 1704 | /* |
| 1704 | * Some BIOS writers are clueless and report the ExtINTA | 1705 | * Some BIOS writers are clueless and report the ExtINTA |
| @@ -1736,14 +1737,13 @@ static inline void __init check_timer(void) | |||
| 1736 | } | 1737 | } |
| 1737 | clear_IO_APIC_pin(apic1, pin1); | 1738 | clear_IO_APIC_pin(apic1, pin1); |
| 1738 | if (!no_pin1) | 1739 | if (!no_pin1) |
| 1739 | apic_printk(APIC_QUIET,KERN_ERR "..MP-BIOS bug: " | 1740 | apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: " |
| 1740 | "8254 timer not connected to IO-APIC\n"); | 1741 | "8254 timer not connected to IO-APIC\n"); |
| 1741 | 1742 | ||
| 1742 | apic_printk(APIC_VERBOSE,KERN_INFO | 1743 | apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer " |
| 1743 | "...trying to set up timer (IRQ0) " | 1744 | "(IRQ0) through the 8259A ...\n"); |
| 1744 | "through the 8259A ... "); | 1745 | apic_printk(APIC_QUIET, KERN_INFO |
| 1745 | apic_printk(APIC_VERBOSE,"\n..... (found apic %d pin %d) ...", | 1746 | "..... (found apic %d pin %d) ...\n", apic2, pin2); |
| 1746 | apic2, pin2); | ||
| 1747 | /* | 1747 | /* |
| 1748 | * legacy devices should be connected to IO APIC #0 | 1748 | * legacy devices should be connected to IO APIC #0 |
| 1749 | */ | 1749 | */ |
| @@ -1752,7 +1752,7 @@ static inline void __init check_timer(void) | |||
| 1752 | unmask_IO_APIC_irq(0); | 1752 | unmask_IO_APIC_irq(0); |
| 1753 | enable_8259A_irq(0); | 1753 | enable_8259A_irq(0); |
| 1754 | if (timer_irq_works()) { | 1754 | if (timer_irq_works()) { |
| 1755 | apic_printk(APIC_VERBOSE," works.\n"); | 1755 | apic_printk(APIC_QUIET, KERN_INFO "....... works.\n"); |
| 1756 | timer_through_8259 = 1; | 1756 | timer_through_8259 = 1; |
| 1757 | if (nmi_watchdog == NMI_IO_APIC) { | 1757 | if (nmi_watchdog == NMI_IO_APIC) { |
| 1758 | disable_8259A_irq(0); | 1758 | disable_8259A_irq(0); |
| @@ -1766,29 +1766,32 @@ static inline void __init check_timer(void) | |||
| 1766 | */ | 1766 | */ |
| 1767 | disable_8259A_irq(0); | 1767 | disable_8259A_irq(0); |
| 1768 | clear_IO_APIC_pin(apic2, pin2); | 1768 | clear_IO_APIC_pin(apic2, pin2); |
| 1769 | apic_printk(APIC_VERBOSE," failed.\n"); | 1769 | apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n"); |
| 1770 | } | 1770 | } |
| 1771 | 1771 | ||
| 1772 | if (nmi_watchdog == NMI_IO_APIC) { | 1772 | if (nmi_watchdog == NMI_IO_APIC) { |
| 1773 | printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); | 1773 | apic_printk(APIC_QUIET, KERN_WARNING "timer doesn't work " |
| 1774 | "through the IO-APIC - disabling NMI Watchdog!\n"); | ||
| 1774 | nmi_watchdog = NMI_NONE; | 1775 | nmi_watchdog = NMI_NONE; |
| 1775 | } | 1776 | } |
| 1776 | 1777 | ||
| 1777 | apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); | 1778 | apic_printk(APIC_QUIET, KERN_INFO |
| 1779 | "...trying to set up timer as Virtual Wire IRQ...\n"); | ||
| 1778 | 1780 | ||
| 1779 | lapic_register_intr(0); | 1781 | lapic_register_intr(0); |
| 1780 | apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ | 1782 | apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ |
| 1781 | enable_8259A_irq(0); | 1783 | enable_8259A_irq(0); |
| 1782 | 1784 | ||
| 1783 | if (timer_irq_works()) { | 1785 | if (timer_irq_works()) { |
| 1784 | apic_printk(APIC_VERBOSE," works.\n"); | 1786 | apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); |
| 1785 | goto out; | 1787 | goto out; |
| 1786 | } | 1788 | } |
| 1787 | disable_8259A_irq(0); | 1789 | disable_8259A_irq(0); |
| 1788 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector); | 1790 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector); |
| 1789 | apic_printk(APIC_VERBOSE," failed.\n"); | 1791 | apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n"); |
| 1790 | 1792 | ||
| 1791 | apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ..."); | 1793 | apic_printk(APIC_QUIET, KERN_INFO |
| 1794 | "...trying to set up timer as ExtINT IRQ...\n"); | ||
| 1792 | 1795 | ||
| 1793 | init_8259A(0); | 1796 | init_8259A(0); |
| 1794 | make_8259A_irq(0); | 1797 | make_8259A_irq(0); |
| @@ -1797,11 +1800,12 @@ static inline void __init check_timer(void) | |||
| 1797 | unlock_ExtINT_logic(); | 1800 | unlock_ExtINT_logic(); |
| 1798 | 1801 | ||
| 1799 | if (timer_irq_works()) { | 1802 | if (timer_irq_works()) { |
| 1800 | apic_printk(APIC_VERBOSE," works.\n"); | 1803 | apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); |
| 1801 | goto out; | 1804 | goto out; |
| 1802 | } | 1805 | } |
| 1803 | apic_printk(APIC_VERBOSE," failed :(.\n"); | 1806 | apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n"); |
| 1804 | panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n"); | 1807 | panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " |
| 1808 | "report. Then try booting with the 'noapic' option.\n"); | ||
| 1805 | out: | 1809 | out: |
| 1806 | local_irq_restore(flags); | 1810 | local_irq_restore(flags); |
| 1807 | } | 1811 | } |
