Commit 20711efa authored by Beata Michalska's avatar Beata Michalska Committed by Catalin Marinas
Browse files

arm64: Utilize for_each_cpu_wrap for reference lookup



While searching for a reference CPU within a given policy,
arch_freq_get_on_cpu relies on cpumask_next_wrap to iterate over
all available CPUs and to ensure each is verified only once.
Recent changes to cpumask_next_wrap will handle the latter no more,
so switching to for_each_cpu_wrap, which  preserves expected behavior
while ensuring compatibility with the updates.
Not to mention that when iterating over each CPU, using a dedicated
iterator is preferable to an open-coded loop.

Fixes: 16d1e274 ("arm64: Provide an AMU-based version of arch_freq_get_on_cpu")
Signed-off-by: default avatarBeata Michalska <beata.michalska@arm.com>
Link: https://lore.kernel.org/r/20250220091015.2319901-1-beata.michalska@arm.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 39b19974
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -254,7 +254,7 @@ int arch_freq_get_on_cpu(int cpu)
		if (!housekeeping_cpu(cpu, HK_TYPE_TICK) ||
		    time_is_before_jiffies(last_update + msecs_to_jiffies(AMU_SAMPLE_EXP_MS))) {
			struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
			int ref_cpu = cpu;
			int ref_cpu;

			if (!policy)
				return -EINVAL;
@@ -265,11 +265,15 @@ int arch_freq_get_on_cpu(int cpu)
				return -EOPNOTSUPP;
			}

			do {
				ref_cpu = cpumask_next_wrap(ref_cpu, policy->cpus,
							    start_cpu, true);

			} while (ref_cpu < nr_cpu_ids && idle_cpu(ref_cpu));
			for_each_cpu_wrap(ref_cpu, policy->cpus, cpu + 1) {
				if (ref_cpu == start_cpu) {
					/* Prevent verifying same CPU twice */
					ref_cpu = nr_cpu_ids;
					break;
				}
				if (!idle_cpu(ref_cpu))
					break;
			}

			cpufreq_cpu_put(policy);