LCOV - code coverage report
Current view: top level - arch/x86/include/asm - topology.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 6 8 75.0 %
Date: 2022-03-28 13:20:08 Functions: 0 0 -
Branches: 13 26 50.0 %

           Branch data     Line data    Source code
       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         [ #  # ]:       3960 : static inline int early_cpu_to_node(int cpu)
      57                 :            : {
      58   [ +  +  +  +  :       3990 :         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                 :        720 : static inline const struct cpumask *cpumask_of_node(int node)
      71                 :            : {
      72   [ +  -  +  - ]:        720 :         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                 :          0 : static inline int topology_max_die_per_package(void)
     124                 :            : {
     125   [ #  #  #  #  :          0 :         return __max_die_per_package;
                   #  # ]
     126                 :            : }
     127                 :            : 
     128                 :            : extern int __max_smt_threads;
     129                 :            : 
     130                 :         30 : static inline int topology_max_smt_threads(void)
     131                 :            : {
     132         [ #  # ]:         30 :         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 */

Generated by: LCOV version 1.14