* [LTP] [PATCH] thermal: add new test group
@ 2026-01-19 8:51 Piotr Kubaj
2026-01-19 13:20 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 7+ messages in thread
From: Piotr Kubaj @ 2026-01-19 8:51 UTC (permalink / raw)
To: ltp; +Cc: helena.anna.dubel, tomasz.ossowski, rafael.j.wysocki,
daniel.niestepski
This is a new test for checking thermal interrupt events.
Signed-off-by: Piotr Kubaj <piotr.kubaj@intel.com>
---
runtest/thermal | 3 +
scenario_groups/default | 1 +
testcases/kernel/Makefile | 1 +
testcases/kernel/thermal/Makefile | 9 +
.../kernel/thermal/thermal_interrupt_events.c | 188 ++++++++++++++++++
5 files changed, 202 insertions(+)
create mode 100644 runtest/thermal
create mode 100644 testcases/kernel/thermal/Makefile
create mode 100644 testcases/kernel/thermal/thermal_interrupt_events.c
diff --git a/runtest/thermal b/runtest/thermal
new file mode 100644
index 000000000..b85237f95
--- /dev/null
+++ b/runtest/thermal
@@ -0,0 +1,3 @@
+# Thermal driver API
+# https://docs.kernel.org/driver-api/thermal/
+thermal_interrupt_events thermal_interrupt_events.sh
diff --git a/scenario_groups/default b/scenario_groups/default
index 0e76b2bee..ffdd7ff25 100644
--- a/scenario_groups/default
+++ b/scenario_groups/default
@@ -26,3 +26,4 @@ crypto
kernel_misc
uevent
watchqueue
+thermal
diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile
index 98fd45a9d..ac816e4e8 100644
--- a/testcases/kernel/Makefile
+++ b/testcases/kernel/Makefile
@@ -36,6 +36,7 @@ SUBDIRS += connectors \
sched \
security \
sound \
+ thermal \
tracing \
uevents \
watchqueue \
diff --git a/testcases/kernel/thermal/Makefile b/testcases/kernel/thermal/Makefile
new file mode 100644
index 000000000..4657c3fb3
--- /dev/null
+++ b/testcases/kernel/thermal/Makefile
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2025, Intel Corporation. All rights reserved.
+# Author:Piotr Kubaj <piotr.kubaj@intel.com>
+
+top_srcdir ?= ../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/thermal/thermal_interrupt_events.c b/testcases/kernel/thermal/thermal_interrupt_events.c
new file mode 100644
index 000000000..c9f283f6e
--- /dev/null
+++ b/testcases/kernel/thermal/thermal_interrupt_events.c
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*
+ * Copyright (C) 2025-2026 Intel - http://www.intel.com/
+ */
+
+/*
+ * Tests the CPU package thermal sensor interface for Intel platforms.
+
+ * 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.
+ */
+
+#include "tst_safe_stdio.h"
+#include "tst_test.h"
+#include <ctype.h>
+#include <pthread.h>
+#include <regex.h>
+#define PATH_LEN 69
+#define STRING_LEN 23
+
+static void *cpu_workload(void *arg)
+{
+ time_t start_time = time(NULL);
+
+ int num = 2;
+ while(difftime(time(NULL), start_time) < *(double*)arg)
+ {
+ for(int i = 2; i * i <= num; i++) if (num % i == 0) break;
+ num++;
+ }
+ return NULL;
+}
+
+static void read_interrupts(uint64_t *interrupt_array, const uint16_t nproc)
+{
+ bool interrupts_found = 0;
+ char line[8192];
+ memset(interrupt_array, 0, nproc * sizeof(*interrupt_array));
+ FILE *fp = SAFE_FOPEN("/proc/interrupts", "r");
+ while(fgets(line, sizeof(line), fp))
+ {
+ if(strstr(line, "Thermal event interrupts"))
+ {
+ interrupts_found = 1;
+ char *token = strtok(line, " ");
+ token = strtok(NULL, " ");
+ int i = 0;
+ while(!!strcmp(token, "Thermal"))
+ {
+ interrupt_array[i++] = atoll(token);
+ token = strtok(NULL, " ");
+ tst_res(TDEBUG, "Current value of interrupt_array[%d]: %ld", i - 1, interrupt_array[i - 1]);
+ }
+ }
+ }
+ SAFE_FCLOSE(fp);
+ if(!interrupts_found) tst_brk(TCONF, "No Thermal event interrupts line in /proc/interrupts");
+}
+
+static void run(void)
+{
+ bool status = 1;
+ char line[8192];
+ const uint16_t nproc = sysconf(_SC_NPROCESSORS_ONLN);
+ uint64_t interrupt_init[nproc], interrupt_later[nproc];
+ tst_res(TDEBUG, "Number of logical cores: %d", nproc);
+ read_interrupts(interrupt_init, nproc);
+
+ DIR *dir;
+ dir = SAFE_OPENDIR("/sys/class/thermal/");
+ struct dirent *entry;
+ regex_t regex;
+ uint8_t tz_counter = 0;
+
+ if(regcomp(®ex, "thermal_zone", REG_EXTENDED) != 0) tst_res(TINFO | TTERRNO, "regcomp");
+
+ while((entry = readdir(dir)) != NULL)
+ {
+ if (regexec(®ex, entry->d_name, 0, NULL, 0) == 0) tz_counter++;
+ }
+ SAFE_CLOSEDIR(dir);
+ regfree(®ex);
+ tst_res(TDEBUG, "Found %d thermal zone(s)", tz_counter);
+
+ bool x86_pkg_temp_tz[tz_counter], x86_pkg_temp_tz_found = 0;
+ memset(x86_pkg_temp_tz, 0, sizeof(x86_pkg_temp_tz));
+
+ for(uint8_t i = 0; i < tz_counter; i++)
+ {
+ char path[PATH_LEN];
+ snprintf(path, PATH_LEN, "/sys/class/thermal/thermal_zone%d/type", i);
+ FILE *fp = SAFE_FOPEN(path, "r");
+ if(fgets(line, sizeof(line), fp) && strstr(line, "x86_pkg_temp"))
+ {
+ tst_res(TDEBUG, "Thermal zone %d uses x86_pkg_temp", i);
+ x86_pkg_temp_tz[i] = 1;
+ x86_pkg_temp_tz_found = 1;
+ }
+ SAFE_FCLOSE(fp);
+ }
+ if(!x86_pkg_temp_tz_found)
+ {
+ tst_res(TINFO, "No thermal zone uses x86_pkg_temp");
+ status = 0;
+ }
+
+ for(uint8_t i = 0; i < tz_counter; i++)
+ {
+ if(x86_pkg_temp_tz[i])
+ {
+ char path[PATH_LEN], temp_path[PATH_LEN], trip_path[PATH_LEN], temp_high[12], trip[12];
+ double run_time = 30;
+ uint8_t sleep_time = 10;
+ int temp;
+ snprintf(path, PATH_LEN, "/sys/class/thermal/thermal_zone%d/", i);
+ strcpy(temp_path, path);
+ strcat(temp_path, "temp");
+ tst_res(TDEBUG, "Testing %s", temp_path);
+ SAFE_FILE_SCANF(temp_path, "%d", &temp);
+ if(temp < 0)
+ {
+ tst_brk(TBROK, "Unexpected zone temperature value %d", temp);
+ status = 0;
+ }
+ tst_res(TDEBUG, "Current temperature for %s: %d", path, temp);
+
+ snprintf(temp_high, sizeof(temp_high), "%d", temp + 10);
+
+ strcpy(trip_path, path);
+ strcat(trip_path, "trip_point_1_temp");
+
+ tst_res(TDEBUG, "Setting new trip_point_1_temp value: %s", temp_high);
+ SAFE_FILE_SCANF(trip_path, "%s", trip);
+ SAFE_FILE_PRINTF(trip_path, temp_high);
+
+ while(sleep_time > 0)
+ {
+ tst_res(TDEBUG, "Running for %f seconds, then sleeping for %d seconds", run_time, sleep_time);
+ pthread_t threads[nproc];
+ for (uint16_t j = 0; j < nproc; j++) pthread_create(&threads[j], NULL, cpu_workload, &run_time);
+ for (uint16_t j = 0; j < nproc; j++) pthread_join(threads[j], NULL);
+
+ SAFE_FILE_SCANF(temp_path, "%d", &temp);
+ tst_res(TDEBUG, "Temperature for %s after a test: %d", path, temp);
+
+ if(temp > atol(temp_high)) break;
+ sleep(sleep_time--);
+ run_time -= 3;
+ }
+ if(temp <= atol(temp_high))
+ {
+ tst_res(TINFO, "Zone temperature is not rising as expected");
+ status = 0;
+ }
+
+ tst_res(TDEBUG, "Restoring original trip_point_1_temp value: %s", trip);
+ SAFE_FILE_PRINTF(trip_path, trip);
+ }
+ }
+ read_interrupts(interrupt_later, nproc);
+
+ for(uint16_t i = 0; i < nproc; i++)
+ {
+ if(interrupt_later[i] < interrupt_init[i])
+ {
+ tst_res(TINFO, "For CPU %d interrupt counter is currently %ld, while it was %ld before the test", i, interrupt_later[i], interrupt_init[i]);
+ status = 0;
+ }
+ }
+
+ if(status) tst_res(TPASS, "x86 package thermal interrupt triggered");
+ else tst_res(TFAIL, "x86 package thermal interrupt did not trigger");
+}
+
+static struct tst_test test = {
+ .min_runtime = 180,
+ .needs_root = true,
+ .supported_archs = (const char *const []) {
+ "x86",
+ "x86_64",
+ NULL
+ },
+ .test_all = run
+};
--
2.47.3
---------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP 957-07-52-316 | Kapital zakladowy 200.000 PLN.
Spolka oswiadcza, ze posiada status duzego przedsiebiorcy w rozumieniu ustawy z dnia 8 marca 2013 r. o przeciwdzialaniu nadmiernym opoznieniom w transakcjach handlowych.
Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i moze zawierac informacje poufne. W razie przypadkowego otrzymania tej wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; jakiekolwiek przegladanie lub rozpowszechnianie jest zabronione.
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). If you are not the intended recipient, please contact the sender and delete all copies; any review or distribution by others is strictly prohibited.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [LTP] [PATCH] thermal: add new test group
2026-01-19 8:51 [LTP] [PATCH] thermal: add new test group Piotr Kubaj
@ 2026-01-19 13:20 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 7+ messages in thread
From: Andrea Cervesato via ltp @ 2026-01-19 13:20 UTC (permalink / raw)
To: Piotr Kubaj, ltp
Cc: tomasz.ossowski, helena.anna.dubel, rafael.j.wysocki,
daniel.niestepski
Hi!
There are a few issues with this code. We need to clean it up
before proceeding with the proper review. In LTP we have a strict policy
when it comes to writing new tests and that can be read in the following
links:
https://linux-test-project.readthedocs.io/en/latest/developers/ground_rules.html
https://linux-test-project.readthedocs.io/en/latest/developers/writing_tests.html
https://linux-test-project.readthedocs.io/en/latest/developers/test_case_tutorial.html
Documentation is away from being perfect, but it needs to be read before
proceeding, since some technical aspects are covered only in there and
inside some of our reviews, especially the ones from maintainers with
the highest expertise (@Cyril, @Petr and @Li in particular).
A few points below:
* run `make check` locally inside the test folder and verify errors
inside the test code
* run github CI by pushing your commits inside a forked LTP project.
The patch is not passing in any of our tested platforms (I'm sorry if
CI report is not working in patchwork yet, but that has been fixed
today)
* please verify that all you need has not been implemented inside the
LTP library already. For instance, we already have `tst_ncpus()` and
_SC_NPROCESSORS_ONLN is not needed
* please avoid as much as possible unsafe memory operations over strings.
we dont really want to use strcpy(), strcat(), etc. In most of the
cases, snprint() and asprintf() are the right choice
* why using regexp for something as easy as finding a substring inside a
string, without any particular substring rule over data?
In general, we need to create a code that is working as good as possible,
since debugging test failures can be really complex inside kernel. Test
has to provide very little friction with the kernel in order to reduce
test maintenance.
Let's start from this, we will continue the review when these points are
first achieved.
Kind regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* [LTP] [PATCH] thermal: add new test group
@ 2025-11-06 11:43 Piotr Kubaj
2025-11-06 12:46 ` Cyril Hrubis
2025-11-10 10:31 ` Cyril Hrubis
0 siblings, 2 replies; 7+ messages in thread
From: Piotr Kubaj @ 2025-11-06 11:43 UTC (permalink / raw)
To: ltp
Cc: helena.anna.dubel, tomasz.ossowski, rafael.j.wysocki,
daniel.niestepski, Piotr Kubaj
This is a new test for checking thermal interrupt events.
Signed-off-by: Piotr Kubaj <piotr.kubaj@intel.com>
---
runtest/thermal | 2 +
scenario_groups/default | 1 +
testcases/kernel/Makefile | 1 +
testcases/kernel/thermal/Makefile | 11 ++++
testcases/kernel/thermal/thermal01.sh | 92 +++++++++++++++++++++++++++
5 files changed, 107 insertions(+)
create mode 100644 runtest/thermal
create mode 100644 testcases/kernel/thermal/Makefile
create mode 100755 testcases/kernel/thermal/thermal01.sh
diff --git a/runtest/thermal b/runtest/thermal
new file mode 100644
index 000000000..804ef7d79
--- /dev/null
+++ b/runtest/thermal
@@ -0,0 +1,2 @@
+#THERMAL
+thermal_interrupt_events thermal01.sh
diff --git a/scenario_groups/default b/scenario_groups/default
index 0e76b2bee..ffdd7ff25 100644
--- a/scenario_groups/default
+++ b/scenario_groups/default
@@ -26,3 +26,4 @@ crypto
kernel_misc
uevent
watchqueue
+thermal
diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile
index 98fd45a9d..ac816e4e8 100644
--- a/testcases/kernel/Makefile
+++ b/testcases/kernel/Makefile
@@ -36,6 +36,7 @@ SUBDIRS += connectors \
sched \
security \
sound \
+ thermal \
tracing \
uevents \
watchqueue \
diff --git a/testcases/kernel/thermal/Makefile b/testcases/kernel/thermal/Makefile
new file mode 100644
index 000000000..789db430d
--- /dev/null
+++ b/testcases/kernel/thermal/Makefile
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2025, Intel Corporation. All rights reserved.
+# Author:Piotr Kubaj <piotr.kubaj@intel.com>
+
+top_srcdir ?= ../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+INSTALL_TARGETS := thermal01.sh
+
+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..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.
+###############################################################################
+
+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."
+ 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
+ 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
+ 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
--
2.47.3
---------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP 957-07-52-316 | Kapital zakladowy 200.000 PLN.
Spolka oswiadcza, ze posiada status duzego przedsiebiorcy w rozumieniu ustawy z dnia 8 marca 2013 r. o przeciwdzialaniu nadmiernym opoznieniom w transakcjach handlowych.
Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i moze zawierac informacje poufne. W razie przypadkowego otrzymania tej wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; jakiekolwiek przegladanie lub rozpowszechnianie jest zabronione.
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). If you are not the intended recipient, please contact the sender and delete all copies; any review or distribution by others is strictly prohibited.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [LTP] [PATCH] thermal: add new test group
2025-11-06 11:43 Piotr Kubaj
@ 2025-11-06 12:46 ` Cyril Hrubis
2025-11-06 16:50 ` Petr Vorel
2025-11-10 10:31 ` Cyril Hrubis
1 sibling, 1 reply; 7+ messages in thread
From: Cyril Hrubis @ 2025-11-06 12:46 UTC (permalink / raw)
To: Piotr Kubaj
Cc: daniel.niestepski, tomasz.ossowski, helena.anna.dubel,
rafael.j.wysocki, ltp
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
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [LTP] [PATCH] thermal: add new test group
2025-11-06 12:46 ` Cyril Hrubis
@ 2025-11-06 16:50 ` Petr Vorel
2025-11-10 10:33 ` Cyril Hrubis
0 siblings, 1 reply; 7+ messages in thread
From: Petr Vorel @ 2025-11-06 16:50 UTC (permalink / raw)
To: Cyril Hrubis
Cc: helena.anna.dubel, tomasz.ossowski, rafael.j.wysocki, Piotr Kubaj,
daniel.niestepski, ltp
Hi Piotr, Cyril,
> 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.
Piotr, first thank you for submitting a test.
My wish would be no more shell based test. shell loader is kind of compromise to
improve existing shell based tests, but I'm not happy to see yet new more tests
in shell (we in SUSE will be then actively rewriting it into C :( to avoid
various problems with shell tests).
Piotr, would it be so hard to rewrite it into decent C?
C API has many helpers and it's more reliable:
https://github.com/linux-test-project/ltp/blob/master/doc/old/C-Test-API.asciidoc
https://linux-test-project.readthedocs.io/en/latest/developers/api_c_tests.html
https://linux-test-project.readthedocs.io/en/latest/developers/test_case_tutorial.html
+ many tests rewritten as a real code examples (see these which include "tst_test.h").
Also, do you plan to write only a single test? If yes I'm not sure if single
test deserves it's own scenario group.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [LTP] [PATCH] thermal: add new test group
2025-11-06 16:50 ` Petr Vorel
@ 2025-11-10 10:33 ` Cyril Hrubis
0 siblings, 0 replies; 7+ messages in thread
From: Cyril Hrubis @ 2025-11-10 10:33 UTC (permalink / raw)
To: Petr Vorel
Cc: helena.anna.dubel, tomasz.ossowski, rafael.j.wysocki, Piotr Kubaj,
daniel.niestepski, ltp
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.
>
> Piotr, first thank you for submitting a test.
>
> My wish would be no more shell based test. shell loader is kind of compromise to
> improve existing shell based tests, but I'm not happy to see yet new more tests
> in shell (we in SUSE will be then actively rewriting it into C :( to avoid
> various problems with shell tests).
Honestly for a test that is as simple as this one shell may be fine.
Anything more complex that this should be probably written in C.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [LTP] [PATCH] thermal: add new test group
2025-11-06 11:43 Piotr Kubaj
2025-11-06 12:46 ` Cyril Hrubis
@ 2025-11-10 10:31 ` Cyril Hrubis
1 sibling, 0 replies; 7+ messages in thread
From: Cyril Hrubis @ 2025-11-10 10:31 UTC (permalink / raw)
To: Piotr Kubaj
Cc: daniel.niestepski, tomasz.ossowski, helena.anna.dubel,
rafael.j.wysocki, ltp
Hi!
FYI I've just send a patch with a basic documentation for the shell test
library, feel free to comment if there is anything unclear there:
https://patchwork.ozlabs.org/project/ltp/patch/20251110102407.15308-1-chrubis@suse.cz/
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-01-19 13:20 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-19 8:51 [LTP] [PATCH] thermal: add new test group Piotr Kubaj
2026-01-19 13:20 ` Andrea Cervesato via ltp
-- strict thread matches above, loose matches on Subject: below --
2025-11-06 11:43 Piotr Kubaj
2025-11-06 12:46 ` Cyril Hrubis
2025-11-06 16:50 ` Petr Vorel
2025-11-10 10:33 ` Cyril Hrubis
2025-11-10 10:31 ` Cyril Hrubis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox