linux/drivers
Yi Yang 53391fa20c cpufreq: fix obvious condition statement error
The function __cpufreq_set_policy in file drivers/cpufreq/cpufreq.c
has a very obvious error:

        if (policy->min > data->min && policy->min > policy->max) {
                ret = -EINVAL;
                goto error_out;
        }

This condtion statement is wrong because it returns -EINVAL only if
policy->min is greater than policy->max (in this case,
"policy->min > data->min" is true for ever.). In fact, it should
return -EINVAL as well if policy->max is less than data->min.

The correct condition should be:

	if (policy->min > data->max || policy->max < data->min) {

The following test result testifies the above conclusion:

Before applying this patch:

[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
2394000 1596000
[root@yangyi-dev /]# echo 1596000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
1596000
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
1596000
[root@yangyi-dev /]# echo "2000000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
-bash: echo: write error: Invalid argument
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
1596000
[root@yangyi-dev /]# echo "0" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
1596000
[root@yangyi-dev /]# echo "1595000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
1596000
[root@yangyi-dev /]#

After applying this patch:

[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
2394000 1596000
[root@yangyi-dev /]# echo 1596000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
1596000
[root@yangyi-dev /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
1596000
[root@localhost /]# echo "2000000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
-bash: echo: write error: Invalid argument
[root@localhost /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
1596000
[root@localhost /]# echo "0" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
-bash: echo: write error: Invalid argument
[root@localhost /]# echo "1595000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
-bash: echo: write error: Invalid argument
[root@localhost /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
1596000
[root@localhost /]# echo "1596000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
[root@localhost /]# echo "2394000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
[root@localhost /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
2394000
[root@localhost /]

Signed-off-by: Yi Yang <yi.y.yang@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2008-01-30 13:33:34 +01:00
..
acorn/char
acpi x86: don't disable TSC in any C states on AMD Fam10h 2008-01-30 13:32:41 +01:00
amba
ata libata: Change "write_data" to "rw" for some function documentations 2008-01-29 08:48:17 +11:00
atm [ATM]: [he] fixing compilation when you define USE_RBPS_POOL/USE_RBPL_POOL 2008-01-28 15:00:15 -08:00
auxdisplay
base convert drivers/base/power/Makefile to ccflags 2008-01-28 23:14:35 +01:00
block cciss: fix bug in overriding ->data_len before completion 2008-01-29 21:55:18 +01:00
bluetooth [BLUETOOTH]: Always send explicit hci_ll wake-up acks. 2008-01-10 22:24:43 -08:00
cdrom Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2008-01-29 08:52:50 +11:00
char rtc: use the IRQ callback interface in (old) RTC driver 2008-01-30 13:33:31 +01:00
clocksource
connector [NETNS]: Consolidate kernel netlink socket destruction. 2008-01-28 15:08:07 -08:00
cpufreq cpufreq: fix obvious condition statement error 2008-01-30 13:33:34 +01:00
cpuidle Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
crypto [S390] crypto: move s390 Kconfig options. 2008-01-26 14:11:17 +01:00
dca
dio
dma DMA: Convert from class_device to device for DMA engine 2008-01-24 20:40:05 -08:00
edac Driver core: change sysdev classes to use dynamic kobject names 2008-01-24 20:40:40 -08:00
eisa
firewire [SCSI] relax scsi dma alignment 2008-01-11 18:29:22 -06:00
firmware x86: left over fix for leak of early_ioremp in dmi_scan 2008-01-30 13:33:32 +01:00
hid HID: ADS/Tech Radio si470x needs blacklist entry 2008-01-28 14:51:23 +01:00
hwmon hwmon: (it87) request only Environment Controller ports 2008-01-22 07:21:38 -05:00
i2c Merge branch 'orion' into devel 2008-01-28 13:21:30 +00:00
ide blk_end_request: changing ide-cd (take 4) 2008-01-28 10:37:06 +01:00
ieee1394 Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-01-25 17:19:08 -08:00
infiniband Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.25 2008-01-29 22:54:01 +11:00
input x86: replace outb_p() with udelay(2) in drivers/input/mouse/pc110pad.c 2008-01-30 13:31:24 +01:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2008-01-25 08:35:13 -08:00
kvm x86: get rid of _MASK flags 2008-01-30 13:31:27 +01:00
leds
lguest x86: use generic register name in the thread and tss structures 2008-01-30 13:31:02 +01:00
macintosh i2c: Kill rogue driver IDs 2008-01-27 18:14:47 +01:00
mca
md Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
media i2c: Drivers stop using the redundant client list 2008-01-27 18:14:51 +01:00
message blk_end_request: changing i2o_block (take 4) 2008-01-28 10:36:50 +01:00
mfd [ARM] Fix class_device damage caused by 0c55445f20 2008-01-28 10:59:09 +00:00
misc kobject: convert ibmasm to use kref, not kobject 2008-01-24 20:40:08 -08:00
mmc Merge branch 'blk-end-request' of git://git.kernel.dk/linux-2.6-block 2008-01-29 08:51:32 +11:00
mtd mtd: Convert from class_device to device for MTD/mtdchar 2008-01-24 20:40:06 -08:00
net Mostly revert "e1000/e1000e: Move PCI-Express device IDs over to e1000e" 2008-01-30 09:54:54 +11:00
nubus
of
oprofile
parisc [PARISC]: Fix build after ipv4_is_*() changes. 2008-01-28 14:58:20 -08:00
parport
pci Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
pcmcia [ARM] pxa: move memory controller registers into pxa2xx-regs.h 2008-01-26 15:07:54 +00:00
pnp git-x86: drivers/pnp/pnpbios/bioscalls.c build fix 2008-01-30 13:32:31 +01:00
power power supply : use class iteration api 2008-01-24 20:40:44 -08:00
ps3
rapidio remove __attribute_used__ 2008-01-28 23:21:18 +01:00
rtc Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2008-01-29 08:52:50 +11:00
s390 [VLAN]: Turn VLAN_DEV_INFO into inline function 2008-01-28 15:08:32 -08:00
sbus
scsi [NETNS]: Consolidate kernel netlink socket destruction. 2008-01-28 15:08:07 -08:00
serial Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2008-01-29 08:52:50 +11:00
sh
sn
spi [ARM] pxa: make pxa2xx_spi driver use ssp_request()/ssp_free() 2008-01-26 15:07:52 +00:00
ssb ssb: Add boardflags_hi field to the sprom data structure 2008-01-28 15:09:52 -08:00
tc
telephony
uio UIO: constify function pointer tables 2008-01-24 20:40:43 -08:00
usb Merge branch 'pxa-plat' into devel 2008-01-28 13:21:38 +00:00
video Merge branches 'at91', 'ep93xx', 'iop', 'kprobes', 'ks8695', 'misc', 'msm', 's3c2410', 'sa1100' and 'vfp' into devel 2008-01-28 13:21:21 +00:00
virtio
w1 i2c: normal_i2c can be made const (remaining drivers) 2008-01-27 18:14:47 +01:00
watchdog [WATCHDOG] constify function pointer tables 2008-01-25 20:41:30 +00:00
xen
zorro
Kconfig
Makefile