• Yi Yang's avatar
    ACPI: fix processor throttling set error · 3d532d5e
    Yi Yang authored
    http://bugzilla.kernel.org/show_bug.cgi?id=9704
    
    When echo some invalid values to /proc/acpi/processor/*/throttling,
    there isn't any error info returned, on the contray, it sets
    throttling value to some T* successfully, obviously, this is incorrect,
    a correct way should be to let it fail and return error info.
    
    This patch fixed the aforementioned issue, it also enables
    /proc/acpi/processor/*/throttling to accept such values as 't0' and 'T0',
    it also strictly limits /proc/acpi/processor/*/throttling only to accept
     "*", "t*" and "T*", "*" is the throttling state value the processor can
    support, current, it is 0 - 7.
    
    Before applying this patch, the test result is below:
    
    [root@localhost acpi]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T1
    state available: T0 to T7
    states:
        T0:                  100%
       *T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost acpi]# echo "1xxxxxx" > /proc/acpi/processor/CPU0/throttling
    [root@localhost acpi]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T1
    state available: T0 to T7
    states:
        T0:                  100%
       *T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost acpi]# echo "0" > /proc/acpi/processor/CPU0/throttling
    [root@localhost acpi]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost acpi]# cd /
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "T0" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "T7" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "T100" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "xxx" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "2xxxx" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T2
    state available: T0 to T7
    states:
        T0:                  100%
        T1:                  87%
       *T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost /]# echo "7777" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost /]# echo "7xxx" > /proc/acpi/processor/CPU0/throttling
    [root@localhost /]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T7
    state available: T0 to T7
    states:
        T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
       *T7:                  12%
    [root@localhost /]#
    
    After applying this patch, the test result is below:
    
    [root@localhost linux-2.6.24-rc6]# echo > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "0" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo "t0" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo "T0" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T0
    state available: T0 to T7
    states:
       *T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
        T7:                  12%
    [root@localhost linux-2.6.24-rc6]# echo "T7" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T7
    state available: T0 to T7
    states:
        T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
       *T7:                  12%
    [root@localhost linux-2.6.24-rc6]# echo "T8" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# vi drivers/acpi/processor_throttling.c
    [root@localhost linux-2.6.24-rc6]# echo "T8" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "t7" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo "t70" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "70" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "7000" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "70" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo "xxx" > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo -n > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo -n "" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo $?
    0
    [root@localhost linux-2.6.24-rc6]# echo -n "" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T7
    state available: T0 to T7
    states:
        T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
       *T7:                  12%
    [root@localhost linux-2.6.24-rc6]# echo -n "" > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# cat /proc/acpi/processor/CPU0/throttling
    state count:             8
    active state:            T7
    state available: T0 to T7
    states:
        T0:                  100%
        T1:                  87%
        T2:                  75%
        T3:                  62%
        T4:                  50%
        T5:                  37%
        T6:                  25%
       *T7:                  12%
    [root@localhost linux-2.6.24-rc6]# echo t0 > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo T0 > /proc/acpi/processor/CPU0/throttling
    [root@localhost linux-2.6.24-rc6]# echo Tt0 > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]# echo T > /proc/acpi/processor/CPU0/throttling
    -bash: echo: write error: Invalid argument
    [root@localhost linux-2.6.24-rc6]#
    Signed-off-by: default avatarYi Yang <yi.y.yang@intel.com>
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
    3d532d5e
processor_throttling.c 31.9 KB