Skip to content

Commit

Permalink
thermal: Drop redundant and confusing device_is_registered() checks
Browse files Browse the repository at this point in the history
Multiple places in the thermal subsystem (most importantly, sysfs
attribute callback functions) check if the given thermal zone device is
still registered in order to return early in case the device_del() in
thermal_zone_device_unregister() has run already.

However, after thermal_zone_device_unregister() has been made wait for
all of the zone-related activity to complete before returning, it is
not necessary to do that any more, because all of the code holding a
reference to the thermal zone device object will be waited for even if
it does not do anything special to enforce this.

Accordingly, drop all of the device_is_registered() checks that are now
redundant and get rid of the zone locking that is not necessary any more
after dropping them.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-and-tested-by: Lukasz Luba <lukasz.luba@arm.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
  • Loading branch information
Rafael J. Wysocki committed Dec 12, 2023
1 parent 4649620 commit c3ffdff
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 72 deletions.
9 changes: 0 additions & 9 deletions drivers/thermal/thermal_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,6 @@ int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
mutex_lock(&thermal_governor_lock);
mutex_lock(&tz->lock);

if (!device_is_registered(&tz->device))
goto exit;

gov = __find_governor(strim(policy));
if (!gov)
goto exit;
Expand Down Expand Up @@ -471,12 +468,6 @@ static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
return ret;
}

if (!device_is_registered(&tz->device)) {
mutex_unlock(&tz->lock);

return -ENODEV;
}

if (tz->ops->change_mode)
ret = tz->ops->change_mode(tz, mode);

Expand Down
5 changes: 1 addition & 4 deletions drivers/thermal/thermal_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,7 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
goto unlock;
}

if (device_is_registered(&tz->device))
ret = __thermal_zone_get_temp(tz, temp);
else
ret = -ENODEV;
ret = __thermal_zone_get_temp(tz, temp);

unlock:
mutex_unlock(&tz->lock);
Expand Down
5 changes: 1 addition & 4 deletions drivers/thermal/thermal_hwmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,7 @@ temp_crit_show(struct device *dev, struct device_attribute *attr, char *buf)

mutex_lock(&tz->lock);

if (device_is_registered(&tz->device))
ret = tz->ops->get_crit_temp(tz, &temperature);
else
ret = -ENODEV;
ret = tz->ops->get_crit_temp(tz, &temperature);

mutex_unlock(&tz->lock);

Expand Down
60 changes: 5 additions & 55 deletions drivers/thermal/thermal_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,24 +83,12 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
struct thermal_zone_device *tz = to_thermal_zone(dev);
enum thermal_trip_type type;
int trip_id;

if (sscanf(attr->attr.name, "trip_point_%d_type", &trip_id) != 1)
return -EINVAL;

mutex_lock(&tz->lock);

if (!device_is_registered(dev)) {
mutex_unlock(&tz->lock);
return -ENODEV;
}

type = tz->trips[trip_id].type;

mutex_unlock(&tz->lock);

switch (type) {
switch (tz->trips[trip_id].type) {
case THERMAL_TRIP_CRITICAL:
return sprintf(buf, "critical\n");
case THERMAL_TRIP_HOT:
Expand Down Expand Up @@ -132,11 +120,6 @@ trip_point_temp_store(struct device *dev, struct device_attribute *attr,

mutex_lock(&tz->lock);

if (!device_is_registered(dev)) {
ret = -ENODEV;
goto unlock;
}

trip = &tz->trips[trip_id];

if (temp != trip->temperature) {
Expand All @@ -162,23 +145,12 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
struct thermal_zone_device *tz = to_thermal_zone(dev);
int trip_id, temp;
int trip_id;

if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip_id) != 1)
return -EINVAL;

mutex_lock(&tz->lock);

if (!device_is_registered(dev)) {
mutex_unlock(&tz->lock);
return -ENODEV;
}

temp = tz->trips[trip_id].temperature;

mutex_unlock(&tz->lock);

return sprintf(buf, "%d\n", temp);
return sprintf(buf, "%d\n", tz->trips[trip_id].temperature);
}

static ssize_t
Expand All @@ -199,11 +171,6 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr,

mutex_lock(&tz->lock);

if (!device_is_registered(dev)) {
ret = -ENODEV;
goto unlock;
}

trip = &tz->trips[trip_id];

if (hyst != trip->hysteresis) {
Expand All @@ -229,23 +196,12 @@ trip_point_hyst_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
struct thermal_zone_device *tz = to_thermal_zone(dev);
int trip_id, hyst;
int trip_id;

if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip_id) != 1)
return -EINVAL;

mutex_lock(&tz->lock);

if (!device_is_registered(dev)) {
mutex_unlock(&tz->lock);
return -ENODEV;
}

hyst = tz->trips[trip_id].hysteresis;

mutex_unlock(&tz->lock);

return sprintf(buf, "%d\n", hyst);
return sprintf(buf, "%d\n", tz->trips[trip_id].hysteresis);
}

static ssize_t
Expand Down Expand Up @@ -294,11 +250,6 @@ emul_temp_store(struct device *dev, struct device_attribute *attr,

mutex_lock(&tz->lock);

if (!device_is_registered(dev)) {
ret = -ENODEV;
goto unlock;
}

if (!tz->ops->set_emul_temp)
tz->emul_temperature = temperature;
else
Expand All @@ -307,7 +258,6 @@ emul_temp_store(struct device *dev, struct device_attribute *attr,
if (!ret)
__thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);

unlock:
mutex_unlock(&tz->lock);

return ret ? ret : count;
Expand Down

0 comments on commit c3ffdff

Please sign in to comment.