#define cpus_weight_nr(cpumask)               cpus_weight(cpumask)
  #define for_each_cpu_mask_nr(cpu, mask)       for_each_cpu_mask(cpu, mask)
  
 +#else /* NR_CPUS > 64 */
 +
 +int __next_cpu_nr(int n, const cpumask_t *srcp);
 +#define next_cpu_nr(n, src)   __next_cpu_nr((n), &(src))
 +#define cpus_weight_nr(cpumask)       __cpus_weight(&(cpumask), nr_cpu_ids)
 +#define for_each_cpu_mask_nr(cpu, mask)                       \
 +      for ((cpu) = -1;                                \
 +              (cpu) = next_cpu_nr((cpu), (mask)),     \
 +              (cpu) < nr_cpu_ids; )
 +
 +#endif /* NR_CPUS > 64 */
 +
  /*
   * The following particular system cpumasks and operations manage
-  * possible, present and online cpus.  Each of them is a fixed size
+  * possible, present, active and online cpus.  Each of them is a fixed size
   * bitmap of size NR_CPUS.
   *
   *  #ifdef CONFIG_HOTPLUG_CPU
  extern cpumask_t cpu_possible_map;
  extern cpumask_t cpu_online_map;
  extern cpumask_t cpu_present_map;
+ extern cpumask_t cpu_active_map;
  
  #if NR_CPUS > 1
 -#define num_online_cpus()     cpus_weight(cpu_online_map)
 -#define num_possible_cpus()   cpus_weight(cpu_possible_map)
 -#define num_present_cpus()    cpus_weight(cpu_present_map)
 +#define num_online_cpus()     cpus_weight_nr(cpu_online_map)
 +#define num_possible_cpus()   cpus_weight_nr(cpu_possible_map)
 +#define num_present_cpus()    cpus_weight_nr(cpu_present_map)
  #define cpu_online(cpu)               cpu_isset((cpu), cpu_online_map)
  #define cpu_possible(cpu)     cpu_isset((cpu), cpu_possible_map)
  #define cpu_present(cpu)      cpu_isset((cpu), cpu_present_map)
 
                    || ((sd->flags & SD_WAKE_IDLE_FAR)
                        && !task_hot(p, task_rq(p)->clock, sd))) {
                        cpus_and(tmp, sd->span, p->cpus_allowed);
 -                      for_each_cpu_mask(i, tmp) {
+                       cpus_and(tmp, tmp, cpu_active_map);
 +                      for_each_cpu_mask_nr(i, tmp) {
                                if (idle_cpu(i)) {
                                        if (i != task_cpu(p)) {
                                                schedstat_inc(p,