1+ #! /bin/bash
2+
3+ # CPUFreq Validator: Parallel, Colorized
4+ /var/Runner/init_env
5+ TESTNAME=" CPUFreq_Validation"
6+
7+ # import test functions library
8+ source $TOOLS /functestlib.sh
9+ test_path=$( find_test_case_by_name " $TESTNAME " )
10+ log_info " -----------------------------------------------------------------------------------------"
11+ log_info " -------------------Starting $TESTNAME Testcase----------------------------"
12+ log_info " === CPUFreq Frequency Walker with Validation ==="
13+
14+ # Color codes
15+ GREEN=" \e[32m"
16+ RED=" \e[31m"
17+ YELLOW=" \e[33m"
18+ BLUE=" \e[34m"
19+ NC=" \e[0m" # No Color
20+
21+ NUM_CPUS=$( nproc)
22+ echo -e " ${YELLOW} Detected $NUM_CPUS CPU cores.${NC} "
23+
24+ overall_pass=true
25+ declare -A core_status
26+
27+ validate_cpu_core () {
28+ local cpu=$1
29+ local core_id=$2
30+
31+ echo -e " ${BLUE} Processing $cpu ...${NC} "
32+
33+ if [ ! -d " $cpu /cpufreq" ]; then
34+ echo -e " ${BLUE} [SKIP]${NC} $cpu does not support cpufreq."
35+ core_status[" $core_id " ]=" skip"
36+ return
37+ fi
38+
39+ available_freqs=$( cat " $cpu /cpufreq/scaling_available_frequencies" 2> /dev/null)
40+
41+ if [ -z " $available_freqs " ]; then
42+ echo -e " ${YELLOW} [INFO]${NC} No available frequencies for $cpu . Skipping..."
43+ core_status[" $core_id " ]=" skip"
44+ return
45+ fi
46+
47+ # Set governor to userspace
48+ if echo " userspace" | tee " $cpu /cpufreq/scaling_governor" > /dev/null; then
49+ echo -e " ${YELLOW} [INFO]${NC} Set governor to userspace."
50+ else
51+ echo -e " ${RED} [ERROR]${NC} Cannot set userspace governor for $cpu ."
52+ core_status[" $core_id " ]=" fail"
53+ return
54+ fi
55+
56+ core_status[" $core_id " ]=" pass" # Assume pass unless a failure happens
57+
58+ for freq in $available_freqs ; do
59+ log_info " Setting $cpu to frequency $freq kHz..."
60+ if echo $freq | tee " $cpu /cpufreq/scaling_setspeed" > /dev/null; then
61+ sleep 0.2
62+ actual_freq=$( cat " $cpu /cpufreq/scaling_cur_freq" )
63+ if [ " $actual_freq " == " $freq " ]; then
64+ echo -e " ${GREEN} [PASS]${NC} $cpu set to $freq kHz."
65+ else
66+ echo -e " ${RED} [FAIL]${NC} Tried to set $cpu to $freq kHz, but current is $actual_freq kHz."
67+ core_status[" $core_id " ]=" fail"
68+ fi
69+ else
70+ echo -e " ${RED} [ERROR]${NC} Failed to set $cpu to $freq kHz."
71+ core_status[" $core_id " ]=" fail"
72+ fi
73+ done
74+
75+ # Restore governor
76+ echo " Restoring $cpu governor to 'ondemand'..."
77+ echo " ondemand" | sudo tee " $cpu /cpufreq/scaling_governor" > /dev/null
78+ }
79+
80+ # Launch validation per CPU in parallel
81+ cpu_index=0
82+ for cpu in /sys/devices/system/cpu/cpu[0-9]* ; do
83+ validate_cpu_core " $cpu " " $cpu_index " &
84+ (( cpu_index++ ))
85+ done
86+
87+ # Wait for all background jobs to finish
88+ wait
89+
90+ # Summary
91+ log_info " "
92+ log_info " === Per-Core Test Summary ==="
93+ for idx in " ${! core_status[@]} " ; do
94+ status=${core_status[$idx]}
95+ case " $status " in
96+ pass)
97+ echo -e " CPU$idx : ${GREEN} [PASS]${NC} "
98+ ;;
99+ fail)
100+ echo -e " CPU$idx : ${RED} [FAIL]${NC} "
101+ overall_pass=false
102+ ;;
103+ skip)
104+ echo -e " CPU$idx : ${BLUE} [SKIPPED]${NC} "
105+ ;;
106+ * )
107+ echo -e " CPU$idx : ${RED} [UNKNOWN STATUS]${NC} "
108+ overall_pass=false
109+ ;;
110+ esac
111+ done
112+
113+ # Overall result
114+ log_info " "
115+ log_info " === Overall CPUFreq Validation Result ==="
116+ if $overall_pass ; then
117+ echo -e " ${GREEN} [OVERALL PASS]${NC} All CPUs validated successfully."
118+ log_pass " $TESTNAME : Test Passed"
119+ echo " $TESTNAME : Test Passed" > $test_path /$TESTNAME .res
120+ exit 0
121+ else
122+ echo -e " ${RED} [OVERALL FAIL]${NC} Some CPUs failed frequency validation."
123+ log_fail " $TESTNAME : Test Failed"
124+ echo " $TESTNAME : Test Failed" > $test_path /$TESTNAME .res
125+ exit 1
126+ fi
127+
128+ log_info " -------------------Completed $TESTNAME Testcase----------------------------"
0 commit comments