passive cooling and cpufreq

Hajimu UMEMOTO ume at FreeBSD.org
Thu Jul 7 09:46:05 GMT 2005


Hi,

>>>>> On Wed, 06 Jul 2005 17:59:19 -0700
>>>>> Nate Lawson <nate at root.org> said:

nate> I have moved this email to acpi@ for general discussion.

Okay, thanks.

nate> There is a much simpler way to access cpufreq(4) from the kernel that 
nate> shouldn't require modifications.  It exports newbus methods for 
nate> controling the frequency.  This kind of code should work:

nate> That is all, simple eh?  :)  The cpufreq kernel interface wraps access 
nate> to all cpufreq hardware drivers (acpi_perf, est, p4tcc, acpi_throttle, 
nate> etc.)  You only need to call methods on cpufreq0 and it will handle 
nate> getting the desired frequency for you.  See "man 4 cpufreq" for details.

Oh, it's cool.  I didn't know how to obtain cpufreq_dc from outside of
kern_cpu.c.  So, I added some functions into kern_cpu.c in my previous
patch.
However, it seems cpufreq_curr_sysctl() set frequency to all CPUs with
some comment.  Is it enough to set frequency to only one CPU?

nate> acpi_perf has two modes, one that supplies info only.  If your BIOS only 
nate> supports that mode, usually another driver like est will handle the 
nate> actual hardware.  Since cpufreq is smart and probes all possible cpu 
nate> frequency control devices, parsing _PSL is not necessary.  cpufreq(4) 
nate> can actually use more devices than are present in _PSL.  If needed in 
nate> the future, acpi_perf can be linked with _PSL so that dependencies are 
nate> known.

Thank you for clarification.

nate> There should be no conflict with userland.  The above priority value 
nate> (CPUFREQ_PRIO_KERN) specifies that this call overrides settings made 
nate> previously (ie. via sysctl.)  However, cpufreq(4) saves the old setting 
nate> so that once the cooling condition passes, CPUFREQ_SET(dev, NULL, 
nate> CPUFREQ_PRIO_KERN) can be used to restore it.

It's cool.  But, I think it is insufficient.  In passive cooling
state, it appears that there is some room to raise frequency from
powerd(8).  So, powerd(8) tries to raise frequency continuously.  I
think it is not desired behavior.  This is a reason why I modified
cpufreq_curr_sysctl() in my previous patch to return faked value in
passive cooling state.

I made my new patch:

	http://www.imasy.or.jp/~ume/FreeBSD/passive-cooling-20050707.diff

It doesn't modify kern_cpu.c.  Instead, I added some code into
powerd(8) to don't try to update frequency when
hw.acpi.thermal.tz0.passive_active is on.  And, I needed to ignore
EPERM when updating dev.cpu.0.freq.

Sincerely,

--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume at mahoroba.org  ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/


More information about the freebsd-acpi mailing list