Message ID | 3313587.aeNJFYEL58@rjwysocki.net |
---|---|
State | New |
Headers | show |
Series | thermal: gov_bang_bang: Prevent cooling devices from getting stuck in the "on" state | expand |
On 13.08.24 16:26, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Move the setting of the thermal instance target state from > bang_bang_control() into a separate function that will be also called > in a different place going forward. > > No intentional functional impact. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Peter Kästle <peter@piie.net> > --- > drivers/thermal/gov_bang_bang.c | 42 +++++++++++++++++++++------------------- > 1 file changed, 23 insertions(+), 19 deletions(-) > > Index: linux-pm/drivers/thermal/gov_bang_bang.c > =================================================================== > --- linux-pm.orig/drivers/thermal/gov_bang_bang.c > +++ linux-pm/drivers/thermal/gov_bang_bang.c > @@ -13,6 +13,27 @@ > > #include "thermal_core.h" > > +static void bang_bang_set_instance_target(struct thermal_instance *instance, > + unsigned int target) > +{ > + if (instance->target != 0 && instance->target != 1 && > + instance->target != THERMAL_NO_TARGET) > + pr_debug("Unexpected state %ld of thermal instance %s in bang-bang\n", > + instance->target, instance->name); > + > + /* > + * Enable the fan when the trip is crossed on the way up and disable it > + * when the trip is crossed on the way down. > + */ > + instance->target = target; > + > + dev_dbg(&instance->cdev->device, "target=%ld\n", instance->target); > + > + mutex_lock(&instance->cdev->lock); > + __thermal_cdev_update(instance->cdev); > + mutex_unlock(&instance->cdev->lock); > +} > + > /** > * bang_bang_control - controls devices associated with the given zone > * @tz: thermal_zone_device > @@ -54,25 +75,8 @@ static void bang_bang_control(struct the > tz->temperature, trip->hysteresis); > > list_for_each_entry(instance, &tz->thermal_instances, tz_node) { > - if (instance->trip != trip) > - continue; > - > - if (instance->target != 0 && instance->target != 1 && > - instance->target != THERMAL_NO_TARGET) > - pr_debug("Unexpected state %ld of thermal instance %s in bang-bang\n", > - instance->target, instance->name); > - > - /* > - * Enable the fan when the trip is crossed on the way up and > - * disable it when the trip is crossed on the way down. > - */ > - instance->target = crossed_up; > - > - dev_dbg(&instance->cdev->device, "target=%ld\n", instance->target); > - > - mutex_lock(&instance->cdev->lock); > - __thermal_cdev_update(instance->cdev); > - mutex_unlock(&instance->cdev->lock); > + if (instance->trip == trip) > + bang_bang_set_instance_target(instance, crossed_up); > } > } > > > >
On Tue, 2024-08-13 at 16:26 +0200, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Move the setting of the thermal instance target state from > bang_bang_control() into a separate function that will be also called > in a different place going forward. > > No intentional functional impact. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Zhang Rui <rui.zhang@intel.com> thanks, rui > --- > drivers/thermal/gov_bang_bang.c | 42 +++++++++++++++++++++-------- > ----------- > 1 file changed, 23 insertions(+), 19 deletions(-) > > Index: linux-pm/drivers/thermal/gov_bang_bang.c > =================================================================== > --- linux-pm.orig/drivers/thermal/gov_bang_bang.c > +++ linux-pm/drivers/thermal/gov_bang_bang.c > @@ -13,6 +13,27 @@ > > #include "thermal_core.h" > > +static void bang_bang_set_instance_target(struct thermal_instance > *instance, > + unsigned int target) > +{ > + if (instance->target != 0 && instance->target != 1 && > + instance->target != THERMAL_NO_TARGET) > + pr_debug("Unexpected state %ld of thermal instance %s > in bang-bang\n", > + instance->target, instance->name); > + > + /* > + * Enable the fan when the trip is crossed on the way up and > disable it > + * when the trip is crossed on the way down. > + */ > + instance->target = target; > + > + dev_dbg(&instance->cdev->device, "target=%ld\n", instance- > >target); > + > + mutex_lock(&instance->cdev->lock); > + __thermal_cdev_update(instance->cdev); > + mutex_unlock(&instance->cdev->lock); > +} > + > /** > * bang_bang_control - controls devices associated with the given > zone > * @tz: thermal_zone_device > @@ -54,25 +75,8 @@ static void bang_bang_control(struct the > tz->temperature, trip->hysteresis); > > list_for_each_entry(instance, &tz->thermal_instances, > tz_node) { > - if (instance->trip != trip) > - continue; > - > - if (instance->target != 0 && instance->target != 1 && > - instance->target != THERMAL_NO_TARGET) > - pr_debug("Unexpected state %ld of thermal > instance %s in bang-bang\n", > - instance->target, instance->name); > - > - /* > - * Enable the fan when the trip is crossed on the way > up and > - * disable it when the trip is crossed on the way > down. > - */ > - instance->target = crossed_up; > - > - dev_dbg(&instance->cdev->device, "target=%ld\n", > instance->target); > - > - mutex_lock(&instance->cdev->lock); > - __thermal_cdev_update(instance->cdev); > - mutex_unlock(&instance->cdev->lock); > + if (instance->trip == trip) > + bang_bang_set_instance_target(instance, > crossed_up); > } > } > > > >
Index: linux-pm/drivers/thermal/gov_bang_bang.c =================================================================== --- linux-pm.orig/drivers/thermal/gov_bang_bang.c +++ linux-pm/drivers/thermal/gov_bang_bang.c @@ -13,6 +13,27 @@ #include "thermal_core.h" +static void bang_bang_set_instance_target(struct thermal_instance *instance, + unsigned int target) +{ + if (instance->target != 0 && instance->target != 1 && + instance->target != THERMAL_NO_TARGET) + pr_debug("Unexpected state %ld of thermal instance %s in bang-bang\n", + instance->target, instance->name); + + /* + * Enable the fan when the trip is crossed on the way up and disable it + * when the trip is crossed on the way down. + */ + instance->target = target; + + dev_dbg(&instance->cdev->device, "target=%ld\n", instance->target); + + mutex_lock(&instance->cdev->lock); + __thermal_cdev_update(instance->cdev); + mutex_unlock(&instance->cdev->lock); +} + /** * bang_bang_control - controls devices associated with the given zone * @tz: thermal_zone_device @@ -54,25 +75,8 @@ static void bang_bang_control(struct the tz->temperature, trip->hysteresis); list_for_each_entry(instance, &tz->thermal_instances, tz_node) { - if (instance->trip != trip) - continue; - - if (instance->target != 0 && instance->target != 1 && - instance->target != THERMAL_NO_TARGET) - pr_debug("Unexpected state %ld of thermal instance %s in bang-bang\n", - instance->target, instance->name); - - /* - * Enable the fan when the trip is crossed on the way up and - * disable it when the trip is crossed on the way down. - */ - instance->target = crossed_up; - - dev_dbg(&instance->cdev->device, "target=%ld\n", instance->target); - - mutex_lock(&instance->cdev->lock); - __thermal_cdev_update(instance->cdev); - mutex_unlock(&instance->cdev->lock); + if (instance->trip == trip) + bang_bang_set_instance_target(instance, crossed_up); } }