]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
thermal: trip: Split thermal_zone_device_set_mode()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 18 Jul 2024 19:00:35 +0000 (21:00 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Aug 2024 07:01:07 +0000 (09:01 +0200)
[ Upstream commit e5f98896efb3b6350cb6f1c241394966dcbcf240 ]

Pull a wrapper around thermal zone .change_mode() callback out of
thermal_zone_device_set_mode() because it will be used elsewhere
subsequently.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/2206793.irdbgypaU6@rjwysocki.net
Stable-dep-of: f7c1b0e4ae47 ("thermal: core: Back off when polling thermal zones on errors")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/thermal/thermal_core.c

index 4e7fec406ee595246f6b4290993423e4af9ae420..657c57a40b4d40a869da7d45ee85e2b488508eef 100644 (file)
@@ -272,6 +272,22 @@ static int __init thermal_register_governors(void)
        return ret;
 }
 
+static int __thermal_zone_device_set_mode(struct thermal_zone_device *tz,
+                                         enum thermal_device_mode mode)
+{
+       if (tz->ops.change_mode) {
+               int ret;
+
+               ret = tz->ops.change_mode(tz, mode);
+               if (ret)
+                       return ret;
+       }
+
+       tz->mode = mode;
+
+       return 0;
+}
+
 /*
  * Zone update section: main control loop applied to each zone while monitoring
  * in polling mode. The monitoring is done using a workqueue.
@@ -537,7 +553,7 @@ monitor:
 static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
                                        enum thermal_device_mode mode)
 {
-       int ret = 0;
+       int ret;
 
        mutex_lock(&tz->lock);
 
@@ -545,14 +561,15 @@ static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
        if (mode == tz->mode) {
                mutex_unlock(&tz->lock);
 
-               return ret;
+               return 0;
        }
 
-       if (tz->ops.change_mode)
-               ret = tz->ops.change_mode(tz, mode);
+       ret = __thermal_zone_device_set_mode(tz, mode);
+       if (ret) {
+               mutex_unlock(&tz->lock);
 
-       if (!ret)
-               tz->mode = mode;
+               return ret;
+       }
 
        __thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);
 
@@ -563,7 +580,7 @@ static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
        else
                thermal_notify_tz_disable(tz);
 
-       return ret;
+       return 0;
 }
 
 int thermal_zone_device_enable(struct thermal_zone_device *tz)