diff options
| author | Dominik Brodowski <linux@brodo.de> | 2003-01-12 21:23:07 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2003-01-12 21:23:07 -0800 |
| commit | 74e7a24b86f6c614db1fa1d2251de0a2bd9dae6a (patch) | |
| tree | 0431a92a1d5f7c511504ab2826cd19eb4c50a25d /include/linux | |
| parent | ba3e3dba0eb04168649220368795a7a6abf0ea82 (diff) | |
[PATCH] cpufreq: add sysfs interface
This patch adds a sysfs interface to the cpufreq core, and marks the
previous /proc/cpufreq interface as deprecated.
As in drivers/base/cpu.c a "CPU driver" is registered, cpufreq acts as
"interface" to this, offering the following files for each CPU
(in /system/devices/sys/cpu.../) where CPUfreq support is present
cpuinfo_min_freq (ro) - minimum frequency (in kHz) the CPU supports
cpuinfo_max_freq (ro) - maximum frequency (in kHz) the CPU supports
scaling_min_freq (rw) - minimum frequency (in kHz) cpufreq may scale
the CPU core to
scaling_max_freq (rw) - maximum frequency (in kHz) cpufreq may scale
the CPU core to
scaling_governor (rw) - governor == "A feedback device on a machine
or engine that is used to provide
automatic control, as of speed,
pressure, or temperature" [1, as noted
by David Kimdon]. Decides what frequency
is used. Currently, only "performance"
and "powersave" are supported, more may
be added later.
(In future, a file scaling_driver (ro) which shows what CPUfreq driver
is used (arm-sa1100, gx-suspmod, speedstep, longrun, powernow-k6,
...) might be added, and this driver will be allowed to add files
scaling_driver_* for driver-specific settings like "prefer fast FSB".
And scaling_governor_* files might offer settings for the governor.)
To implement this sysfs interface, the driver model "interface" code
is used. Unfortunately, it has a non-trivial locking bug in
drivers/base/intf.c: there's a down_write call for
cls->subsys.rwsem in add_intf(), which then calls add(), which may call
intf->add_device(), which may call interface_add_data(), which calls
kobject_register(), which calls kobject_add(), which then tries to
down_write cls->subsys.rwsem. Remember, that was already locked writable
in add_intf().
Because of that, interface_add_data() is commented out; this means
that no link in /system/class/cpu/cpufreq is added, and that the
dev-removal code isn't called. This shouldn't be a problem yet,
though; as no cpufreq driver I know of is capable of CPU hotplugging.
Dominik
[1] http://dictionary.reference.com/search?q=governor
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/cpufreq.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 0e008ba3618c..12c59ed7d695 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -17,6 +17,7 @@ #include <linux/config.h> #include <linux/notifier.h> #include <linux/threads.h> +#include <linux/device.h> /********************************************************************* @@ -57,6 +58,7 @@ struct cpufreq_policy { unsigned int max; /* in kHz */ unsigned int policy; /* see above */ struct cpufreq_cpuinfo cpuinfo; /* see above */ + struct intf_data intf; /* interface data */ }; #define CPUFREQ_ADJUST (0) |
