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

Commit 0c3bb4bd authored by Junjie Wu's avatar Junjie Wu
Browse files

cpufreq: Set policy for NULL before cleaning up kobj



__cpufreq_remove_dev_finish() cleans up the policy->kobj while
per_cpu(cpufreq_cpu_data) still contains a valid policy pointer.
This causes a race between kobject_get() called from cpufreq_cpu_get()
and cpu hotplug.

Set cpufreq_cpu_data to NULL before cleaning up kobject so that
subsequent cpufreq_cpu_get() will fail and thus not race with
cpu hotplug.

Change-Id: I0e2d1a64b7aac98aa69e137cc902e07d0edb786e
Signed-off-by: default avatarJunjie Wu <junjiew@codeaurora.org>
parent f75c756e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1252,6 +1252,7 @@ static int __cpufreq_remove_dev_finish(struct device *dev,

	read_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);

	if (!policy) {
@@ -1321,7 +1322,6 @@ static int __cpufreq_remove_dev_finish(struct device *dev,
		}
	}

	per_cpu(cpufreq_cpu_data, cpu) = NULL;
	return 0;
}