linux/arch/powerpc/include/asm/cputhreads.h
<<
>>
Prefs
   1#ifndef _ASM_POWERPC_CPUTHREADS_H
   2#define _ASM_POWERPC_CPUTHREADS_H
   3
   4#include <linux/cpumask.h>
   5
   6/*
   7 * Mapping of threads to cores
   8 */
   9
  10#ifdef CONFIG_SMP
  11extern int threads_per_core;
  12extern int threads_shift;
  13extern cpumask_t threads_core_mask;
  14#else
  15#define threads_per_core        1
  16#define threads_shift           0
  17#define threads_core_mask       (CPU_MASK_CPU0)
  18#endif
  19
  20/* cpu_thread_mask_to_cores - Return a cpumask of one per cores
  21 *                            hit by the argument
  22 *
  23 * @threads:    a cpumask of threads
  24 *
  25 * This function returns a cpumask which will have one "cpu" (or thread)
  26 * bit set for each core that has at least one thread set in the argument.
  27 *
  28 * This can typically be used for things like IPI for tlb invalidations
  29 * since those need to be done only once per core/TLB
  30 */
  31static inline cpumask_t cpu_thread_mask_to_cores(cpumask_t threads)
  32{
  33        cpumask_t       tmp, res;
  34        int             i;
  35
  36        res = CPU_MASK_NONE;
  37        for (i = 0; i < NR_CPUS; i += threads_per_core) {
  38                cpus_shift_left(tmp, threads_core_mask, i);
  39                if (cpus_intersects(threads, tmp))
  40                        cpu_set(i, res);
  41        }
  42        return res;
  43}
  44
  45static inline int cpu_nr_cores(void)
  46{
  47        return NR_CPUS >> threads_shift;
  48}
  49
  50static inline cpumask_t cpu_online_cores_map(void)
  51{
  52        return cpu_thread_mask_to_cores(cpu_online_map);
  53}
  54
  55static inline int cpu_thread_to_core(int cpu)
  56{
  57        return cpu >> threads_shift;
  58}
  59
  60static inline int cpu_thread_in_core(int cpu)
  61{
  62        return cpu & (threads_per_core - 1);
  63}
  64
  65static inline int cpu_first_thread_in_core(int cpu)
  66{
  67        return cpu & ~(threads_per_core - 1);
  68}
  69
  70#endif /* _ASM_POWERPC_CPUTHREADS_H */
  71
  72