From: Andrew M. <ak...@os...> - 2005-06-25 22:19:53
|
Begin forwarded message: Date: Sat, 25 Jun 2005 14:01:10 -0700 From: Stefan Baums <baums@u.washington.edu> To: lin...@vg... Subject: ACPI and the idle loop - possible bug Some Lenove (IBM) ThinkPad models (in my case the ThinkPad X41 2528-6NU) produce irritating high-pitch crackling noises under Linux in certain conditions, see the discussion here: http://thinkwiki.org/wiki/Problem_with_high_pitch_noises This noise only occurs when the processor is not busy (with, e.g., compiling or video playback), so it seems to be related to the idle loop (see also below about 'idle=halt'). Furthermore, it seems to be caused by something that ACPI is doing to the processor: if the 'processor' module (and its dependants: 'speedstep_centrino'/'acpi_cpufreq' and 'thermal') are not loaded, the high-pitch noise does not occur. If the 'processor' module (and its dependants) _are_ loaded, then the noise can be initially avoided by passing the boot parameter idle=halt to the kernel (causing it to halt, not poll, the processor during idle loops), but this workaround _only_ works until either 1) the system resumes from either suspend or hibernation, or 2) the power state changes from battery to plugged-in or vice versa. whereupon the high-pitch noise makes a return. Taken all together, it would appear that the ACPI system is doubly at fault: - First, for causing the high-pitch noise to start with, though it could be argued that this is a hardware defect that is just triggered by ACPI. (However not by Windows XP, on the same computer, so it is definitely avoidable.) - Second, for apparently not respecting the kernel boot parameter "idle=halt" when it resumes or changes power state: it seems like ACPI is reverting to idle polling on those occasions. Do you agree with this analysis? Is it clear what ACPI's root problem ('first' above) is, and will it be solved? (Not loading the 'processor', 'speedstep_centrino'/'acpi_cpufreq' and 'thermal' modules - and losing their features - is not an acceptable solution.) As for the 'idle=halt' workaround: Is there any way to test whether a running kernel actually uses polling or halt for the idle loop? What can I do to force ACPI never to use idle polling, but halt instead? My kernel version is Linux 2.6.12, custom-compiled on Ubuntu 5.04. I have enabled all the usual ACPI features as modules. The noise problem occurs both with the 'speedstep_centrino' and the 'acpi_cpufreq' modules. If necessary for diagnosis, I can put up my kernel .config file online somewhere. Many thanks for your help, Stefan PS. Setting the polling frequency to 100 Hz instead of 1000 Hz at compile time, as recommended by some people on the ThinkWiki page, did not have any effect on the noise problem on my computer. -- Stefan Baums Asian Languages and Literature University of Washington - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to maj...@vg... More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |