linux/include/linux/topology.h
<<
>>
Prefs
   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
  35#include <asm/topology.h>
  36
  37#ifndef nr_cpus_node
  38#define nr_cpus_node(node)                                                      \
  39        ({                                                                      \
  40                cpumask_t __tmp__;                                              \
  41                __tmp__ = node_to_cpumask(node);                                \
  42                cpus_weight(__tmp__);                                           \
  43        })
  44#endif
  45
  46#define for_each_node_with_cpus(node)                                           \
  47        for_each_online_node(node)                                              \
  48                if (nr_cpus_node(node))
  49
  50#ifndef node_distance
  51/* Conform to ACPI 2.0 SLIT distance definitions */
  52#define LOCAL_DISTANCE          10
  53#define REMOTE_DISTANCE         20
  54#define node_distance(from,to)  ((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE)
  55#endif
  56#ifndef PENALTY_FOR_NODE_WITH_CPUS
  57#define PENALTY_FOR_NODE_WITH_CPUS      (1)
  58#endif
  59
  60/*
  61 * Below are the 3 major initializers used in building sched_domains:
  62 * SD_SIBLING_INIT, for SMT domains
  63 * SD_CPU_INIT, for SMP domains
  64 * SD_NODE_INIT, for NUMA domains
  65 *
  66 * Any architecture that cares to do any tuning to these values should do so
  67 * by defining their own arch-specific initializer in include/asm/topology.h.
  68 * A definition there will automagically override these default initializers
  69 * and allow arch-specific performance tuning of sched_domains.
  70 */
  71#ifdef CONFIG_SCHED_SMT
  72/* MCD - Do we really need this?  It is always on if CONFIG_SCHED_SMT is,
  73 * so can't we drop this in favor of CONFIG_SCHED_SMT?
  74 */
  75#define ARCH_HAS_SCHED_WAKE_IDLE
  76/* Common values for SMT siblings */
  77#ifndef SD_SIBLING_INIT
  78#define SD_SIBLING_INIT (struct sched_domain) {         \
  79        .span                   = CPU_MASK_NONE,        \
  80        .parent                 = NULL,                 \
  81        .groups                 = NULL,                 \
  82        .min_interval           = 1,                    \
  83        .max_interval           = 2,                    \
  84        .busy_factor            = 8,                    \
  85        .imbalance_pct          = 110,                  \
  86        .cache_hot_time         = 0,                    \
  87        .cache_nice_tries       = 0,                    \
  88        .per_cpu_gain           = 25,                   \
  89        .flags                  = SD_LOAD_BALANCE       \
  90                                | SD_BALANCE_NEWIDLE    \
  91                                | SD_BALANCE_EXEC       \
  92                                | SD_WAKE_AFFINE        \
  93                                | SD_WAKE_IDLE          \
  94                                | SD_SHARE_CPUPOWER,    \
  95        .last_balance           = jiffies,              \
  96        .balance_interval       = 1,                    \
  97        .nr_balance_failed      = 0,                    \
  98}
  99#endif
 100#endif /* CONFIG_SCHED_SMT */
 101
 102/* Common values for CPUs */
 103#ifndef SD_CPU_INIT
 104#define SD_CPU_INIT (struct sched_domain) {             \
 105        .span                   = CPU_MASK_NONE,        \
 106        .parent                 = NULL,                 \
 107        .groups                 = NULL,                 \
 108        .min_interval           = 1,                    \
 109        .max_interval           = 4,                    \
 110        .busy_factor            = 64,                   \
 111        .imbalance_pct          = 125,                  \
 112        .cache_hot_time         = (5*1000000/2),        \
 113        .cache_nice_tries       = 1,                    \
 114        .per_cpu_gain           = 100,                  \
 115        .flags                  = SD_LOAD_BALANCE       \
 116                                | SD_BALANCE_NEWIDLE    \
 117                                | SD_BALANCE_EXEC       \
 118                                | SD_WAKE_AFFINE        \
 119                                | SD_WAKE_IDLE          \
 120                                | SD_WAKE_BALANCE,      \
 121        .last_balance           = jiffies,              \
 122        .balance_interval       = 1,                    \
 123        .nr_balance_failed      = 0,                    \
 124}
 125#endif
 126
 127#ifdef CONFIG_NUMA
 128#ifndef SD_NODE_INIT
 129#error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!!
 130#endif
 131#endif /* CONFIG_NUMA */
 132
 133#endif /* _LINUX_TOPOLOGY_H */
 134
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.