hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/opp/cpu.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Generic OPP helper interface for CPU device
34 *
....@@ -5,10 +6,6 @@
56 * Nishanth Menon
67 * Romit Dasgupta
78 * Kevin Hilman
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License version 2 as
11
- * published by the Free Software Foundation.
129 */
1310
1411 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
....@@ -108,7 +105,8 @@
108105 EXPORT_SYMBOL_GPL(dev_pm_opp_free_cpufreq_table);
109106 #endif /* CONFIG_CPU_FREQ */
110107
111
-void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, bool of)
108
+void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask,
109
+ int last_cpu)
112110 {
113111 struct device *cpu_dev;
114112 int cpu;
....@@ -116,6 +114,9 @@
116114 WARN_ON(cpumask_empty(cpumask));
117115
118116 for_each_cpu(cpu, cpumask) {
117
+ if (cpu == last_cpu)
118
+ break;
119
+
119120 cpu_dev = get_cpu_device(cpu);
120121 if (!cpu_dev) {
121122 pr_err("%s: failed to get cpu%d device\n", __func__,
....@@ -123,10 +124,7 @@
123124 continue;
124125 }
125126
126
- if (of)
127
- dev_pm_opp_of_remove_table(cpu_dev);
128
- else
129
- dev_pm_opp_remove_table(cpu_dev);
127
+ dev_pm_opp_remove_table(cpu_dev);
130128 }
131129 }
132130
....@@ -140,7 +138,7 @@
140138 */
141139 void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask)
142140 {
143
- _dev_pm_opp_cpumask_remove_table(cpumask, false);
141
+ _dev_pm_opp_cpumask_remove_table(cpumask, -1);
144142 }
145143 EXPORT_SYMBOL_GPL(dev_pm_opp_cpumask_remove_table);
146144
....@@ -222,8 +220,10 @@
222220 cpumask_clear(cpumask);
223221
224222 if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) {
223
+ mutex_lock(&opp_table->lock);
225224 list_for_each_entry(opp_dev, &opp_table->dev_list, node)
226225 cpumask_set_cpu(opp_dev->dev->id, cpumask);
226
+ mutex_unlock(&opp_table->lock);
227227 } else {
228228 cpumask_set_cpu(cpu_dev->id, cpumask);
229229 }