cpufreq: Split cpufreq_offline()
[ Upstream commit fddd8f86dff4a24742a7f0322ccbb34c6c1c9850 ] 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> Stable-dep-of: b8f85833c057 ("cpufreq: exit() callback is optional") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
3a28fbf533
commit
19b06dec36
@@ -1559,21 +1559,10 @@ static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
|
|||||||
return 0;
|
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;
|
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())
|
if (has_target())
|
||||||
cpufreq_stop_governor(policy);
|
cpufreq_stop_governor(policy);
|
||||||
|
|
||||||
@@ -1591,7 +1580,7 @@ static int cpufreq_offline(unsigned int cpu)
|
|||||||
pr_err("%s: Failed to start governor\n", __func__);
|
pr_err("%s: Failed to start governor\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
goto unlock;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_target())
|
if (has_target())
|
||||||
@@ -1621,8 +1610,24 @@ static int cpufreq_offline(unsigned int cpu)
|
|||||||
cpufreq_driver->exit(policy);
|
cpufreq_driver->exit(policy);
|
||||||
policy->freq_table = NULL;
|
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);
|
up_write(&policy->rwsem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user