On 30-01-2026 11:46 am, Poosa, Karthik wrote:


On 28-01-2026 16:07, Mallesh, Koujalagi wrote:


On 24-01-2026 12:05 am, Karthik Poosa wrote:
Improve hwmon-read test to check if current temperature
is above critical temperature limit in hwmon-read test.
This will help identify any thermal issues with the
setups during test runs.

v2:
 - Address review comments. (Mallesh)
 - Call check_temp_is_valid() only for temperature hwmon entries.
Please change check_if_temp_valid() function name
Signed-off-by: Karthik Poosa <karthik.poosa@intel.com>
---
 tests/intel/intel_hwmon.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/tests/intel/intel_hwmon.c b/tests/intel/intel_hwmon.c
index 103ae69cd..9deb48a00 100644
--- a/tests/intel/intel_hwmon.c
+++ b/tests/intel/intel_hwmon.c
@@ -26,6 +26,28 @@
 
 IGT_TEST_DESCRIPTION("Tests for intel hwmon");
 
+static void check_if_temp_valid(int hwm, char *sysfs_name)
+{
+	char str[32] = {0};
+	uint32_t cur_temp = 0;
+	uint8_t ch = 0;
+	s32 limit = 0;
+
+	/* Get the channel number and sysfs entry suffix. */
+	igt_assert(sscanf(sysfs_name, "temp%hhu_%s", &ch, str) == 2);

Buffer overflow when string length more than 31, we can use "temp%hhu_%31s" as defensive.

maximum length of hwmon sysfs attribute is 32 Bytes

See: in drivers/hwmon/hwmon.c

      #define MAX_SYSFS_ATTR_NAME_LENGTH      32

So existing 32 bytes of str should suffice.

Agreed that hwmon sysfs attribute (32 bytes) which makes overflow unlikely.

Thanks,

-/Mallesh

Thanks,

-/Mallesh

+
+	/* If entry is tempX_input, check if it exceeds tempX_crit. */
+	if (!strncmp("input", str, 5)) {
+		sprintf(str, "temp%hhu_crit", ch);
+		if (!faccessat(hwm, str, R_OK, 0)) {
+			igt_assert_lt(0, igt_sysfs_scanf(hwm, sysfs_name, "%d", &cur_temp));
+			igt_assert_lt(0, igt_sysfs_scanf(hwm, str, "%d", &limit));
+			igt_debug("current temp = %d limit = %d\n", cur_temp, limit);
+			igt_assert_f(cur_temp <= limit, "current temperature exceeds limit!\n");
+		}
+	}
+}
+
 static void hwmon_read(int hwm)
 {
 	struct dirent *de;
@@ -43,6 +65,9 @@ static void hwmon_read(int hwm)
 		igt_assert(igt_sysfs_scanf(hwm, de->d_name, "%127s", val) == 1);
 		igt_debug("'%s': %s\n", de->d_name, val);
 
+		if (!strncmp(de->d_name, "temp", 4))
+			check_if_temp_valid(hwm, de->d_name);
+
 	}
 	closedir(dir);
 }