diff --git a/0960193970b74a429a4506cf2179643198df38d8.patch b/0960193970b74a429a4506cf2179643198df38d8.patch new file mode 100644 index 0000000..5c73c19 --- /dev/null +++ b/0960193970b74a429a4506cf2179643198df38d8.patch @@ -0,0 +1,31 @@ +From c921e802f6e494306850d4ac0e2237a2bde90fdb Mon Sep 17 00:00:00 2001 +From: Srinivas Pandruvada +Date: Mon, 13 Oct 2025 11:22:21 -0700 +Subject: [PATCH] Compile issue on i586 for time_t print + +Refer to issue: +https://github.com/intel/thermal_daemon/issues/488 + +time_t print with format %jd is a problem. The fix was added for +i386 compile but that broke i586. + +Signed-off-by: Srinivas Pandruvada +--- + src/thd_gddv.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/thd_gddv.cpp b/src/thd_gddv.cpp +index 7d483462..d5348259 100644 +--- a/src/thd_gddv.cpp ++++ b/src/thd_gddv.cpp +@@ -460,8 +460,8 @@ void cthd_gddv::dump_apct() { + condition_set[j].target, condition_set[j].device.c_str(), + cond_name.c_str(), comp_str.c_str(), + condition_set[j].argument, op_str.c_str(), +- condition_set[j].time_comparison, condition_set[j].time, +- condition_set[j].state, condition_set[j].state_entry_time); ++ condition_set[j].time_comparison, (intmax_t)condition_set[j].time, ++ condition_set[j].state, (intmax_t)condition_set[j].state_entry_time); + } + } + thd_log_info("..apct dump end..\n"); diff --git a/352125763b8f9866cd9318c1c2a70a5dcf841b20.patch b/352125763b8f9866cd9318c1c2a70a5dcf841b20.patch new file mode 100644 index 0000000..d0729d4 --- /dev/null +++ b/352125763b8f9866cd9318c1c2a70a5dcf841b20.patch @@ -0,0 +1,104 @@ +From 352125763b8f9866cd9318c1c2a70a5dcf841b20 Mon Sep 17 00:00:00 2001 +From: Srinivas Pandruvada +Date: Wed, 15 Oct 2025 20:00:33 -0700 +Subject: [PATCH] itmt3 support + +Added ITMT3 table parsing. The elements used here are same as before +but there is a structure change. + +Signed-off-by: Srinivas Pandruvada +--- + src/thd_gddv.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/thd_gddv.h | 1 + + 2 files changed, 61 insertions(+) + +diff --git a/src/thd_gddv.cpp b/src/thd_gddv.cpp +index d5348259..36156e47 100644 +--- a/src/thd_gddv.cpp ++++ b/src/thd_gddv.cpp +@@ -601,6 +601,58 @@ struct psvt* cthd_gddv::find_def_psvt() { + return NULL; + } + ++struct __attribute__((packed)) itmt3_header { ++ uint32_t reserved; ++ uint64_t revision; ++}; ++ ++struct __attribute__((packed)) itmt3 { ++ char target[64]; ++ uint64_t temp; ++ uint64_t reserved_1; ++ char pl1_min[64]; ++ char pl1_max[64]; ++ char reserved_2[88]; ++}; ++ ++int cthd_gddv::parse_itmt3(char *name, char *buf, unsigned int len) { ++ unsigned int offset = 0; ++ struct itmt itmt; ++ ++ if (name == NULL) ++ itmt.name = "Default"; ++ else ++ itmt.name = name; ++ ++ if (len < sizeof(struct itmt3_header)) ++ return THD_ERROR; ++ ++ offset += sizeof(struct itmt3_header); ++ ++ if (len - offset < sizeof(struct itmt3)) ++ return THD_ERROR; ++ ++ while (offset < len) { ++ struct itmt_entry itmt_entry; ++ struct itmt3 *entry = (struct itmt3 *)&buf[offset]; ++ ++ if (len - offset < sizeof(struct itmt3)) ++ return THD_ERROR; ++ ++ itmt_entry.target = entry->target; ++ itmt_entry.trip_point = entry->temp; ++ itmt_entry.pl1_min = entry->pl1_min; ++ itmt_entry.pl1_max = entry->pl1_max; ++ ++ offset += sizeof(struct itmt3); ++ itmt.itmt_entries.push_back(itmt_entry); ++ } ++ ++ itmts.push_back(itmt); ++ ++ return 0; ++} ++ + int cthd_gddv::parse_itmt(char *name, char *buf, int len) { + int offset = 0; + int version = get_uint64(buf, &offset); +@@ -920,6 +972,14 @@ int cthd_gddv::parse_gddv_key(char *buf, int size, int *end_offset) { + parse_apat(val, vallength); + } + ++ if (type && strncmp(type, "itmt3", strlen("itmt3")) == 0) { ++ thd_log_debug("Found ITMT 3\n"); ++ if (point == NULL) ++ parse_itmt3(name, val, vallength); ++ else ++ parse_itmt3(point, val, vallength); ++ } ++ + if (type && strcmp(type, "itmt") == 0) { + if (point == NULL) + parse_itmt(name, val, vallength); +diff --git a/src/thd_gddv.h b/src/thd_gddv.h +index ecbe3de9..415339c4 100644 +--- a/src/thd_gddv.h ++++ b/src/thd_gddv.h +@@ -211,6 +211,7 @@ class cthd_gddv { + int parse_ppcc(char *name, char *ppcc, int len); + int parse_psvt(char *name, char *psvt, int len); + int parse_itmt(char *name, char *itmt, int len); ++ int parse_itmt3(char *name, char *itmt, unsigned int len); + int parse_trt(char *trt, int len); + void parse_idsp(char *name, char *idsp, int len); + void parse_trip_point(char *name, char *type, char *val, int len); diff --git a/sources b/sources index daaabcc..2183914 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (thermald-2.5.9.tar.gz) = 0541cf490d9a97544b5c10a036a0d8219410c4451d0471b3896a62a743509cd41f5c9b862d81708a2c68603fbc0056268612d84089ef93308b91712c6d26854b +SHA512 (thermald-2.5.10.tar.gz) = a1265e6f7c940a0651d5652c81e13ec1d16c8836eb80622f3d51dac9c054b96d4d78c0988162cfa574578735804b3ee8d1c5eb2c1163ae516bd263ec5d6e2328 diff --git a/thermald.spec b/thermald.spec index dbb106a..4ed9650 100644 --- a/thermald.spec +++ b/thermald.spec @@ -3,7 +3,7 @@ %bcond qt %[%{undefined rhel} || 0%{?rhel} < 10] Name: thermald -Version: 2.5.9 +Version: 2.5.10 Release: %autorelease Summary: Thermal Management daemon @@ -12,6 +12,12 @@ URL: https://github.com/intel/%{pkgname} Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz # Patches +# Fix compile issue on i586 for time_t print +# https://github.com/intel/thermal_daemon/commit/0960193970b74a429a4506cf2179643198df38d8.patch +Patch0001: 0960193970b74a429a4506cf2179643198df38d8.patch +# The itmt3 implementation +# https://github.com/intel/thermal_daemon/commit/352125763b8f9866cd9318c1c2a70a5dcf841b20.patch +Patch0002: 352125763b8f9866cd9318c1c2a70a5dcf841b20.patch # No cpuid.h on other arches. ExclusiveArch: %{ix86} x86_64