* task.
  */
 static long
-compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd)
+compute_energy(struct task_struct *p, int dst_cpu, struct cpumask *cpus,
+              struct perf_domain *pd)
 {
-       struct cpumask *pd_mask = perf_domain_span(pd);
        unsigned long max_util = 0, sum_util = 0, cpu_cap;
        int cpu;
 
-       cpu_cap = arch_scale_cpu_capacity(cpumask_first(pd_mask));
-       cpu_cap -= arch_scale_thermal_pressure(cpumask_first(pd_mask));
+       cpu_cap = arch_scale_cpu_capacity(cpumask_first(cpus));
+       cpu_cap -= arch_scale_thermal_pressure(cpumask_first(cpus));
 
        /*
         * The capacity state of CPUs of the current rd can be driven by CPUs
         * If an entire pd is outside of the current rd, it will not appear in
         * its pd list and will not be accounted by compute_energy().
         */
-       for_each_cpu_and(cpu, pd_mask, cpu_online_mask) {
+       for_each_cpu(cpu, cpus) {
                unsigned long util_freq = cpu_util_next(cpu, p, dst_cpu);
                unsigned long cpu_util, util_running = util_freq;
                struct task_struct *tsk = NULL;
  */
 static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
 {
+       struct cpumask *cpus = this_cpu_cpumask_var_ptr(select_rq_mask);
        unsigned long prev_delta = ULONG_MAX, best_delta = ULONG_MAX;
        struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
        int cpu, best_energy_cpu = prev_cpu, target = -1;
                unsigned long base_energy_pd;
                int max_spare_cap_cpu = -1;
 
-               for_each_cpu_and(cpu, perf_domain_span(pd), sched_domain_span(sd)) {
+               cpumask_and(cpus, perf_domain_span(pd), cpu_online_mask);
+
+               for_each_cpu_and(cpu, cpus, sched_domain_span(sd)) {
                        if (!cpumask_test_cpu(cpu, p->cpus_ptr))
                                continue;
 
                        continue;
 
                /* Compute the 'base' energy of the pd, without @p */
-               base_energy_pd = compute_energy(p, -1, pd);
+               base_energy_pd = compute_energy(p, -1, cpus, pd);
                base_energy += base_energy_pd;
 
                /* Evaluate the energy impact of using prev_cpu. */
                if (compute_prev_delta) {
-                       prev_delta = compute_energy(p, prev_cpu, pd);
+                       prev_delta = compute_energy(p, prev_cpu, cpus, pd);
                        if (prev_delta < base_energy_pd)
                                goto unlock;
                        prev_delta -= base_energy_pd;
 
                /* Evaluate the energy impact of using max_spare_cap_cpu. */
                if (max_spare_cap_cpu >= 0) {
-                       cur_delta = compute_energy(p, max_spare_cap_cpu, pd);
+                       cur_delta = compute_energy(p, max_spare_cap_cpu, cpus,
+                                                  pd);
                        if (cur_delta < base_energy_pd)
                                goto unlock;
                        cur_delta -= base_energy_pd;