[RFC PATCH for 6.13 v1 01/20] thermal: core: Use the thermal zone guard in more cases

From: Rafael J. Wysocki
Date: Sat Sep 14 2024 - 07:14:16 EST


From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>

There are a few more cases in which the thermal zone guard introduced
previously can be used to help clarify the code, so do that.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---

To be merged with https://lore.kernel.org/linux-pm/3241904.5fSG56mABF@xxxxxxxxxxxxx/

---
drivers/thermal/thermal_debugfs.c | 25 +++++++++++++++----------
drivers/thermal/thermal_hwmon.c | 6 +-----
drivers/thermal/thermal_netlink.c | 21 ++++++---------------
3 files changed, 22 insertions(+), 30 deletions(-)

Index: linux-pm/drivers/thermal/thermal_netlink.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_netlink.c
+++ linux-pm/drivers/thermal/thermal_netlink.c
@@ -460,7 +460,7 @@ static int thermal_genl_cmd_tz_get_trip(
if (!start_trip)
return -EMSGSIZE;

- mutex_lock(&tz->lock);
+ guard(thermal_zone)(tz);

for_each_trip_desc(tz, td) {
const struct thermal_trip *trip = &td->trip;
@@ -470,19 +470,12 @@ static int thermal_genl_cmd_tz_get_trip(
nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_TYPE, trip->type) ||
nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_TEMP, trip->temperature) ||
nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_HYST, trip->hysteresis))
- goto out_cancel_nest;
+ return -EMSGSIZE;
}

- mutex_unlock(&tz->lock);
-
nla_nest_end(msg, start_trip);

return 0;
-
-out_cancel_nest:
- mutex_unlock(&tz->lock);
-
- return -EMSGSIZE;
}

static int thermal_genl_cmd_tz_get_temp(struct param *p)
@@ -515,7 +508,7 @@ static int thermal_genl_cmd_tz_get_gov(s
{
struct sk_buff *msg = p->msg;
struct thermal_zone_device *tz;
- int id, ret = 0;
+ int id;

if (!p->attrs[THERMAL_GENL_ATTR_TZ_ID])
return -EINVAL;
@@ -526,16 +519,14 @@ static int thermal_genl_cmd_tz_get_gov(s
if (!tz)
return -EINVAL;

- mutex_lock(&tz->lock);
+ guard(thermal_zone)(tz);

if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_ID, id) ||
nla_put_string(msg, THERMAL_GENL_ATTR_TZ_GOV_NAME,
tz->governor->name))
- ret = -EMSGSIZE;
-
- mutex_unlock(&tz->lock);
+ return -EMSGSIZE;

- return ret;
+ return 0;
}

static int __thermal_genl_cmd_cdev_get(struct thermal_cooling_device *cdev,
Index: linux-pm/drivers/thermal/thermal_debugfs.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_debugfs.c
+++ linux-pm/drivers/thermal/thermal_debugfs.c
@@ -885,6 +885,19 @@ void thermal_debug_tz_add(struct thermal
tz->debugfs = thermal_dbg;
}

+static struct thermal_debugfs *thermal_debug_tz_clear(struct thermal_zone_device *tz)
+{
+ struct thermal_debugfs *thermal_dbg;
+
+ guard(thermal_zone)(tz);
+
+ thermal_dbg = tz->debugfs;
+ if (thermal_dbg)
+ tz->debugfs = NULL;
+
+ return thermal_dbg;
+}
+
void thermal_debug_tz_remove(struct thermal_zone_device *tz)
{
struct thermal_debugfs *thermal_dbg;
@@ -892,17 +905,9 @@ void thermal_debug_tz_remove(struct ther
struct tz_debugfs *tz_dbg;
int *trips_crossed;

- mutex_lock(&tz->lock);
-
- thermal_dbg = tz->debugfs;
- if (!thermal_dbg) {
- mutex_unlock(&tz->lock);
+ thermal_dbg = thermal_debug_tz_clear(tz);
+ if (!thermal_dbg)
return;
- }
-
- tz->debugfs = NULL;
-
- mutex_unlock(&tz->lock);

tz_dbg = &thermal_dbg->tz_dbg;

Index: linux-pm/drivers/thermal/thermal_hwmon.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_hwmon.c
+++ linux-pm/drivers/thermal/thermal_hwmon.c
@@ -78,19 +78,15 @@ temp_crit_show(struct device *dev, struc
int temperature;
int ret;

- mutex_lock(&tz->lock);
+ guard(thermal_zone)(tz);

ret = tz->ops.get_crit_temp(tz, &temperature);
-
- mutex_unlock(&tz->lock);
-
if (ret)
return ret;

return sprintf(buf, "%d\n", temperature);
}

-
static struct thermal_hwmon_device *
thermal_hwmon_lookup_by_type(const struct thermal_zone_device *tz)
{