LCOV - code coverage report
Current view: top level - lkbce/include/linux - topology.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  * include/linux/topology.h
       3             :  *
       4             :  * Written by: Matthew Dobson, IBM Corporation
       5             :  *
       6             :  * Copyright (C) 2002, IBM Corp.
       7             :  *
       8             :  * All rights reserved.
       9             :  *
      10             :  * This program is free software; you can redistribute it and/or modify
      11             :  * it under the terms of the GNU General Public License as published by
      12             :  * the Free Software Foundation; either version 2 of the License, or
      13             :  * (at your option) any later version.
      14             :  *
      15             :  * This program is distributed in the hope that it will be useful, but
      16             :  * WITHOUT ANY WARRANTY; without even the implied warranty of
      17             :  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
      18             :  * NON INFRINGEMENT.  See the GNU General Public License for more
      19             :  * details.
      20             :  *
      21             :  * You should have received a copy of the GNU General Public License
      22             :  * along with this program; if not, write to the Free Software
      23             :  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
      24             :  *
      25             :  * Send feedback to <colpatch@us.ibm.com>
      26             :  */
      27             : #ifndef _LINUX_TOPOLOGY_H
      28             : #define _LINUX_TOPOLOGY_H
      29             : 
      30             : #include <linux/cpumask.h>
      31             : #include <linux/bitops.h>
      32             : #include <linux/mmzone.h>
      33             : #include <linux/smp.h>
      34             : #include <asm/topology.h>
      35             : 
      36             : #ifndef node_has_online_mem
      37             : #define node_has_online_mem(nid) (1)
      38             : #endif
      39             : 
      40             : #ifndef nr_cpus_node
      41             : #define nr_cpus_node(node) cpumask_weight(cpumask_of_node(node))
      42             : #endif
      43             : 
      44             : #define for_each_node_with_cpus(node)                   \
      45             :         for_each_online_node(node)                      \
      46             :                 if (nr_cpus_node(node))
      47             : 
      48             : int arch_update_cpu_topology(void);
      49           1 : 
      50             : /* Conform to ACPI 2.0 SLIT distance definitions */
      51             : #define LOCAL_DISTANCE          10
      52             : #define REMOTE_DISTANCE         20
      53             : #ifndef node_distance
      54             : #define node_distance(from,to)  ((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE)
      55             : #endif
      56             : #ifndef RECLAIM_DISTANCE
      57             : /*
      58             :  * If the distance between nodes in a system is larger than RECLAIM_DISTANCE
      59             :  * (in whatever arch specific measurement units returned by node_distance())
      60             :  * then switch on zone reclaim on boot.
      61             :  */
      62             : #define RECLAIM_DISTANCE 20
      63             : #endif
      64             : #ifndef PENALTY_FOR_NODE_WITH_CPUS
      65             : #define PENALTY_FOR_NODE_WITH_CPUS      (1)
      66             : #endif
      67             : 
      68             : /*
      69             :  * Below are the 3 major initializers used in building sched_domains:
      70             :  * SD_SIBLING_INIT, for SMT domains
      71             :  * SD_CPU_INIT, for SMP domains
      72             :  * SD_NODE_INIT, for NUMA domains
      73             :  *
      74             :  * Any architecture that cares to do any tuning to these values should do so
      75             :  * by defining their own arch-specific initializer in include/asm/topology.h.
      76             :  * A definition there will automagically override these default initializers
      77             :  * and allow arch-specific performance tuning of sched_domains.
      78             :  * (Only non-zero and non-null fields need be specified.)
      79             :  */
      80             : 
      81             : #ifdef CONFIG_SCHED_SMT
      82             : /* MCD - Do we really need this?  It is always on if CONFIG_SCHED_SMT is,
      83             :  * so can't we drop this in favor of CONFIG_SCHED_SMT?
      84             :  */
      85             : #define ARCH_HAS_SCHED_WAKE_IDLE
      86             : /* Common values for SMT siblings */
      87             : #ifndef SD_SIBLING_INIT
      88             : #define SD_SIBLING_INIT (struct sched_domain) {                         \
      89             :         .min_interval           = 1,                                    \
      90             :         .max_interval           = 2,                                    \
      91             :         .busy_factor            = 64,                                   \
      92             :         .imbalance_pct          = 110,                                  \
      93             :                                                                         \
      94             :         .flags                  = 1*SD_LOAD_BALANCE                     \
      95             :                                 | 1*SD_BALANCE_NEWIDLE                  \
      96             :                                 | 1*SD_BALANCE_EXEC                     \
      97             :                                 | 1*SD_BALANCE_FORK                     \
      98             :                                 | 0*SD_BALANCE_WAKE                     \
      99             :                                 | 1*SD_WAKE_AFFINE                      \
     100             :                                 | 1*SD_SHARE_CPUPOWER                   \
     101             :                                 | 0*SD_POWERSAVINGS_BALANCE             \
     102             :                                 | 1*SD_SHARE_PKG_RESOURCES              \
     103             :                                 | 0*SD_SERIALIZE                        \
     104             :                                 | 0*SD_PREFER_SIBLING                   \
     105             :                                 ,                                       \
     106             :         .last_balance           = jiffies,                              \
     107             :         .balance_interval       = 1,                                    \
     108             :         .smt_gain               = 1178, /* 15% */                       \
     109             : }
     110             : #endif
     111             : #endif /* CONFIG_SCHED_SMT */
     112             : 
     113             : #ifdef CONFIG_SCHED_MC
     114             : /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */
     115             : #ifndef SD_MC_INIT
     116             : #define SD_MC_INIT (struct sched_domain) {                              \
     117             :         .min_interval           = 1,                                    \
     118             :         .max_interval           = 4,                                    \
     119             :         .busy_factor            = 64,                                   \
     120             :         .imbalance_pct          = 125,                                  \
     121             :         .cache_nice_tries       = 1,                                    \
     122             :         .busy_idx               = 2,                                    \
     123             :         .wake_idx               = 0,                                    \
     124             :         .forkexec_idx           = 0,                                    \
     125             :                                                                         \
     126             :         .flags                  = 1*SD_LOAD_BALANCE                     \
     127             :                                 | 1*SD_BALANCE_NEWIDLE                  \
     128             :                                 | 1*SD_BALANCE_EXEC                     \
     129             :                                 | 1*SD_BALANCE_FORK                     \
     130             :                                 | 0*SD_BALANCE_WAKE                     \
     131             :                                 | 1*SD_WAKE_AFFINE                      \
     132             :                                 | 0*SD_PREFER_LOCAL                     \
     133             :                                 | 0*SD_SHARE_CPUPOWER                   \
     134             :                                 | 1*SD_SHARE_PKG_RESOURCES              \
     135             :                                 | 0*SD_SERIALIZE                        \
     136             :                                 | sd_balance_for_mc_power()             \
     137             :                                 | sd_power_saving_flags()               \
     138             :                                 ,                                       \
     139             :         .last_balance           = jiffies,                              \
     140             :         .balance_interval       = 1,                                    \
     141             : }
     142             : #endif
     143             : #endif /* CONFIG_SCHED_MC */
     144             : 
     145             : /* Common values for CPUs */
     146             : #ifndef SD_CPU_INIT
     147             : #define SD_CPU_INIT (struct sched_domain) {                             \
     148             :         .min_interval           = 1,                                    \
     149             :         .max_interval           = 4,                                    \
     150             :         .busy_factor            = 64,                                   \
     151             :         .imbalance_pct          = 125,                                  \
     152             :         .cache_nice_tries       = 1,                                    \
     153             :         .busy_idx               = 2,                                    \
     154             :         .idle_idx               = 1,                                    \
     155             :         .newidle_idx            = 0,                                    \
     156             :         .wake_idx               = 0,                                    \
     157             :         .forkexec_idx           = 0,                                    \
     158             :                                                                         \
     159             :         .flags                  = 1*SD_LOAD_BALANCE                     \
     160             :                                 | 1*SD_BALANCE_NEWIDLE                  \
     161             :                                 | 1*SD_BALANCE_EXEC                     \
     162             :                                 | 1*SD_BALANCE_FORK                     \
     163             :                                 | 0*SD_BALANCE_WAKE                     \
     164             :                                 | 1*SD_WAKE_AFFINE                      \
     165             :                                 | 0*SD_PREFER_LOCAL                     \
     166             :                                 | 0*SD_SHARE_CPUPOWER                   \
     167             :                                 | 0*SD_SHARE_PKG_RESOURCES              \
     168             :                                 | 0*SD_SERIALIZE                        \
     169             :                                 | sd_balance_for_package_power()        \
     170             :                                 | sd_power_saving_flags()               \
     171             :                                 ,                                       \
     172             :         .last_balance           = jiffies,                              \
     173             :         .balance_interval       = 1,                                    \
     174             : }
     175             : #endif
     176             : 
     177             : /* sched_domains SD_ALLNODES_INIT for NUMA machines */
     178             : #define SD_ALLNODES_INIT (struct sched_domain) {                        \
     179             :         .min_interval           = 64,                                   \
     180             :         .max_interval           = 64*num_online_cpus(),                 \
     181             :         .busy_factor            = 128,                                  \
     182             :         .imbalance_pct          = 133,                                  \
     183             :         .cache_nice_tries       = 1,                                    \
     184             :         .busy_idx               = 3,                                    \
     185             :         .idle_idx               = 3,                                    \
     186             :         .flags                  = 1*SD_LOAD_BALANCE                     \
     187             :                                 | 1*SD_BALANCE_NEWIDLE                  \
     188             :                                 | 0*SD_BALANCE_EXEC                     \
     189             :                                 | 0*SD_BALANCE_FORK                     \
     190             :                                 | 0*SD_BALANCE_WAKE                     \
     191             :                                 | 0*SD_WAKE_AFFINE                      \
     192             :                                 | 0*SD_SHARE_CPUPOWER                   \
     193             :                                 | 0*SD_POWERSAVINGS_BALANCE             \
     194             :                                 | 0*SD_SHARE_PKG_RESOURCES              \
     195             :                                 | 1*SD_SERIALIZE                        \
     196             :                                 | 0*SD_PREFER_SIBLING                   \
     197             :                                 ,                                       \
     198             :         .last_balance           = jiffies,                              \
     199             :         .balance_interval       = 64,                                   \
     200             : }
     201             : 
     202             : #ifdef CONFIG_NUMA
     203             : #ifndef SD_NODE_INIT
     204             : #error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!!
     205             : #endif
     206             : #endif /* CONFIG_NUMA */
     207             : 
     208             : #ifndef topology_physical_package_id
     209             : #define topology_physical_package_id(cpu)       ((void)(cpu), -1)
     210             : #endif
     211             : #ifndef topology_core_id
     212             : #define topology_core_id(cpu)                   ((void)(cpu), 0)
     213             : #endif
     214             : #ifndef topology_thread_cpumask
     215             : #define topology_thread_cpumask(cpu)            cpumask_of(cpu)
     216             : #endif
     217             : #ifndef topology_core_cpumask
     218             : #define topology_core_cpumask(cpu)              cpumask_of(cpu)
     219             : #endif
     220             : 
     221             : /* Returns the number of the current Node. */
     222             : #ifndef numa_node_id
     223             : #define numa_node_id()          (cpu_to_node(raw_smp_processor_id()))
     224             : #endif
     225             : 
     226             : #endif /* _LINUX_TOPOLOGY_H */

Generated by: LCOV version 1.10