Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aee24865 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cpufreq: Use correct locking for cpufreq_cpu_data"

parents c6a9711d de52a2a1
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -1276,10 +1276,10 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
	unsigned long flags;
	struct cpufreq_policy *policy;

	read_lock_irqsave(&cpufreq_driver_lock, flags);
	write_lock_irqsave(&cpufreq_driver_lock, flags);
	policy = per_cpu(cpufreq_cpu_data, cpu);
	per_cpu(cpufreq_cpu_data, cpu) = NULL;
	read_unlock_irqrestore(&cpufreq_driver_lock, flags);
	write_unlock_irqrestore(&cpufreq_driver_lock, flags);

	if (!policy) {
		pr_debug("%s: No cpu_data found\n", __func__);
@@ -1445,12 +1445,17 @@ EXPORT_SYMBOL(cpufreq_quick_get_max);

static unsigned int __cpufreq_get(unsigned int cpu)
{
	struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
	struct cpufreq_policy *policy;
	unsigned int ret_freq = 0;
	unsigned long flags;

	if (!cpufreq_driver->get)
		return ret_freq;

	read_lock_irqsave(&cpufreq_driver_lock, flags);
	policy = per_cpu(cpufreq_cpu_data, cpu);
	read_unlock_irqrestore(&cpufreq_driver_lock, flags);

	ret_freq = cpufreq_driver->get(cpu);

	if (ret_freq && policy->cur &&
@@ -1474,12 +1479,17 @@ static unsigned int __cpufreq_get(unsigned int cpu)
 */
unsigned int cpufreq_get(unsigned int cpu)
{
	struct cpufreq_policy *policy = per_cpu(cpufreq_cpu_data, cpu);
	struct cpufreq_policy *policy;
	unsigned int ret_freq = 0;
	unsigned long flags;

	if (cpufreq_disabled() || !cpufreq_driver)
		return -ENOENT;

	read_lock_irqsave(&cpufreq_driver_lock, flags);
	policy = per_cpu(cpufreq_cpu_data, cpu);
	read_unlock_irqrestore(&cpufreq_driver_lock, flags);

	BUG_ON(!policy);

	if (!down_read_trylock(&cpufreq_rwsem))