return ret;
}
-int thermal_register_governor(struct thermal_governor *governor)
+static int __init thermal_register_governor(struct thermal_governor *governor)
{
if (!governor)
return -EINVAL;
- guard(mutex)(&thermal_governor_lock);
-
if (__find_governor(governor->name))
return -EBUSY;
return 0;
}
-void thermal_unregister_governor(struct thermal_governor *governor)
-{
- if (!governor)
- return;
-
- guard(mutex)(&thermal_governor_lock);
-
- if (!__find_governor(governor->name))
- return;
-
- list_del(&governor->governor_list);
-}
-
int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
char *policy)
{
static void __init thermal_unregister_governors(void)
{
- struct thermal_governor **governor;
+ struct thermal_governor *gov, *pos;
+
+ guard(mutex)(&thermal_governor_lock);
- for_each_governor_table(governor)
- thermal_unregister_governor(*governor);
+ list_for_each_entry_safe(gov, pos, &thermal_governor_list, governor_list)
+ list_del(&gov->governor_list);
}
static int __init thermal_register_governors(void)
{
- int ret = 0;
struct thermal_governor **governor;
+ guard(mutex)(&thermal_governor_lock);
+
for_each_governor_table(governor) {
+ int ret;
+
ret = thermal_register_governor(*governor);
if (ret) {
pr_err("Failed to register governor: '%s'",
(*governor)->name);
- break;
+ return ret;
}
- pr_info("Registered thermal governor '%s'",
- (*governor)->name);
+ pr_info("Registered thermal governor '%s'", (*governor)->name);
}
- if (ret) {
- struct thermal_governor **gov;
-
- for_each_governor_table(gov) {
- if (gov == governor)
- break;
- thermal_unregister_governor(*gov);
- }
- }
-
- return ret;
+ return 0;
}
static int __thermal_zone_device_set_mode(struct thermal_zone_device *tz,
result = thermal_register_governors();
if (result)
- goto destroy_workqueue;
+ goto unregister_governors;
result = class_register(&thermal_class);
if (result)
unregister_governors:
thermal_unregister_governors();
-destroy_workqueue:
destroy_workqueue(thermal_wq);
unregister_netlink:
thermal_netlink_exit();
#define to_cooling_device(_dev) \
container_of(_dev, struct thermal_cooling_device, device)
-int thermal_register_governor(struct thermal_governor *);
-void thermal_unregister_governor(struct thermal_governor *);
int thermal_zone_device_set_policy(struct thermal_zone_device *, char *);
int thermal_build_list_of_policies(char *buf);
void __thermal_zone_device_update(struct thermal_zone_device *tz,