Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[PATCH] powerpc: more g5 overtemp problem fix

Some G5s still occasionally experience shutdowns due to overtemp
conditions despite the recent fix. After analyzing logs from such
machines, it appears that the overtemp code is a bit too quick at
shutting the machine down when reaching the critical temperature (tmax +
8) and doesn't leave the fan enough time to actually cool it down. This
happens if the temperature of a CPU suddenly rises too high in a very
short period of time, or occasionally on boot (that is the CPUs are
already overtemp by the time the driver loads).

This patches makes the code a bit more relaxed, leaving a few seconds to
the fans to do their job before kicking the machine shutown.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Benjamin Herrenschmidt and committed by
Linus Torvalds
f12f4d90 557962a9

+3 -3
+3 -3
drivers/macintosh/therm_pm72.c
··· 923 923 if (temp_combi >= ((state0->mpu.tmax + 8) << 16)) { 924 924 printk(KERN_WARNING "Warning ! Temperature way above maximum (%d) !\n", 925 925 temp_combi >> 16); 926 - state0->overtemp = CPU_MAX_OVERTEMP; 926 + state0->overtemp += CPU_MAX_OVERTEMP / 4; 927 927 } else if (temp_combi > (state0->mpu.tmax << 16)) 928 928 state0->overtemp++; 929 929 else ··· 998 998 printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum" 999 999 " (%d) !\n", 1000 1000 state->index, temp >> 16); 1001 - state->overtemp = CPU_MAX_OVERTEMP; 1001 + state->overtemp += CPU_MAX_OVERTEMP / 4; 1002 1002 } else if (temp > (state->mpu.tmax << 16)) 1003 1003 state->overtemp++; 1004 1004 else ··· 1060 1060 printk(KERN_WARNING "Warning ! CPU %d temperature way above maximum" 1061 1061 " (%d) !\n", 1062 1062 state->index, temp >> 16); 1063 - state->overtemp = CPU_MAX_OVERTEMP; 1063 + state->overtemp = CPU_MAX_OVERTEMP / 4; 1064 1064 } else if (temp > (state->mpu.tmax << 16)) 1065 1065 state->overtemp++; 1066 1066 else