Re: ACPI PM Timer vs. C1 halt issue

From: Thomas Schlichter
Date: Wed Mar 10 2004 - 19:20:48 EST


Hi!

As your problem may be similar to mine,
(http://marc.theaimsgroup.com/?l=linux-kernel&m=107840458123059&w=2)
you may try to boot with ACPI PM timer enabled but with the additional boot
option 'noapic'. If this also cools down your processor, you maybe should try
the attached patch....

Thomas

Am Mittwoch, 10. März 2004 23:48 schrieb Prakash K. Cheemplavam:
> [snip]
>
> > That said, I don't know what caused the regression you describe.
> > Perhaps you can clarfiy the minimal changes necessary to switch between
> > correct and incorrect behaviour?
>
> Simply use tsc as timesource instead of PM Timer (ie not compiling in
> the latter) and all is cool again (now idle temp is as low as 40°C!).
> ACPI as such is included. I attached my current config. I guess one
> could also use a kernel boot parameter to switch between those timers.
>
> I don't know whether it is actual a problem with C1 or whatever. I just
> described my assumption I made. If I disable CPU disconnect, my CPU runs
> hot again even with tsc timer. With ACPI PM timer disconnect makes no
> difference (hot everytime...).
>
> Cheers,
>
> Prakash
--- linux-2.6.4-rc2-mm1/arch/i386/kernel/io_apic.c.orig 2004-03-08 16:29:14.000000000 +0100
+++ linux-2.6.4-rc2-mm1/arch/i386/kernel/io_apic.c 2004-03-08 17:26:40.000000000 +0100
@@ -2181,7 +2181,7 @@ static inline void check_timer(void)
*/
apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
init_8259A(1);
- if (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver))
+ if (nmi_watchdog == NMI_IO_APIC || APIC_INTEGRATED(ver))
timer_ack = 1;
else
timer_ack = !cpu_has_tsc;
@@ -2202,7 +2202,7 @@ static inline void check_timer(void)
disable_8259A_irq(0);
setup_nmi();
enable_8259A_irq(0);
- if (check_nmi_watchdog() < 0);
+ if (check_nmi_watchdog() < 0)
timer_ack = !cpu_has_tsc;
}
return;
@@ -2226,7 +2226,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);
+ if (check_nmi_watchdog() < 0)
timer_ack = !cpu_has_tsc;
}
return;