These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / powerpc / include / asm / cputhreads.h
index 5be6c47..ba42e46 100644 (file)
@@ -31,9 +31,9 @@ extern cpumask_t threads_core_mask;
 /* cpu_thread_mask_to_cores - Return a cpumask of one per cores
  *                            hit by the argument
  *
- * @threads:   a cpumask of threads
+ * @threads:   a cpumask of online threads
  *
- * This function returns a cpumask which will have one "cpu" (or thread)
+ * This function returns a cpumask which will have one online cpu's
  * bit set for each core that has at least one thread set in the argument.
  *
  * This can typically be used for things like IPI for tlb invalidations
@@ -42,13 +42,16 @@ extern cpumask_t threads_core_mask;
 static inline cpumask_t cpu_thread_mask_to_cores(const struct cpumask *threads)
 {
        cpumask_t       tmp, res;
-       int             i;
+       int             i, cpu;
 
        cpumask_clear(&res);
        for (i = 0; i < NR_CPUS; i += threads_per_core) {
                cpumask_shift_left(&tmp, &threads_core_mask, i);
-               if (cpumask_intersects(threads, &tmp))
-                       cpumask_set_cpu(i, &res);
+               if (cpumask_intersects(threads, &tmp)) {
+                       cpu = cpumask_next_and(-1, &tmp, cpu_online_mask);
+                       if (cpu < nr_cpu_ids)
+                               cpumask_set_cpu(cpu, &res);
+               }
        }
        return res;
 }