Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Tue, 23 Apr 2024 19:25:13 +0200 | Subject | Re: [PATCH v1 01/16] thermal: core: Introduce .trip_crossed() callback for thermal governors |
| |
On Tue, Apr 23, 2024 at 7:14 PM Daniel Lezcano <daniel.lezcano@linaro.org> wrote: > > On 10/04/2024 18:10, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > Introduce a new thermal governor callback called .trip_crossed() > > that will be invoked whenever a trip point is crossed by the zone > > temperature, either on the way up or on the way down. > > > > The trip crossing direction information will be passed to it and if > > multiple trips are crossed in the same direction during one thermal zone > > update, the new callback will be invoked for them in temperature order, > > either ascending or descending, depending on the trip crossing > > direction. > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > --- > > drivers/thermal/thermal_core.c | 19 +++++++++++++++++-- > > drivers/thermal/thermal_core.h | 4 ++++ > > 2 files changed, 21 insertions(+), 2 deletions(-) > > > > Index: linux-pm/drivers/thermal/thermal_core.c > > =================================================================== > > --- linux-pm.orig/drivers/thermal/thermal_core.c > > +++ linux-pm/drivers/thermal/thermal_core.c > > @@ -302,11 +302,21 @@ static void monitor_thermal_zone(struct > > thermal_zone_device_set_polling(tz, tz->polling_delay_jiffies); > > } > > > > +static struct thermal_governor *thermal_get_tz_governor(struct thermal_zone_device *tz) > > +{ > > + if (tz->governor) > > + return tz->governor; > > + > > + return def_governor; > > +} > > + > > static void handle_non_critical_trips(struct thermal_zone_device *tz, > > const struct thermal_trip *trip) > > { > > - tz->governor ? tz->governor->throttle(tz, trip) : > > - def_governor->throttle(tz, trip); > > + struct thermal_governor *governor = thermal_get_tz_governor(tz); > > + > > + if (governor->throttle) > > + governor->throttle(tz, trip); > > } > > > > void thermal_governor_update_tz(struct thermal_zone_device *tz, > > @@ -470,6 +480,7 @@ static int thermal_trip_notify_cmp(void > > void __thermal_zone_device_update(struct thermal_zone_device *tz, > > enum thermal_notify_event event) > > { > > + struct thermal_governor *governor = thermal_get_tz_governor(tz); > > struct thermal_trip_desc *td; > > LIST_HEAD(way_down_list); > > LIST_HEAD(way_up_list); > > @@ -493,12 +504,16 @@ void __thermal_zone_device_update(struct > > list_for_each_entry(td, &way_up_list, notify_list_node) { > > thermal_notify_tz_trip_up(tz, &td->trip); > > thermal_debug_tz_trip_up(tz, &td->trip); > > + if (governor->trip_crossed) > > + governor->trip_crossed(tz, &td->trip, true); > > Is it possible to wrap this into a function ? So we keep the calls at > the same level in this block
I can send a separate patch for this if you want me to.
Thanks!
| |