thermal: core: group functions related to governor handling
Organize thermal core code to group the functions handling with governor manipulation in one single section. Cc: Zhang Rui <rui.zhang@intel.com> Cc: linux-pm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Eduardo Valentin <edubezval@gmail.com> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
This commit is contained in:
parent
cd221c7b63
commit
1b4f48494e
|
@ -64,6 +64,13 @@ static atomic_t in_suspend;
|
||||||
|
|
||||||
static struct thermal_governor *def_governor;
|
static struct thermal_governor *def_governor;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Governor section: set of functions to handle thermal governors
|
||||||
|
*
|
||||||
|
* Functions to help in the life cycle of thermal governors within
|
||||||
|
* the thermal core and by the thermal governor code.
|
||||||
|
*/
|
||||||
|
|
||||||
static struct thermal_governor *__find_governor(const char *name)
|
static struct thermal_governor *__find_governor(const char *name)
|
||||||
{
|
{
|
||||||
struct thermal_governor *pos;
|
struct thermal_governor *pos;
|
||||||
|
@ -206,6 +213,79 @@ exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
|
||||||
|
char *policy)
|
||||||
|
{
|
||||||
|
struct thermal_governor *gov;
|
||||||
|
int ret = -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&thermal_governor_lock);
|
||||||
|
mutex_lock(&tz->lock);
|
||||||
|
|
||||||
|
gov = __find_governor(strim(policy));
|
||||||
|
if (!gov)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
ret = thermal_set_governor(tz, gov);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mutex_unlock(&tz->lock);
|
||||||
|
mutex_unlock(&thermal_governor_lock);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int thermal_build_list_of_policies(char *buf)
|
||||||
|
{
|
||||||
|
struct thermal_governor *pos;
|
||||||
|
ssize_t count = 0;
|
||||||
|
ssize_t size = PAGE_SIZE;
|
||||||
|
|
||||||
|
mutex_lock(&thermal_governor_lock);
|
||||||
|
|
||||||
|
list_for_each_entry(pos, &thermal_governor_list, governor_list) {
|
||||||
|
size = PAGE_SIZE - count;
|
||||||
|
count += scnprintf(buf + count, size, "%s ", pos->name);
|
||||||
|
}
|
||||||
|
count += scnprintf(buf + count, size, "\n");
|
||||||
|
|
||||||
|
mutex_unlock(&thermal_governor_lock);
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init thermal_register_governors(void)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = thermal_gov_step_wise_register();
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
result = thermal_gov_fair_share_register();
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
result = thermal_gov_bang_bang_register();
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
result = thermal_gov_user_space_register();
|
||||||
|
if (result)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
return thermal_gov_power_allocator_register();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void thermal_unregister_governors(void)
|
||||||
|
{
|
||||||
|
thermal_gov_step_wise_unregister();
|
||||||
|
thermal_gov_fair_share_unregister();
|
||||||
|
thermal_gov_bang_bang_unregister();
|
||||||
|
thermal_gov_user_space_unregister();
|
||||||
|
thermal_gov_power_allocator_unregister();
|
||||||
|
}
|
||||||
|
|
||||||
static int get_idr(struct idr *idr, struct mutex *lock, int *id)
|
static int get_idr(struct idr *idr, struct mutex *lock, int *id)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -617,47 +697,6 @@ void thermal_zone_device_unbind_exception(struct thermal_zone_device *tz,
|
||||||
mutex_unlock(&thermal_list_lock);
|
mutex_unlock(&thermal_list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
|
|
||||||
char *policy)
|
|
||||||
{
|
|
||||||
struct thermal_governor *gov;
|
|
||||||
int ret = -EINVAL;
|
|
||||||
|
|
||||||
mutex_lock(&thermal_governor_lock);
|
|
||||||
mutex_lock(&tz->lock);
|
|
||||||
|
|
||||||
gov = __find_governor(strim(policy));
|
|
||||||
if (!gov)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
ret = thermal_set_governor(tz, gov);
|
|
||||||
|
|
||||||
exit:
|
|
||||||
mutex_unlock(&tz->lock);
|
|
||||||
mutex_unlock(&thermal_governor_lock);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int thermal_build_list_of_policies(char *buf)
|
|
||||||
{
|
|
||||||
struct thermal_governor *pos;
|
|
||||||
ssize_t count = 0;
|
|
||||||
ssize_t size = PAGE_SIZE;
|
|
||||||
|
|
||||||
mutex_lock(&thermal_governor_lock);
|
|
||||||
|
|
||||||
list_for_each_entry(pos, &thermal_governor_list, governor_list) {
|
|
||||||
size = PAGE_SIZE - count;
|
|
||||||
count += scnprintf(buf + count, size, "%s ", pos->name);
|
|
||||||
}
|
|
||||||
count += scnprintf(buf + count, size, "\n");
|
|
||||||
|
|
||||||
mutex_unlock(&thermal_governor_lock);
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Device management */
|
/* Device management */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1424,38 +1463,6 @@ static inline int genetlink_init(void) { return 0; }
|
||||||
static inline void genetlink_exit(void) {}
|
static inline void genetlink_exit(void) {}
|
||||||
#endif /* !CONFIG_NET */
|
#endif /* !CONFIG_NET */
|
||||||
|
|
||||||
static int __init thermal_register_governors(void)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
|
|
||||||
result = thermal_gov_step_wise_register();
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
result = thermal_gov_fair_share_register();
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
result = thermal_gov_bang_bang_register();
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
result = thermal_gov_user_space_register();
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
return thermal_gov_power_allocator_register();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void thermal_unregister_governors(void)
|
|
||||||
{
|
|
||||||
thermal_gov_step_wise_unregister();
|
|
||||||
thermal_gov_fair_share_unregister();
|
|
||||||
thermal_gov_bang_bang_unregister();
|
|
||||||
thermal_gov_user_space_unregister();
|
|
||||||
thermal_gov_power_allocator_unregister();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int thermal_pm_notify(struct notifier_block *nb,
|
static int thermal_pm_notify(struct notifier_block *nb,
|
||||||
unsigned long mode, void *_unused)
|
unsigned long mode, void *_unused)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue