public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Piotr Kubaj <piotr.kubaj@intel.com>
Cc: daniel.niestepski@intel.com, tomasz.ossowski@intel.com,
	helena.anna.dubel@intel.com, rafael.j.wysocki@intel.com,
	ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v4] thermal: add new test group
Date: Fri, 28 Nov 2025 12:02:12 +0100	[thread overview]
Message-ID: <20251128110212.GA261918@pevik> (raw)
In-Reply-To: <20251124105123.151772-1-piotr.kubaj@intel.com>

Hi Piotr,

> This is a new test for checking thermal interrupt events.
> stress-ng is used because genload doesn't seem to generate enough load.

> In particular, this version replaces use of tr and cut where awk is
> already used.

> --- /dev/null
> +++ b/runtest/thermal
> @@ -0,0 +1,3 @@
> +# Thermal driver API
> +# https://docs.kernel.org/driver-api/thermal/
> +thermal_interrupt_events thermal01.sh

I would not mind if the test itself was named thermal_interrupt_events.sh (more
descriptive), but that's a minor detail (which can be ignored or changed before
merge).

...
> +include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/kernel/thermal/thermal01.sh b/testcases/kernel/thermal/thermal01.sh
> new file mode 100755
> index 000000000..95adaf04b
> --- /dev/null
> +++ b/testcases/kernel/thermal/thermal01.sh
> @@ -0,0 +1,100 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# Copyright (C) 2025 Intel - http://www.intel.com/
> +#
> +# ---
> +# 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.
> +# ---
> +#
> +# ---
> +# env
> +# {
> +#  "needs_root": true,
> +#  "supported_archs": ["x86", "x86_64"],
> +#  "needs_cmds": ["stress-ng"],
> +#  "min_runtime": 180
> +# }
> +# ---
> +
> +. tst_loader.sh
> +
> +tst_test()
> +{
> +	local thermal_zone_numbers=""
> +	local temp
> +	local temp_high=""

This could be just:
local thermal_zone_numbers temp temp_high

(empty shell variable is the same as ="").

> +	local status=0
> +
> +	local interrupt_array_init=$(awk -F'[^0-9]*' '/Thermal event interrupts/ {$1=$1;print}' /proc/interrupts)
> +	if [ $? -eq 0 ]; then
> +		tst_res TDEBUG "Initial values of thermal interrupt counters: $interrupt_array_init"
> +		local num=$(tst_getconf _NPROCESSORS_ONLN)
> +		tst_res TDEBUG "Number of logical cores: $num"
> +	else
> +		tst_brk TCONF "Thermal event interrupts is not found"
> +	fi
> +
> +	# Below we check for the thermal_zone which uses x86_pkg_temp driver
> +	local thermal_zone_numbers=$(grep -l x86_pkg_temp /sys/class/thermal/thermal_zone*/type | xargs dirname)
> +	tst_res TINFO "x86_pkg_temp thermal zones: $thermal_zone_numbers"
> +
> +	if [ -z $thermal_zone_numbers ]; then
> +		tst_brk TCONF "No x86_pkg_temp thermal zones found"
> +	fi
> +	for i in $thermal_zone_numbers; do
> +		tst_res TINFO "Currently testing x86_pkg_temp $i"
> +		local TEMP="$i/temp"
> +		local temp=$(cat "$TEMP")
> +		tst_res TDEBUG "$i's current temperature is $temp"
> +		case $temp in
> +		[0-9]*) ;;
> +		*)
> +			tst_brk TBROK "Unexpected zone temperature value $temp";;
> +		esac
> +		local trip=$(cat $i/trip_point_1_temp)
> +		# Setting trip_point_1_temp for $i to $temp + 10 (0.001°C)
> +		local temp_high=$(( temp + 10 ))
> +		echo "$temp_high" > $i/trip_point_1_temp
> +		local run_time=30
> +		local sleep_time=10
> +		while [ $sleep_time -gt 0 ]; do
> +			ROD stress-ng --matrix 0 --timeout $run_time --quiet
> +			local temp_cur=$(cat "$TEMP")
> +			tst_res TDEBUG "temp_cur: $temp_cur"
> +			[ $temp_cur -gt $temp_high ] && break
> +			tst_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" > $i/trip_point_1_temp

FYI this is in /sys, otherwise for creating temporary file we would need in the
env.

#  "needs_tmpdir": true,

Thanks for your patch. I'm still not happy we introduce shell tests (sooner or
later somebody will invest his or his company time to rewrite that into C), but
I don't want to block this.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

NOTE: this needs to wait till my patch which adds ROD() is merged.

https://lore.kernel.org/ltp/20251120161957.331580-1-pvorel@suse.cz/

Kind regards,
Petr

> +
> +		# Check whether thermal interrupts count actually increased
> +		local interrupt_array_later=$(awk -F'[^0-9]*' '/Thermal event interrupts/ {$1=$1;print}' /proc/interrupts)
> +		tst_res TDEBUG "Current values of thermal interrupt counters: $interrupt_array_later"
> +		for j in $(seq 1 "$num"); do
> +			local interrupt_later=$(echo "$interrupt_array_later" | awk -v j=$j '{print $j}')
> +			local interrupt_init=$(echo "$interrupt_array_init" | awk -v j=$j '{print $j}')
> +			if [ $interrupt_later -le $interrupt_init ]; then
> +				status=1
> +			fi
> +		done
> +	done
> +
> +	if [ $status -eq 0 ]; then
> +		tst_res TPASS "x86 package thermal interrupt triggered"
> +	else
> +		tst_res TFAIL "x86 package thermal interrupt did not trigger"
> +	fi
> +}
> +
> +. tst_run.sh

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2025-11-28 11:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-24 10:51 [LTP] [PATCH v4] thermal: add new test group Piotr Kubaj
2025-11-28 11:02 ` Petr Vorel [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-01-23 12:49 Piotr Kubaj
2026-01-23 20:25 ` Petr Vorel
2026-01-29 11:15   ` Kubaj, Piotr
2026-01-29 12:58     ` Petr Vorel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251128110212.GA261918@pevik \
    --to=pvorel@suse.cz \
    --cc=daniel.niestepski@intel.com \
    --cc=helena.anna.dubel@intel.com \
    --cc=ltp@lists.linux.it \
    --cc=piotr.kubaj@intel.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=tomasz.ossowski@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox