]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq: Split cpufreq_offline()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 11 May 2022 15:50:09 +0000 (17:50 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 12 May 2022 15:11:57 +0000 (17:11 +0200)
Split the "core" part running under the policy rwsem out of
cpufreq_offline() to allow the locking in cpufreq_remove_dev() to be
rearranged more easily.

As a side-effect this eliminates the unlock label that's not needed
any more.

No expected functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/cpufreq.c

index 79cedc2bd7fcc0eb6a9c8a5bae6607f6972270e4..9664a86766c94a736c5c2576d8409dc569b817ff 100644 (file)
@@ -1577,21 +1577,10 @@ static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
        return 0;
 }
 
-static int cpufreq_offline(unsigned int cpu)
+static void __cpufreq_offline(unsigned int cpu, struct cpufreq_policy *policy)
 {
-       struct cpufreq_policy *policy;
        int ret;
 
-       pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
-
-       policy = cpufreq_cpu_get_raw(cpu);
-       if (!policy) {
-               pr_debug("%s: No cpu_data found\n", __func__);
-               return 0;
-       }
-
-       down_write(&policy->rwsem);
-
        if (has_target())
                cpufreq_stop_governor(policy);
 
@@ -1609,7 +1598,7 @@ static int cpufreq_offline(unsigned int cpu)
                                pr_err("%s: Failed to start governor\n", __func__);
                }
 
-               goto unlock;
+               return;
        }
 
        if (has_target())
@@ -1636,8 +1625,24 @@ static int cpufreq_offline(unsigned int cpu)
                cpufreq_driver->exit(policy);
                policy->freq_table = NULL;
        }
+}
+
+static int cpufreq_offline(unsigned int cpu)
+{
+       struct cpufreq_policy *policy;
+
+       pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
+
+       policy = cpufreq_cpu_get_raw(cpu);
+       if (!policy) {
+               pr_debug("%s: No cpu_data found\n", __func__);
+               return 0;
+       }
+
+       down_write(&policy->rwsem);
+
+       __cpufreq_offline(cpu, policy);
 
-unlock:
        up_write(&policy->rwsem);
        return 0;
 }