Merge tag 'xtensa-20220804' of https://github.com/jcmvbkbc/linux-xtensa
[linux-2.6-microblaze.git] / drivers / powercap / dtpm_cpu.c
index f5eced0..2ff7717 100644 (file)
@@ -53,7 +53,7 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)
 
        for (i = 0; i < pd->nr_perf_states; i++) {
 
-               power = pd->table[i].power * MICROWATT_PER_MILLIWATT * nr_cpus;
+               power = pd->table[i].power * nr_cpus;
 
                if (power > power_limit)
                        break;
@@ -63,42 +63,26 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)
 
        freq_qos_update_request(&dtpm_cpu->qos_req, freq);
 
-       power_limit = pd->table[i - 1].power *
-               MICROWATT_PER_MILLIWATT * nr_cpus;
+       power_limit = pd->table[i - 1].power * nr_cpus;
 
        return power_limit;
 }
 
 static u64 scale_pd_power_uw(struct cpumask *pd_mask, u64 power)
 {
-       unsigned long max = 0, sum_util = 0;
+       unsigned long max, sum_util = 0;
        int cpu;
 
-       for_each_cpu_and(cpu, pd_mask, cpu_online_mask) {
-
-               /*
-                * The capacity is the same for all CPUs belonging to
-                * the same perf domain, so a single call to
-                * arch_scale_cpu_capacity() is enough. However, we
-                * need the CPU parameter to be initialized by the
-                * loop, so the call ends up in this block.
-                *
-                * We can initialize 'max' with a cpumask_first() call
-                * before the loop but the bits computation is not
-                * worth given the arch_scale_cpu_capacity() just
-                * returns a value where the resulting assembly code
-                * will be optimized by the compiler.
-                */
-               max = arch_scale_cpu_capacity(cpu);
-               sum_util += sched_cpu_util(cpu, max);
-       }
-
        /*
-        * In the improbable case where all the CPUs of the perf
-        * domain are offline, 'max' will be zero and will lead to an
-        * illegal operation with a zero division.
+        * The capacity is the same for all CPUs belonging to
+        * the same perf domain.
         */
-       return max ? (power * ((sum_util << 10) / max)) >> 10 : 0;
+       max = arch_scale_cpu_capacity(cpumask_first(pd_mask));
+
+       for_each_cpu_and(cpu, pd_mask, cpu_online_mask)
+               sum_util += sched_cpu_util(cpu);
+
+       return (power * ((sum_util << 10) / max)) >> 10;
 }
 
 static u64 get_pd_power_uw(struct dtpm *dtpm)