===================================================================
@@ -551,8 +551,6 @@ void thermal_debug_tz_trip_up(struct the
if (!thermal_dbg)
return;
- mutex_lock(&thermal_dbg->lock);
-
tz_dbg = &thermal_dbg->tz_dbg;
/*
@@ -591,7 +589,7 @@ void thermal_debug_tz_trip_up(struct the
if (!tz_dbg->nr_trips) {
tze = thermal_debugfs_tz_event_alloc(tz, now);
if (!tze)
- goto unlock;
+ return;
list_add(&tze->node, &tz_dbg->tz_episodes);
}
@@ -613,9 +611,6 @@ void thermal_debug_tz_trip_up(struct the
tze = list_first_entry(&tz_dbg->tz_episodes, struct tz_episode, node);
tze->trip_stats[trip_id].timestamp = now;
-
-unlock:
- mutex_unlock(&thermal_dbg->lock);
}
void thermal_debug_tz_trip_down(struct thermal_zone_device *tz,
@@ -631,8 +626,6 @@ void thermal_debug_tz_trip_down(struct t
if (!thermal_dbg)
return;
- mutex_lock(&thermal_dbg->lock);
-
tz_dbg = &thermal_dbg->tz_dbg;
/*
@@ -643,7 +636,7 @@ void thermal_debug_tz_trip_down(struct t
* no mitigation mechanism yet at boot time.
*/
if (!tz_dbg->nr_trips)
- goto out;
+ return;
for (i = tz_dbg->nr_trips - 1; i >= 0; i--) {
if (tz_dbg->trips_crossed[i] == trip_id)
@@ -651,7 +644,7 @@ void thermal_debug_tz_trip_down(struct t
}
if (i < 0)
- goto out;
+ return;
tz_dbg->nr_trips--;
@@ -671,9 +664,6 @@ void thermal_debug_tz_trip_down(struct t
*/
if (!tz_dbg->nr_trips)
tze->duration = ktime_sub(now, tze->timestamp);
-
-out:
- mutex_unlock(&thermal_dbg->lock);
}
void thermal_debug_update_trip_stats(struct thermal_zone_device *tz)
@@ -686,12 +676,10 @@ void thermal_debug_update_trip_stats(str
if (!thermal_dbg)
return;
- mutex_lock(&thermal_dbg->lock);
-
tz_dbg = &thermal_dbg->tz_dbg;
if (!tz_dbg->nr_trips)
- goto out;
+ return;
tze = list_first_entry(&tz_dbg->tz_episodes, struct tz_episode, node);
@@ -704,19 +692,22 @@ void thermal_debug_update_trip_stats(str
trip_stats->avg += (tz->temperature - trip_stats->avg) /
++trip_stats->count;
}
-out:
- mutex_unlock(&thermal_dbg->lock);
}
static void *tze_seq_start(struct seq_file *s, loff_t *pos)
{
struct thermal_zone_device *tz = s->private;
- struct thermal_debugfs *thermal_dbg = tz->debugfs;
- struct tz_debugfs *tz_dbg = &thermal_dbg->tz_dbg;
+ struct thermal_debugfs *thermal_dbg;
- mutex_lock(&thermal_dbg->lock);
+ mutex_lock(&tz->lock);
- return seq_list_start(&tz_dbg->tz_episodes, *pos);
+ thermal_dbg = tz->debugfs;
+ if (!thermal_dbg) {
+ mutex_unlock(&tz->lock);
+ return NULL;
+ }
+
+ return seq_list_start(&thermal_dbg->tz_dbg.tz_episodes, *pos);
}
static void *tze_seq_next(struct seq_file *s, void *v, loff_t *pos)
@@ -731,9 +722,8 @@ static void *tze_seq_next(struct seq_fil
static void tze_seq_stop(struct seq_file *s, void *v)
{
struct thermal_zone_device *tz = s->private;
- struct thermal_debugfs *thermal_dbg = tz->debugfs;
- mutex_unlock(&thermal_dbg->lock);
+ mutex_unlock(&tz->lock);
}
static int tze_seq_show(struct seq_file *s, void *v)
@@ -826,23 +816,33 @@ void thermal_debug_tz_add(struct thermal
debugfs_create_file("mitigations", 0400, thermal_dbg->d_top, tz, &tze_fops);
+ mutex_lock(&tz->lock);
+
tz->debugfs = thermal_dbg;
+
+ mutex_unlock(&tz->lock);
}
void thermal_debug_tz_remove(struct thermal_zone_device *tz)
{
- struct thermal_debugfs *thermal_dbg = tz->debugfs;
+ struct thermal_debugfs *thermal_dbg;
struct tz_episode *tze, *tmp;
struct tz_debugfs *tz_dbg;
int *trips_crossed;
- if (!thermal_dbg)
+ mutex_lock(&tz->lock);
+
+ thermal_dbg = tz->debugfs;
+ if (!thermal_dbg) {
+ mutex_unlock(&tz->lock);
return;
+ }
- tz_dbg = &thermal_dbg->tz_dbg;
+ tz->debugfs = NULL;
- mutex_lock(&thermal_dbg->lock);
+ mutex_unlock(&tz->lock);
+ tz_dbg = &thermal_dbg->tz_dbg;
trips_crossed = tz_dbg->trips_crossed;
list_for_each_entry_safe(tze, tmp, &tz_dbg->tz_episodes, node) {
@@ -850,10 +850,6 @@ void thermal_debug_tz_remove(struct ther
kfree(tze);
}
- tz->debugfs = NULL;
-
- mutex_unlock(&thermal_dbg->lock);
-
thermal_debugfs_remove_id(thermal_dbg);
kfree(trips_crossed);
}