]>
 
 
pilppa.org Git - linux-2.6-omap-h63xx.git/commit 
 
 
 
 
 
 
ACPI: fix acpi fan state set error 
 
Under /proc/acpi, there is a fan control interface, a user can 
set 0 or 3 to /proc/acpi/fan/*/state, 0 denotes D0 state, 3 
denotes D3 state, but in current implementation, a user can 
set a fan to D1 state by any char excluding '1', '2' and '3'. 
 
For example: 
 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost acpi]# echo "" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost acpi]# echo "3" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost acpi]# echo "xxxxx" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  on 
 
Obviously, such inputs as "" and "xxxxx" are invalid for fan state. 
 
This patch fixes this issue, it strictly limits fan state only to 
accept 0, 1, 2 and 3, any other inputs are invalid. 
 
Before applying this patch, the test result is: 
 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost acpi]# echo "" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost acpi]# echo "3" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost acpi]# echo "xxxxx" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost acpi]# echo "3" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost acpi]# echo "3x" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost acpi]# echo "-1x" > /proc/acpi/fan/C31B/state 
[root@localhost acpi]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost acpi]# 
 
After applying this patch, the test result is: 
 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost ~]# echo "" > /proc/acpi/fan/C31B/state 
-bash: echo: write error: Invalid argument 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost ~]# echo "3" > /proc/acpi/fan/C31B/state 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost ~]# echo "xxxxx" > /proc/acpi/fan/C31B/state 
-bash: echo: write error: Invalid argument 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost ~]# echo "-1x" > /proc/acpi/fan/C31B/state 
-bash: echo: write error: Invalid argument 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost ~]# echo "0" > //proc/acpi/fan/C31B/state 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost ~]# echo "4" > //proc/acpi/fan/C31B/state 
-bash: echo: write error: Invalid argument 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost ~]# echo "3" > //proc/acpi/fan/C31B/state 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  off 
[root@localhost ~]# echo "0" > //proc/acpi/fan/C31B/state 
[root@localhost ~]# cat /proc/acpi/fan/C31B/state 
status:                  on 
[root@localhost ~]# echo "3x" > //proc/acpi/fan/C31B/state 
-bash: echo: write error: Invalid argument 
[root@localhost ~]# 
 
Signed-off-by: Yi Yang <yi.y.yang@intel.com>  
Signed-off-by: Andi Kleen <ak@linux.intel.com>  
Acked-by: Zhang Rui <rui.zhang@intel.com>  
Signed-off-by: Len Brown <len.brown@intel.com>