From 0e9a7156b6c1e818676157e77c8a5750ccabbeaf Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Thu, 1 May 2014 11:40:19 +0200 Subject: [PATCH] turbostat: Backport 'Drop temperature checks' The Intel 64 and IA-32 Architectures Software Developer's Manual says that TjMax is stored in bits 23:16 of MSR_TEMPERATURE TARGET (0x1a2). That's 8 bits, not 7, so it must be masked with 0xFF rather than 0x7F. The manual has no mention of which values should be considered valid, which kind of implies that they all are. Arbitrarily discarding values outside a specific range is wrong. The upper range check had to be fixed recently (commit 144b44b1) and the lower range check is just as wrong. See bug #75071: https://bugzilla.kernel.org/show_bug.cgi?id=75071 There are many Xeon processor series with TjMax of 70, 71 or 80 degrees Celsius, way below the arbitrary 85 degrees Celsius limit. There may be other (past or future) models with even lower limits. So drop this arbitrary check. The only value that would be clearly invalid is 0. Everything else should be accepted. After these changes, turbostat is aligned with what the coretemp driver does. Signed-off-by: Jean Delvare Cc: Len Brown Acked-by: Guenter Roeck Reviewed-by: Josh Triplett Signed-off-by: Rafael J. Wysocki [git@lerya.net: Ported to collectd turbostat plugin] Signed-off-by: Vincent Brillault --- src/turbostat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/turbostat.c b/src/turbostat.c index d62b522b..b81eb3ca 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1051,9 +1051,9 @@ set_temperature_target(struct thread_data *t, struct core_data *c, struct pkg_da if (get_msr(t->cpu_id, MSR_IA32_TEMPERATURE_TARGET, &msr)) goto guess; - target_c_local = (msr >> 16) & 0x7F; + target_c_local = (msr >> 16) & 0xFF; - if (target_c_local < 85 || target_c_local > 127) + if (!target_c_local) goto guess; p->tcc_activation_temp = target_c_local; -- 2.11.0