atom feed3 messages in org.freebsd.freebsd-mobileacpi_perf error, powerd exiting
FromSent OnAttachments
Stefan FarfelederAug 27, 2005 2:01 pm 
Philip S. SchulzAug 27, 2005 2:52 pm 
Bruno DucrotAug 29, 2005 9:45 am 
Subject:acpi_perf error, powerd exiting
From:Philip S. Schulz (ph.s@gmx.de)
Date:Aug 27, 2005 2:52:22 pm
List:org.freebsd.freebsd-mobile

Stefan Farfeleder wrote:

Hi,

on my ThinkPad R32 (dmesg attached), acpi_perf reports the following error at times, usually after a period of inactivity:

acpi_perf0: Px transition to 1200 failed acpi_perf0: set freq failed, err 6

This causes powerd to terminate. It seems to be a temporary error, because if I restart powerd, it works again. Should powerd be more fault-tolerant, is this an acpi_perf bug or my hardware broken?

powerd does not recover from such errors, so the fact that it "dies" (actually it prints an error message to stderr and exits) is expected. I guess powerd can easily sort of recover (i.e. continue to run and re-attempt the frequency the next time the frequency needs to be adjusted) from the error you're seeing, but I think that really is no real fix for your problem. See the patch included in this message but please note that I haven't tested it since I don't use acpi_perf and also please note that I don't know what effects this has in interaction with cpufreq and acpi_perf.

As to whether you're seeing a acpi_perf bug or experience hardware problems: I don't know.

Regards,

Phil.

Index: powerd.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/powerd/powerd.c,v retrieving revision 1.11 diff -u -r1.11 powerd.c --- powerd.c 24 Aug 2005 19:42:40 -0000 1.11 +++ powerd.c 27 Aug 2005 14:46:48 -0000 @@ -462,7 +462,7 @@ cpu_running_mark, curfreq, freqs[i]); } if (set_freq(freqs[i])) - err(1, "error setting CPU frequency %d", + warn("error setting CPU frequency %d", freqs[i]); } else if (idle > (total * cpu_idle_mark) / 100 && curfreq > freqs[numfreqs - 1]) { @@ -473,7 +473,7 @@ cpu_idle_mark, curfreq, freqs[i]); } if (set_freq(freqs[i])) - err(1, "error setting CPU frequency %d", + warn("error setting CPU frequency %d", freqs[i]); } }