root/arch/x86/include/asm/topology.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. early_cpu_to_node
  2. cpumask_of_node
  3. numa_node_id
  4. early_cpu_to_node
  5. setup_node_to_cpumask_map
  6. topology_max_die_per_package
  7. topology_max_smt_threads
  8. topology_update_package_map
  9. topology_update_die_map
  10. topology_phys_to_logical_pkg
  11. topology_phys_to_logical_die
  12. topology_max_die_per_package
  13. topology_max_smt_threads
  14. topology_is_primary_thread
  15. topology_smt_supported
  16. arch_fix_phys_package_id
  17. sched_set_itmt_core_prio
  18. sched_set_itmt_support
  19. sched_clear_itmt_support

   1 /*
   2  * Written by: Matthew Dobson, IBM Corporation
   3  *
   4  * Copyright (C) 2002, IBM Corp.
   5  *
   6  * All rights reserved.
   7  *
   8  * This program is free software; you can redistribute it and/or modify
   9  * it under the terms of the GNU General Public License as published by
  10  * the Free Software Foundation; either version 2 of the License, or
  11  * (at your option) any later version.
  12  *
  13  * This program is distributed in the hope that it will be useful, but
  14  * WITHOUT ANY WARRANTY; without even the implied warranty of
  15  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  16  * NON INFRINGEMENT.  See the GNU General Public License for more
  17  * details.
  18  *
  19  * You should have received a copy of the GNU General Public License
  20  * along with this program; if not, write to the Free Software
  21  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22  *
  23  * Send feedback to <colpatch@us.ibm.com>
  24  */
  25 #ifndef _ASM_X86_TOPOLOGY_H
  26 #define _ASM_X86_TOPOLOGY_H
  27 
  28 /*
  29  * to preserve the visibility of NUMA_NO_NODE definition,
  30  * moved to there from here.  May be used independent of
  31  * CONFIG_NUMA.
  32  */
  33 #include <linux/numa.h>
  34 
  35 #ifdef CONFIG_NUMA
  36 #include <linux/cpumask.h>
  37 
  38 #include <asm/mpspec.h>
  39 #include <asm/percpu.h>
  40 
  41 /* Mappings between logical cpu number and node number */
  42 DECLARE_EARLY_PER_CPU(int, x86_cpu_to_node_map);
  43 
  44 #ifdef CONFIG_DEBUG_PER_CPU_MAPS
  45 /*
  46  * override generic percpu implementation of cpu_to_node
  47  */
  48 extern int __cpu_to_node(int cpu);
  49 #define cpu_to_node __cpu_to_node
  50 
  51 extern int early_cpu_to_node(int cpu);
  52 
  53 #else   /* !CONFIG_DEBUG_PER_CPU_MAPS */
  54 
  55 /* Same function but used if called before per_cpu areas are setup */
  56 static inline int early_cpu_to_node(int cpu)
  57 {
  58         return early_per_cpu(x86_cpu_to_node_map, cpu);
  59 }
  60 
  61 #endif /* !CONFIG_DEBUG_PER_CPU_MAPS */
  62 
  63 /* Mappings between node number and cpus on that node. */
  64 extern cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
  65 
  66 #ifdef CONFIG_DEBUG_PER_CPU_MAPS
  67 extern const struct cpumask *cpumask_of_node(int node);
  68 #else
  69 /* Returns a pointer to the cpumask of CPUs on Node 'node'. */
  70 static inline const struct cpumask *cpumask_of_node(int node)
  71 {
  72         return node_to_cpumask_map[node];
  73 }
  74 #endif
  75 
  76 extern void setup_node_to_cpumask_map(void);
  77 
  78 #define pcibus_to_node(bus) __pcibus_to_node(bus)
  79 
  80 extern int __node_distance(int, int);
  81 #define node_distance(a, b) __node_distance(a, b)
  82 
  83 #else /* !CONFIG_NUMA */
  84 
  85 static inline int numa_node_id(void)
  86 {
  87         return 0;
  88 }
  89 /*
  90  * indicate override:
  91  */
  92 #define numa_node_id numa_node_id
  93 
  94 static inline int early_cpu_to_node(int cpu)
  95 {
  96         return 0;
  97 }
  98 
  99 static inline void setup_node_to_cpumask_map(void) { }
 100 
 101 #endif
 102 
 103 #include <asm-generic/topology.h>
 104 
 105 extern const struct cpumask *cpu_coregroup_mask(int cpu);
 106 
 107 #define topology_logical_package_id(cpu)        (cpu_data(cpu).logical_proc_id)
 108 #define topology_physical_package_id(cpu)       (cpu_data(cpu).phys_proc_id)
 109 #define topology_logical_die_id(cpu)            (cpu_data(cpu).logical_die_id)
 110 #define topology_die_id(cpu)                    (cpu_data(cpu).cpu_die_id)
 111 #define topology_core_id(cpu)                   (cpu_data(cpu).cpu_core_id)
 112 
 113 #ifdef CONFIG_SMP
 114 #define topology_die_cpumask(cpu)               (per_cpu(cpu_die_map, cpu))
 115 #define topology_core_cpumask(cpu)              (per_cpu(cpu_core_map, cpu))
 116 #define topology_sibling_cpumask(cpu)           (per_cpu(cpu_sibling_map, cpu))
 117 
 118 extern unsigned int __max_logical_packages;
 119 #define topology_max_packages()                 (__max_logical_packages)
 120 
 121 extern unsigned int __max_die_per_package;
 122 
 123 static inline int topology_max_die_per_package(void)
 124 {
 125         return __max_die_per_package;
 126 }
 127 
 128 extern int __max_smt_threads;
 129 
 130 static inline int topology_max_smt_threads(void)
 131 {
 132         return __max_smt_threads;
 133 }
 134 
 135 int topology_update_package_map(unsigned int apicid, unsigned int cpu);
 136 int topology_update_die_map(unsigned int dieid, unsigned int cpu);
 137 int topology_phys_to_logical_pkg(unsigned int pkg);
 138 int topology_phys_to_logical_die(unsigned int die, unsigned int cpu);
 139 bool topology_is_primary_thread(unsigned int cpu);
 140 bool topology_smt_supported(void);
 141 #else
 142 #define topology_max_packages()                 (1)
 143 static inline int
 144 topology_update_package_map(unsigned int apicid, unsigned int cpu) { return 0; }
 145 static inline int
 146 topology_update_die_map(unsigned int dieid, unsigned int cpu) { return 0; }
 147 static inline int topology_phys_to_logical_pkg(unsigned int pkg) { return 0; }
 148 static inline int topology_phys_to_logical_die(unsigned int die,
 149                 unsigned int cpu) { return 0; }
 150 static inline int topology_max_die_per_package(void) { return 1; }
 151 static inline int topology_max_smt_threads(void) { return 1; }
 152 static inline bool topology_is_primary_thread(unsigned int cpu) { return true; }
 153 static inline bool topology_smt_supported(void) { return false; }
 154 #endif
 155 
 156 static inline void arch_fix_phys_package_id(int num, u32 slot)
 157 {
 158 }
 159 
 160 struct pci_bus;
 161 int x86_pci_root_bus_node(int bus);
 162 void x86_pci_root_bus_resources(int bus, struct list_head *resources);
 163 
 164 extern bool x86_topology_update;
 165 
 166 #ifdef CONFIG_SCHED_MC_PRIO
 167 #include <asm/percpu.h>
 168 
 169 DECLARE_PER_CPU_READ_MOSTLY(int, sched_core_priority);
 170 extern unsigned int __read_mostly sysctl_sched_itmt_enabled;
 171 
 172 /* Interface to set priority of a cpu */
 173 void sched_set_itmt_core_prio(int prio, int core_cpu);
 174 
 175 /* Interface to notify scheduler that system supports ITMT */
 176 int sched_set_itmt_support(void);
 177 
 178 /* Interface to notify scheduler that system revokes ITMT support */
 179 void sched_clear_itmt_support(void);
 180 
 181 #else /* CONFIG_SCHED_MC_PRIO */
 182 
 183 #define sysctl_sched_itmt_enabled       0
 184 static inline void sched_set_itmt_core_prio(int prio, int core_cpu)
 185 {
 186 }
 187 static inline int sched_set_itmt_support(void)
 188 {
 189         return 0;
 190 }
 191 static inline void sched_clear_itmt_support(void)
 192 {
 193 }
 194 #endif /* CONFIG_SCHED_MC_PRIO */
 195 
 196 #endif /* _ASM_X86_TOPOLOGY_H */

/* [<][>][^][v][top][bottom][index][help] */