unsigned long cur_delta, max_spare_cap = 0;
                unsigned long rq_util_min, rq_util_max;
                unsigned long util_min, util_max;
-               bool compute_prev_delta = false;
+               unsigned long prev_spare_cap = 0;
                int max_spare_cap_cpu = -1;
                unsigned long base_energy;
 
 
                        if (cpu == prev_cpu) {
                                /* Always use prev_cpu as a candidate. */
-                               compute_prev_delta = true;
+                               prev_spare_cap = cpu_cap;
                        } else if (cpu_cap > max_spare_cap) {
                                /*
                                 * Find the CPU with the maximum spare capacity
-                                * in the performance domain.
+                                * among the remaining CPUs in the performance
+                                * domain.
                                 */
                                max_spare_cap = cpu_cap;
                                max_spare_cap_cpu = cpu;
                        }
                }
 
-               if (max_spare_cap_cpu < 0 && !compute_prev_delta)
+               if (max_spare_cap_cpu < 0 && prev_spare_cap == 0)
                        continue;
 
                eenv_pd_busy_time(&eenv, cpus, p);
                base_energy = compute_energy(&eenv, pd, cpus, p, -1);
 
                /* Evaluate the energy impact of using prev_cpu. */
-               if (compute_prev_delta) {
+               if (prev_spare_cap > 0) {
                        prev_delta = compute_energy(&eenv, pd, cpus, p,
                                                    prev_cpu);
                        /* CPU utilization has changed */
                }
 
                /* Evaluate the energy impact of using max_spare_cap_cpu. */
-               if (max_spare_cap_cpu >= 0) {
+               if (max_spare_cap_cpu >= 0 && max_spare_cap > prev_spare_cap) {
                        cur_delta = compute_energy(&eenv, pd, cpus, p,
                                                   max_spare_cap_cpu);
                        /* CPU utilization has changed */