[LTP] [PATCH] thermal: add new test group

Cyril Hrubis chrubis@suse.cz
Thu Nov 6 13:46:21 CET 2025


Hi!
First of all, the tst_test.sh test library is in maitenance mode and new
shell tests should use the tst_loader.sh instead. Have a look at the
testcases/kernel/mem/vma/vma05.sh test on how does it look like.

> diff --git a/testcases/kernel/thermal/thermal01.sh b/testcases/kernel/thermal/thermal01.sh
> new file mode 100755
> index 000000000..723591d94
> --- /dev/null
> +++ b/testcases/kernel/thermal/thermal01.sh
> @@ -0,0 +1,92 @@
> +#!/usr/bin/env bash
> +###############################################################################
> +# Copyright (C) 2025 Intel - http://www.intel.com/
> +#
> +# GNU General Public License for more details.
> +###############################################################################
> +# Contributors:
> +#   Piotr Kubaj <piotr.kubaj@intel.com> (Intel)
> +#     -Initial draft.
> +# Check the CPU package thermal sensor interface for Intel platforms.
> +# It works by checking the initial count of thermal interrupts. Then it
> +# decreases the threshold for sending a thermal interrupt to just above
> +# the current temperature and runs a workload on the CPU. Finally, it restores
> +# the original thermal threshold and checks whether the number of thermal
> +# interrupts increased.

This should be a doc comment instead, the doc comments are parsed and
exported into the LTP documentation:

# ---
# doc
# Tests the CPU package thermal sensor interface for Intel platforms.
#
# It works by checking the initial count of thermal interrupts. Then it
# decreases the threshold for sending a thermal interrupt to just above
# the current temperature and runs a workload on the CPU. Finally, it restores
# the original thermal threshold and checks whether the number of thermal
# interrupts increased.
# ---

Also the tst_loader.sh supports for various metadata, since this test is
supported only on x86 platforms and I guess needs root we can specify
that in the environment as:

# ---
# env
# {
#  "needs_root": true,
#  "supported_archs": ["x86", "x86_64"]
# }
# ---

> +###############################################################################
> +
> +export TST_TESTFUNC=test_interrupt_events
> +export TCID="thermal_interrupt_events"
> +
> +pkg_thermal=""
> +thermal_zone_numbers=""
> +temp=""
> +temp_high=""
> +
> +test_interrupt_events() {
> +	line=$(grep "Thermal event interrupts" /proc/interrupts)
> +	if [ $? -eq 0 ]; then
> +		interrupt_array_init=$(echo "$line" | tr -d "a-zA-Z:" | awk '{$1=$1;print}')
> +		echo "Initial values of thermal interrupt counters: $interrupt_array_init"
> +		num=$(nproc)
> +		echo "Number of logical cores: $num"
> +	else
> +		tst_brk TBROK "Thermal event interrupts is not found."

This should be TCONF which means "test cannot run on this machine"
rather than TBROK which means "test is broken".

> +	fi
> +
> +	# Below we check for the thermal_zone which uses x86_pkg_temp driver
> +	thermal_zone_numbers=$(grep -l x86_pkg_temp /sys/class/thermal/thermal_zone*/type | sed 's/[^0-9]//g' | tr -t '\n' ' ')
> +	echo "x86_pkg_temp thermal zones: $thermal_zone_numbers"
> +
> +	if [ -z $thermal_zone_numbers ]; then
> +		tst_res TFAIL "No x86_pkg_temp thermal zones found"
> +	fi

This should possibly be TCONF as well. Also this should be tst_brk
instead, since we will otherwise print the TPASS at the end of the
script.

> +	for i in $thermal_zone_numbers; do
> +		echo "Currently testing x86_pkg_temp thermal_zone$i"
> +		TEMP=/sys/class/thermal/thermal_zone$i/temp
> +		temp=$(cat "$TEMP")
> +		echo "thermal_zone$i current temperature is $temp"
> +		if [ "$(echo "$temp <= 0" | bc)" -eq 1 ]; then
> +			tst_brk TBROK "Unexpected zone temperature value $temp"
> +		fi
> +		trip=$(cat /sys/class/thermal/thermal_zone$i/trip_point_1_temp)
> +		# Setting trip_point_1_temp for termal_zone$i to $temp + 10 (0.001°C)
> +		temp_high=$(( temp + 10 ))
> +		echo $temp_high > /sys/class/thermal/thermal_zone$i/trip_point_1_temp
> +		run_time=30
> +		sleep_time=10
> +		while [ $sleep_time -gt 0 ]; do
> +			which -s stress-ng
> +			[ $? -eq 0 ] ||  tst_brk TBROK "stress-ng is missing"
> +			stress-ng --matrix 0 -t $run_time

We try to avoid dependencies on tools that are not installed by default
if possible. Looking around we do have genload tool in LTP already:

			genload --cpu $(getconf _NPROCESSORS_ONLN) -t $run_time

> +			temp_cur=$(cat "$TEMP")
> +			echo "temp_cur: $temp_cur"
> +			[ $temp_cur -gt $temp_high ] && break
> +			sleep $sleep_time
> +			run_time=$(( run_time - 3 ))
> +			sleep_time=$(( sleep_time - 1 ))
> +		done
> +		[ $temp_cur -gt $temp_high ] || tst_res TFAIL "Zone temperature is not rising as expected"
> +
> +		# Restore the original trip_point_1_temp value
> +		echo $trip > /sys/class/thermal/thermal_zone$i/trip_point_1_temp
> +
> +		# Check whether thermal interrupts count actually increased
> +		interrupt_array_later=$(grep "Thermal event interrupts" /proc/interrupts | \
> +			tr -d "a-zA-Z:" | awk '{$1=$1;print}')
> +		echo "Current values of thermal interrupt counters: $interrupt_array_later"
> +		for j in $(seq 1 "$num"); do
> +			interrupt_later=$(echo "$interrupt_array_later" | cut -d " " -f  "$j")
> +			interrupt_init=$(echo "$interrupt_array_init" | cut -d " " -f  "$j")
> +			if [ $interrupt_later -le $interrupt_init ]; then
> +				tst_res TFAIL "x86 package thermal interrupt did not trigger"
> +			else
> +				break
> +			fi
> +		done
> +	done
> +	tst_res TPASS "x86 package thermal interrupt triggered"
> +}
> +
> +. tst_test.sh
> +tst_run

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list