OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [topology.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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)                                                      \
42
        ({                                                                      \
43
                cpumask_t __tmp__;                                              \
44
                __tmp__ = node_to_cpumask(node);                                \
45
                cpus_weight(__tmp__);                                           \
46
        })
47
#endif
48
 
49
#define for_each_node_with_cpus(node)                                           \
50
        for_each_online_node(node)                                              \
51
                if (nr_cpus_node(node))
52
 
53
/* Conform to ACPI 2.0 SLIT distance definitions */
54
#define LOCAL_DISTANCE          10
55
#define REMOTE_DISTANCE         20
56
#ifndef node_distance
57
#define node_distance(from,to)  ((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE)
58
#endif
59
#ifndef RECLAIM_DISTANCE
60
/*
61
 * If the distance between nodes in a system is larger than RECLAIM_DISTANCE
62
 * (in whatever arch specific measurement units returned by node_distance())
63
 * then switch on zone reclaim on boot.
64
 */
65
#define RECLAIM_DISTANCE 20
66
#endif
67
#ifndef PENALTY_FOR_NODE_WITH_CPUS
68
#define PENALTY_FOR_NODE_WITH_CPUS      (1)
69
#endif
70
 
71
/*
72
 * Below are the 3 major initializers used in building sched_domains:
73
 * SD_SIBLING_INIT, for SMT domains
74
 * SD_CPU_INIT, for SMP domains
75
 * SD_NODE_INIT, for NUMA domains
76
 *
77
 * Any architecture that cares to do any tuning to these values should do so
78
 * by defining their own arch-specific initializer in include/asm/topology.h.
79
 * A definition there will automagically override these default initializers
80
 * and allow arch-specific performance tuning of sched_domains.
81
 */
82
#ifdef CONFIG_SCHED_SMT
83
/* MCD - Do we really need this?  It is always on if CONFIG_SCHED_SMT is,
84
 * so can't we drop this in favor of CONFIG_SCHED_SMT?
85
 */
86
#define ARCH_HAS_SCHED_WAKE_IDLE
87
/* Common values for SMT siblings */
88
#ifndef SD_SIBLING_INIT
89
#define SD_SIBLING_INIT (struct sched_domain) {         \
90
        .span                   = CPU_MASK_NONE,        \
91
        .parent                 = NULL,                 \
92
        .child                  = NULL,                 \
93
        .groups                 = NULL,                 \
94
        .min_interval           = 1,                    \
95
        .max_interval           = 2,                    \
96
        .busy_factor            = 64,                   \
97
        .imbalance_pct          = 110,                  \
98
        .cache_nice_tries       = 0,                     \
99
        .busy_idx               = 0,                     \
100
        .idle_idx               = 0,                     \
101
        .newidle_idx            = 0,                     \
102
        .wake_idx               = 0,                     \
103
        .forkexec_idx           = 0,                     \
104
        .flags                  = SD_LOAD_BALANCE       \
105
                                | SD_BALANCE_NEWIDLE    \
106
                                | SD_BALANCE_EXEC       \
107
                                | SD_WAKE_AFFINE        \
108
                                | SD_WAKE_IDLE          \
109
                                | SD_SHARE_CPUPOWER,    \
110
        .last_balance           = jiffies,              \
111
        .balance_interval       = 1,                    \
112
        .nr_balance_failed      = 0,                     \
113
}
114
#endif
115
#endif /* CONFIG_SCHED_SMT */
116
 
117
#ifdef CONFIG_SCHED_MC
118
/* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */
119
#ifndef SD_MC_INIT
120
#define SD_MC_INIT (struct sched_domain) {              \
121
        .span                   = CPU_MASK_NONE,        \
122
        .parent                 = NULL,                 \
123
        .child                  = NULL,                 \
124
        .groups                 = NULL,                 \
125
        .min_interval           = 1,                    \
126
        .max_interval           = 4,                    \
127
        .busy_factor            = 64,                   \
128
        .imbalance_pct          = 125,                  \
129
        .cache_nice_tries       = 1,                    \
130
        .busy_idx               = 2,                    \
131
        .idle_idx               = 0,                     \
132
        .newidle_idx            = 0,                     \
133
        .wake_idx               = 1,                    \
134
        .forkexec_idx           = 1,                    \
135
        .flags                  = SD_LOAD_BALANCE       \
136
                                | SD_BALANCE_NEWIDLE    \
137
                                | SD_BALANCE_EXEC       \
138
                                | SD_WAKE_AFFINE        \
139
                                | SD_WAKE_IDLE          \
140
                                | SD_SHARE_PKG_RESOURCES\
141
                                | BALANCE_FOR_MC_POWER, \
142
        .last_balance           = jiffies,              \
143
        .balance_interval       = 1,                    \
144
        .nr_balance_failed      = 0,                     \
145
}
146
#endif
147
#endif /* CONFIG_SCHED_MC */
148
 
149
/* Common values for CPUs */
150
#ifndef SD_CPU_INIT
151
#define SD_CPU_INIT (struct sched_domain) {             \
152
        .span                   = CPU_MASK_NONE,        \
153
        .parent                 = NULL,                 \
154
        .child                  = NULL,                 \
155
        .groups                 = NULL,                 \
156
        .min_interval           = 1,                    \
157
        .max_interval           = 4,                    \
158
        .busy_factor            = 64,                   \
159
        .imbalance_pct          = 125,                  \
160
        .cache_nice_tries       = 1,                    \
161
        .busy_idx               = 2,                    \
162
        .idle_idx               = 1,                    \
163
        .newidle_idx            = 2,                    \
164
        .wake_idx               = 1,                    \
165
        .forkexec_idx           = 1,                    \
166
        .flags                  = SD_LOAD_BALANCE       \
167
                                | SD_BALANCE_NEWIDLE    \
168
                                | SD_BALANCE_EXEC       \
169
                                | SD_WAKE_AFFINE        \
170
                                | BALANCE_FOR_PKG_POWER,\
171
        .last_balance           = jiffies,              \
172
        .balance_interval       = 1,                    \
173
        .nr_balance_failed      = 0,                     \
174
}
175
#endif
176
 
177
/* sched_domains SD_ALLNODES_INIT for NUMA machines */
178
#define SD_ALLNODES_INIT (struct sched_domain) {        \
179
        .span                   = CPU_MASK_NONE,        \
180
        .parent                 = NULL,                 \
181
        .child                  = NULL,                 \
182
        .groups                 = NULL,                 \
183
        .min_interval           = 64,                   \
184
        .max_interval           = 64*num_online_cpus(), \
185
        .busy_factor            = 128,                  \
186
        .imbalance_pct          = 133,                  \
187
        .cache_nice_tries       = 1,                    \
188
        .busy_idx               = 3,                    \
189
        .idle_idx               = 3,                    \
190
        .newidle_idx            = 0, /* unused */        \
191
        .wake_idx               = 0, /* unused */        \
192
        .forkexec_idx           = 0, /* unused */        \
193
        .flags                  = SD_LOAD_BALANCE       \
194
                                | SD_SERIALIZE, \
195
        .last_balance           = jiffies,              \
196
        .balance_interval       = 64,                   \
197
        .nr_balance_failed      = 0,                     \
198
}
199
 
200
#ifdef CONFIG_NUMA
201
#ifndef SD_NODE_INIT
202
#error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!!
203
#endif
204
#endif /* CONFIG_NUMA */
205
 
206
#endif /* _LINUX_TOPOLOGY_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.