Messages in this thread Patch in this message | | | From | Thomas Schlichter <> | Subject | idle Athlon with IOAPIC is 10C warmer since 2.6.3-bk1 | Date | Thu, 4 Mar 2004 13:47:35 +0100 |
| |
Hi,
a few days ago I noticed that my Athlon 3000+ was relatively hot (49C) although it was completely idle. At that time I was running 2.6.3-mm3 with ACPI and IOAPIC-support enabled.
As I tried 2.6.3, the idle temperature was at normal 39C. So I did do some binary search with the -bk patches and found the patch that causes the high idle temperature. It is ChangeSet@1.1626 aka 8259-timer-ack-fix.patch.
A patch to revert that ChangeSet for 2.6.4-rc1-mm2 is attached.
Best regards Thomas Schlichter
P.S.: The high idle temperature only shows if the IOAPIC is used. P.P.S: I already sent this mail last saturday, but as it seems to have never reached LKML I send it again. I'm sorry if you got it twice! --- linux-2.6.4-rc1-mm2/arch/i386/kernel/io_apic.c.orig 2004-03-03 14:56:10.000000000 +0100 +++ linux-2.6.4-rc1-mm2/arch/i386/kernel/io_apic.c 2004-03-03 17:35:03.000000000 +0100 @@ -2157,10 +2157,6 @@ static inline void check_timer(void) { int pin1, pin2; int vector; - unsigned int ver; - - ver = apic_read(APIC_LVR); - ver = GET_APIC_VERSION(ver); /* * get/set the timer IRQ vector: @@ -2174,17 +2170,11 @@ static inline void check_timer(void) * mode for the 8259A whenever interrupts are routed * through I/O APICs. Also IRQ0 has to be enabled in * the 8259A which implies the virtual wire has to be - * disabled in the local APIC. Finally timer interrupts - * need to be acknowledged manually in the 8259A for - * do_slow_timeoffset() and for the i82489DX when using - * the NMI watchdog. + * disabled in the local APIC. */ apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); init_8259A(1); - if (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver)) - timer_ack = 1; - else - timer_ack = !cpu_has_tsc; + timer_ack = 1; enable_8259A_irq(0); pin1 = find_isa_irq_pin(0, mp_INT); @@ -2202,8 +2192,7 @@ static inline void check_timer(void) disable_8259A_irq(0); setup_nmi(); enable_8259A_irq(0); - if (check_nmi_watchdog() < 0); - timer_ack = !cpu_has_tsc; + check_nmi_watchdog(); } return; } @@ -2226,8 +2215,7 @@ static inline void check_timer(void) add_pin_to_irq(0, 0, pin2); if (nmi_watchdog == NMI_IO_APIC) { setup_nmi(); - if (check_nmi_watchdog() < 0); - timer_ack = !cpu_has_tsc; + check_nmi_watchdog(); } return; } | |