`On Fri, Apr 06, 2018 at 04:36:06PM +0100, Dietmar Eggemann wrote:> +	for_each_freq_domain(fd) {> +		unsigned long spare_cap, max_spare_cap = 0;> +		int max_spare_cap_cpu = -1;> +		unsigned long util;> +> +		/* Find the CPU with the max spare cap in the freq. dom. */> +		for_each_cpu_and(cpu, freq_domain_span(fd), sched_domain_span(sd)) {> +			if (!cpumask_test_cpu(cpu, &p->cpus_allowed))> +				continue;> +> +			if (cpu == prev_cpu)> +				continue;> +> +			util = cpu_util_wake(cpu, p);> +			cpu_cap = capacity_of(cpu);> +			if (!util_fits_capacity(util + task_util, cpu_cap))> +				continue;> +> +			spare_cap = cpu_cap - util;> +			if (spare_cap > max_spare_cap) {> +				max_spare_cap = spare_cap;> +				max_spare_cap_cpu = cpu;> +			}> +		}> +> +		/* Evaluate the energy impact of using this CPU. */> +		if (max_spare_cap_cpu >= 0) {> +			cur_energy = compute_energy(p, max_spare_cap_cpu);> +			if (cur_energy < best_energy) {> +				best_energy = cur_energy;> +				best_energy_cpu = max_spare_cap_cpu;> +			}> +		}> +	}If each CPU has its own frequency domain, then the above loop ends upbeing O(n^2), no? Is there really nothing we can do about that? Also, Ifeel that warrants a comment warning about this.Someone, somewhere will try and build a 64+64 cpu system and getsurprised it doesn't work :-)`