On 3 March 2015 at 13:02, Larry Bassel <larry.bas...@linaro.org> wrote:
>
> Add test which checks and prints scheduler domain flags.
>
> Signed-off-by: Larry Bassel <larry.bas...@linaro.org>
> ---
>  cputopology/cputopology_03.sh  | 109 
> +++++++++++++++++++++++++++++++++++++++++
>  cputopology/cputopology_03.txt |   1 +
>  2 files changed, 110 insertions(+)
>  create mode 100755 cputopology/cputopology_03.sh
>  create mode 100644 cputopology/cputopology_03.txt
>
> diff --git a/cputopology/cputopology_03.sh b/cputopology/cputopology_03.sh
> new file mode 100755
> index 0000000..bfff5de
> --- /dev/null
> +++ b/cputopology/cputopology_03.sh
> @@ -0,0 +1,109 @@
> +#!/bin/sh
> +#
> +# PM-QA validation test suite for the power management on Linux
> +#
> +# Copyright (C) 2015, Linaro Limited.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License
> +# as published by the Free Software Foundation; either version 2
> +# of the License, or (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
> USA.
> +#
> +# Contributors:
> +#     Larry Bassel <larry.bas...@linaro.org>
> +#
> +
> +# URL : 
> https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/PmQaSpecification#cputopology_03
> +
> +. ../include/functions.sh
> +
> +is_flag_set() {
> +    flag=$1
> +    mask=$2
> +    message=$3
> +
> +    value=$(( $flag & $mask ))
> +
> +    if [ $value -ne 0 ]; then
> +       echo "$message set"
> +    else
> +       echo "$message not set"
> +    fi
> +}
> +
> +are_flags_set() {
> +    val=$1
> +    domain_num=$2
> +
> +    # flag value, flag description
> +    set -- 0x80  "domain$domain_num share cpu capacity flag" 0x100  
> "domain$domain_num share power domain flag" 0x200  "domain$domain_num share 
> cpu package resources flag"
> +
> +    if [ $(($# % 2)) -ne 0 ]; then
> +        echo "WARNING: malformed flag value, description in test"
> +    fi
> +
> +    nflags=$(($# / 2))
> +    i=1
> +
> +    while [ $i -le $nflags ] ; do
> +       flagval=$((2*i-1))
> +        eval "var1=\${$flagval}"
> +       flagstr=$((2*i))
> +        eval "var2=\${$flagstr}"
> +        is_flag_set $val "$var1" "$var2"
> +       i=$(( i + 1))
> +    done
> +}
> +
> +check_sched_domain_flags() {
> +
> +    cpu_num=$1
> +    domain_num=$2
> +
> +    
> sched_domain_flags=/proc/sys/kernel/sched_domain/$cpu_num/domain$domain_num/flags
> +    val=$(cat $sched_domain_flags)
> +
> +    check "sched_domain_flags (domain $domain_num)" "test \"$val\" != \"-1\""
> +    printf "domain$domain_num flag 0x%x\n" $val
> +
> +    mask=$((0x7fff))
> +    unexpected_bits=$((val & ~mask))
> +
> +    if [ $unexpected_bits -ne 0 ]; then
> +        printf "NOTE: unexpected flag bits 0x%x set\n" $unexpected_bits
> +    fi
> +
> +    are_flags_set $val $domain_num
> +}
> +
> +check_all_sched_domain_flags() {
> +
> +    sched_domain_0_path=/proc/sys/kernel/sched_domain/cpu0
> +
> +    if [ ! -d $sched_domain_0_path ]; then
> +        log_skip "no sched_domain directory present"
> +       return
> +    fi
> +
> +    n=0
> +
> +    sched_domain_flags_path=/proc/sys/kernel/sched_domain/$1/domain0/flags
> +
> +    while [ -e $sched_domain_flags_path ]; do
> +        check_sched_domain_flags $1 $n
> +       n=$(( n + 1))
> +        
> sched_domain_flags_path=/proc/sys/kernel/sched_domain/$1/domain$n/flags
> +    done
> +}
> +
> +for_each_cpu check_all_sched_domain_flags 1 || exit 1
> +test_status_show
> diff --git a/cputopology/cputopology_03.txt b/cputopology/cputopology_03.txt
> new file mode 100644
> index 0000000..e43de69
> --- /dev/null
> +++ b/cputopology/cputopology_03.txt
> @@ -0,0 +1 @@
> +test that the sched_domain files are present and show the topology related 
> flags
> --
> 1.9.1
>

Hi Larry,

I ran your script on the chromebook2 with mainline v4 quickly, and
these are the results I get:

root@linaro-developer:~/pm-qa/cputopology# ./cputopology_03.sh
cputopology_03.0/cpu0: checking sched_domain_flags (domain 0)...            Ok
domain0 flag 0x102f
domain0 share cpu capacity flag not set
domain0 share power domain flag not set
domain0 share cpu package resources flag not set
cputopology_03.0/cpu1: checking sched_domain_flags (domain 0)...            Ok
domain0 flag 0x102f
domain0 share cpu capacity flag not set
domain0 share power domain flag not set
domain0 share cpu package resources flag not set
cputopology_03.0/cpu2: checking sched_domain_flags (domain 0)...            Ok
domain0 flag 0x102f
domain0 share cpu capacity flag not set
domain0 share power domain flag not set
domain0 share cpu package resources flag not set
cputopology_03.0/cpu3: checking sched_domain_flags (domain 0)...            Ok
domain0 flag 0x102f
domain0 share cpu capacity flag not set
domain0 share power domain flag not set
domain0 share cpu package resources flag not set

cputopology_03: pass

I'm not sure if printing the domain0 flag is still necessary except
for debugging, but I'll let others comment.

One question that I may have forgotten to ask you earlier: How did you
define a test failure? AFAICT, I get the impression that the test
"passes" every time, or if it will skip if the sched_domain directory
doesn't exist. I haven't come across an instance where a subtest
fails.

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to