On Tue, 2013-04-09 at 14:59 -0700, Andrew Bresticker wrote: > When selecting a target cooling state in get_target_state(), make sure > that the state is at least as high as the minimum when the temperature > is rising and at least as low as the maximum when the temperature is > falling. This is necessary because, in the THREAML_TREND_RAISING and > THERMAL_TREND_DROPPING cases, the current state may only be incremented > or decremented by one even if it is outside the bounds of the thermal > instance. This might occur, for example, if the CPU is heating up > and hits a thermal trip point for the first time when it's frequency > is much higher than the range specified by the thermal instance > corresponding to the trip point. > > Signed-off-by: Andrew Bresticker <abres...@chromium.org>
applied. thanks, rui > --- > drivers/thermal/step_wise.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/thermal/step_wise.c b/drivers/thermal/step_wise.c > index 407cde3..ca4f79f 100644 > --- a/drivers/thermal/step_wise.c > +++ b/drivers/thermal/step_wise.c > @@ -59,9 +59,12 @@ static unsigned long get_target_state(struct > thermal_instance *instance, > > switch (trend) { > case THERMAL_TREND_RAISING: > - if (throttle) > + if (throttle) { > cur_state = cur_state < instance->upper ? > (cur_state + 1) : instance->upper; > + if (cur_state < instance->lower) > + cur_state = instance->lower; > + } > break; > case THERMAL_TREND_RAISE_FULL: > if (throttle) > @@ -71,8 +74,11 @@ static unsigned long get_target_state(struct > thermal_instance *instance, > if (cur_state == instance->lower) { > if (!throttle) > cur_state = -1; > - } else > + } else { > cur_state -= 1; > + if (cur_state > instance->upper) > + cur_state = instance->upper; > + } > break; > case THERMAL_TREND_DROP_FULL: > if (cur_state == instance->lower) { -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/