Commit 17d399cd authored by Daniel Lezcano's avatar Daniel Lezcano

thermal/core: Precompute the delays from msecs to jiffies

The delays are stored in ms units and when the polling function is
called this delay is converted into jiffies at each call.

Instead of doing the conversion again and again, compute the jiffies
at init time and use the value directly when setting the polling.

Cc: Thara Gopinath <thara.gopinath@linaro.org>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: default avatarLukasz Luba <lukasz.luba@arm.com>
Reviewed-by: default avatarThara Gopinath <thara.gopinath@linaro.org>
Link: https://lore.kernel.org/r/20201216220337.839878-1-daniel.lezcano@linaro.org
parent 2121496f
...@@ -1315,6 +1315,9 @@ thermal_zone_device_register(const char *type, int trips, int mask, ...@@ -1315,6 +1315,9 @@ thermal_zone_device_register(const char *type, int trips, int mask,
tz->passive_delay = passive_delay; tz->passive_delay = passive_delay;
tz->polling_delay = polling_delay; tz->polling_delay = polling_delay;
thermal_set_delay_jiffies(&tz->passive_delay_jiffies, passive_delay);
thermal_set_delay_jiffies(&tz->polling_delay_jiffies, polling_delay);
/* sys I/F */ /* sys I/F */
/* Add nodes that are always present via .groups */ /* Add nodes that are always present via .groups */
result = thermal_zone_create_device_groups(tz, mask); result = thermal_zone_create_device_groups(tz, mask);
......
...@@ -123,6 +123,7 @@ int thermal_build_list_of_policies(char *buf); ...@@ -123,6 +123,7 @@ int thermal_build_list_of_policies(char *buf);
/* Helpers */ /* Helpers */
void thermal_zone_set_trips(struct thermal_zone_device *tz); void thermal_zone_set_trips(struct thermal_zone_device *tz);
void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms);
/* sysfs I/F */ /* sysfs I/F */
int thermal_zone_create_device_groups(struct thermal_zone_device *, int); int thermal_zone_create_device_groups(struct thermal_zone_device *, int);
......
...@@ -175,6 +175,13 @@ void thermal_zone_set_trips(struct thermal_zone_device *tz) ...@@ -175,6 +175,13 @@ void thermal_zone_set_trips(struct thermal_zone_device *tz)
mutex_unlock(&tz->lock); mutex_unlock(&tz->lock);
} }
void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms)
{
*delay_jiffies = msecs_to_jiffies(delay_ms);
if (delay_ms > 1000)
*delay_jiffies = round_jiffies(*delay_jiffies);
}
static void thermal_cdev_set_cur_state(struct thermal_cooling_device *cdev, static void thermal_cdev_set_cur_state(struct thermal_cooling_device *cdev,
int target) int target)
{ {
......
...@@ -117,9 +117,14 @@ struct thermal_cooling_device { ...@@ -117,9 +117,14 @@ struct thermal_cooling_device {
* @trips_disabled; bitmap for disabled trips * @trips_disabled; bitmap for disabled trips
* @passive_delay: number of milliseconds to wait between polls when * @passive_delay: number of milliseconds to wait between polls when
* performing passive cooling. * performing passive cooling.
* @passive_delay_jiffies: number of jiffies to wait between polls when
* performing passive cooling.
* @polling_delay: number of milliseconds to wait between polls when * @polling_delay: number of milliseconds to wait between polls when
* checking whether trip points have been crossed (0 for * checking whether trip points have been crossed (0 for
* interrupt driven systems) * interrupt driven systems)
* @polling_delay_jiffies: number of jiffies to wait between polls when
* checking whether trip points have been crossed (0 for
* interrupt driven systems)
* @temperature: current temperature. This is only for core code, * @temperature: current temperature. This is only for core code,
* drivers should use thermal_zone_get_temp() to get the * drivers should use thermal_zone_get_temp() to get the
* current temperature * current temperature
...@@ -155,6 +160,8 @@ struct thermal_zone_device { ...@@ -155,6 +160,8 @@ struct thermal_zone_device {
void *devdata; void *devdata;
int trips; int trips;
unsigned long trips_disabled; /* bitmap for disabled trips */ unsigned long trips_disabled; /* bitmap for disabled trips */
unsigned long passive_delay_jiffies;
unsigned long polling_delay_jiffies;
int passive_delay; int passive_delay;
int polling_delay; int polling_delay;
int temperature; int temperature;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment