On Wed, Sep 27, 2023 at 5:37 PM Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> wrote: > > On 27/09/2023 17:06, Rafael J. Wysocki wrote: > > On Wed, Sep 27, 2023 at 5:00 PM Daniel Lezcano > > <daniel.lezcano@xxxxxxxxxx> wrote: > >> > >> On 21/09/2023 19:54, Rafael J. Wysocki wrote: > >>> From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > >>> > >>> Make get_trip_level() access the thermal zone's trip table directly > >>> instead of using __thermal_zone_get_trip() which adds overhead related > >>> to the unnecessary bounds checking and copying the trip point data. > >>> > >>> Also rearrange the code in it to make it somewhat easier to follow. > >>> > >>> The general functionality is not expected to be changed. > >>> > >>> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > >>> --- > >>> drivers/thermal/gov_fair_share.c | 22 ++++++++++------------ > >>> 1 file changed, 10 insertions(+), 12 deletions(-) > >>> > >>> Index: linux-pm/drivers/thermal/gov_fair_share.c > >>> =================================================================== > >>> --- linux-pm.orig/drivers/thermal/gov_fair_share.c > >>> +++ linux-pm/drivers/thermal/gov_fair_share.c > >>> @@ -21,23 +21,21 @@ > >>> */ > >>> static int get_trip_level(struct thermal_zone_device *tz) > >>> { > >>> - struct thermal_trip trip; > >>> - int count; > >>> + const struct thermal_trip *trip = tz->trips; > >>> + int i; > >>> > >>> - for (count = 0; count < tz->num_trips; count++) { > >>> - __thermal_zone_get_trip(tz, count, &trip); > >>> - if (tz->temperature < trip.temperature) > >>> + if (tz->temperature < trip->temperature) > >>> + return 0; > >>> + > >>> + for (i = 0; i < tz->num_trips - 1; i++) { > >>> + trip++; > >>> + if (tz->temperature < trip->temperature) > >>> break; > >>> } > >> > >> Is it possible to use for_each_thermal_trip() instead ? That would make > >> the code more self-encapsulate > > > > It is possible in principle, but this is a governor which is regarded > > as part of the core, isn't it? > > > > So is an extra overhead related to using a callback (which may be > > subject to retpolines and such) really justified in this case? > > From my POV, all trip points browsing should be replaced by > for_each_thermal_trip() so any change in the future in how we go through > the existing thermal trips will impact one place. > > If the routine needs to be optimized, that is something we can do also > (may be an inline the callback?) OK