Prozessor-Temperatur falsch seit Kernel 2.6.25

Seit Kernel 2.6.25 wird die Prozessor-Temperatur meines Core2Duo E6420 falsch ausgelesen.
Dies liegt daran, dass Intel die Temperatur nur relativ zu einem gewissen Wert Tjmax in einem CPU-Register speichert.
Es existieren zwei Werte, Tjmax = 100°C und Tjmax = 85°C.

Der Linux-Kernel versucht zwar herauszufinden, welchen Tjmax der Prozessor verwendet, scheitert aber in meinem Fall daran, dass ich keinen Mobilprozessor habe und Intel das Auslesen nur für solche CPUs veröffentlicht:
http://softwarecommunity.intel.com/Wiki/Mobility/720.htm

So wird bei mir ein Wert von 100°C angenommen, obwohl 85°C richtig wären.

Damit die Temperatur dennoch richtig angezeigt wird, kann man die Datei /usr/src/linux/drivers/hwmon/coretemp.c ab Zeile 189 etwas abändern (man achte auf die ersten beiden Zeilen):

// if (ismobile) {
if (true) {

err = rdmsr_safe_on_cpu(id, 0xee, &eax, &edx);
if (err) {
dev_warn(dev,
„Unable to access MSR 0xEE, for Tjmax, left“
“ at default“);
} else if (eax & 0x40000000) {
tjmax = 85000;
}
} else {
dev_warn(dev, „Using relative temperature scale!\n“);
}

return tjmax;

Danach muss man den Kernel natürlich neu kompilieren.

Veröffentlicht am
Kategorisiert in Linux