[CPUFREQ] return error when failing to set minfreq
authorMattia Dongili <malattia@linux.it>
Wed, 5 Jul 2006 21:12:20 +0000 (23:12 +0200)
committerDave Jones <davej@redhat.com>
Mon, 31 Jul 2006 22:37:05 +0000 (18:37 -0400)
commit9c9a43ed2734081124407c779b36a4761c41139b
treeb32e4d83e840c46f8ef760bda594d7a02e1c41c9
parent49b1e3ea19b1c95c2f012b8331ffb3b169e4c042
[CPUFREQ] return error when failing to set minfreq

I just stumbled on this bug/feature, this is how to reproduce it:

# echo 450000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
# echo 450000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
# echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# cpufreq-info -p
450000 450000 powersave
# echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq ; echo $?
0
# cpufreq-info -p
450000 450000 powersave

Here it is. The kernel refuses to set a min_freq higher than the
max_freq but it allows a max_freq lower than min_freq (lowering min_freq
also).

This behaviour is pretty straightforward (but undocumented) and it
doesn't return an error altough failing to accomplish the requested
action (set min_freq).
The problem (IMO) is basically that userspace is not allowed to set a
full policy atomically while the kernel always does that thus it must
enforce an ordering on operations.

The attached patch returns -EINVAL if trying to increase frequencies
starting from scaling_min_freq and documents the correct ordering of writes.

Signed-off-by: Mattia Dongili <malattia@linux.it>
Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>
Signed-off-by: Dave Jones <davej@redhat.com>
--
Documentation/cpu-freq/user-guide.txt
drivers/cpufreq/cpufreq.c