Blame view

include/linux/cpuset.h 5.71 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
  #ifndef _LINUX_CPUSET_H
  #define _LINUX_CPUSET_H
  /*
   *  cpuset interface
   *
   *  Copyright (C) 2003 BULL SA
825a46af5   Paul Jackson   [PATCH] cpuset me...
7
   *  Copyright (C) 2004-2006 Silicon Graphics, Inc.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
9
10
11
12
13
   *
   */
  
  #include <linux/sched.h>
  #include <linux/cpumask.h>
  #include <linux/nodemask.h>
8793d854e   Paul Menage   Task Control Grou...
14
  #include <linux/cgroup.h>
a1bc5a4ee   David Rientjes   cpusets: replace ...
15
  #include <linux/mm.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
  
  #ifdef CONFIG_CPUSETS
202f72d5d   Paul Jackson   [PATCH] cpuset: n...
18
  extern int number_of_cpusets;	/* How many cpusets are defined in system? */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
  extern int cpuset_init(void);
  extern void cpuset_init_smp(void);
3a101d054   Tejun Heo   sched: adjust whe...
21
  extern void cpuset_update_active_cpus(void);
6af866af3   Li Zefan   cpuset: remove re...
22
  extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask);
9084bb824   Oleg Nesterov   sched: Make selec...
23
  extern int cpuset_cpus_allowed_fallback(struct task_struct *p);
909d75a3b   Paul Jackson   [PATCH] cpuset: i...
24
  extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
9276b1bc9   Paul Jackson   [PATCH] memory pa...
25
  #define cpuset_current_mems_allowed (current->mems_allowed)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  void cpuset_init_current_mems_allowed(void);
19770b326   Mel Gorman   mm: filter based ...
27
  int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask);
202f72d5d   Paul Jackson   [PATCH] cpuset: n...
28

a1bc5a4ee   David Rientjes   cpusets: replace ...
29
30
  extern int __cpuset_node_allowed_softwall(int node, gfp_t gfp_mask);
  extern int __cpuset_node_allowed_hardwall(int node, gfp_t gfp_mask);
02a0e53d8   Paul Jackson   [PATCH] cpuset: r...
31

a1bc5a4ee   David Rientjes   cpusets: replace ...
32
  static inline int cpuset_node_allowed_softwall(int node, gfp_t gfp_mask)
02a0e53d8   Paul Jackson   [PATCH] cpuset: r...
33
34
  {
  	return number_of_cpusets <= 1 ||
a1bc5a4ee   David Rientjes   cpusets: replace ...
35
  		__cpuset_node_allowed_softwall(node, gfp_mask);
02a0e53d8   Paul Jackson   [PATCH] cpuset: r...
36
  }
a1bc5a4ee   David Rientjes   cpusets: replace ...
37
  static inline int cpuset_node_allowed_hardwall(int node, gfp_t gfp_mask)
202f72d5d   Paul Jackson   [PATCH] cpuset: n...
38
  {
02a0e53d8   Paul Jackson   [PATCH] cpuset: r...
39
  	return number_of_cpusets <= 1 ||
a1bc5a4ee   David Rientjes   cpusets: replace ...
40
41
42
43
44
45
46
47
48
49
50
  		__cpuset_node_allowed_hardwall(node, gfp_mask);
  }
  
  static inline int cpuset_zone_allowed_softwall(struct zone *z, gfp_t gfp_mask)
  {
  	return cpuset_node_allowed_softwall(zone_to_nid(z), gfp_mask);
  }
  
  static inline int cpuset_zone_allowed_hardwall(struct zone *z, gfp_t gfp_mask)
  {
  	return cpuset_node_allowed_hardwall(zone_to_nid(z), gfp_mask);
202f72d5d   Paul Jackson   [PATCH] cpuset: n...
51
  }
bbe373f2c   David Rientjes   oom: compare cpus...
52
53
  extern int cpuset_mems_allowed_intersects(const struct task_struct *tsk1,
  					  const struct task_struct *tsk2);
3e0d98b9f   Paul Jackson   [PATCH] cpuset: m...
54
55
56
57
58
59
60
61
  
  #define cpuset_memory_pressure_bump() 				\
  	do {							\
  		if (cpuset_memory_pressure_enabled)		\
  			__cpuset_memory_pressure_bump();	\
  	} while (0)
  extern int cpuset_memory_pressure_enabled;
  extern void __cpuset_memory_pressure_bump(void);
540473208   Arjan van de Ven   [PATCH] mark stru...
62
  extern const struct file_operations proc_cpuset_operations;
df5f8314c   Eric W. Biederman   proc: seqfile con...
63
64
65
  struct seq_file;
  extern void cpuset_task_status_allowed(struct seq_file *m,
  					struct task_struct *task);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66

825a46af5   Paul Jackson   [PATCH] cpuset me...
67
  extern int cpuset_mem_spread_node(void);
6adef3ebe   Jack Steiner   cpusets: new roun...
68
  extern int cpuset_slab_spread_node(void);
825a46af5   Paul Jackson   [PATCH] cpuset me...
69
70
71
72
73
74
75
76
77
78
  
  static inline int cpuset_do_page_mem_spread(void)
  {
  	return current->flags & PF_SPREAD_PAGE;
  }
  
  static inline int cpuset_do_slab_mem_spread(void)
  {
  	return current->flags & PF_SPREAD_SLAB;
  }
8793d854e   Paul Menage   Task Control Grou...
79
  extern int current_cpuset_is_being_rebound(void);
e761b7725   Max Krasnyansky   cpu hotplug, sche...
80
  extern void rebuild_sched_domains(void);
75aa19941   David Rientjes   oom: print trigge...
81
  extern void cpuset_print_task_mems_allowed(struct task_struct *p);
c0ff7453b   Miao Xie   cpuset,mm: fix no...
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
  /*
   * reading current mems_allowed and mempolicy in the fastpath must protected
   * by get_mems_allowed()
   */
  static inline void get_mems_allowed(void)
  {
  	current->mems_allowed_change_disable++;
  
  	/*
  	 * ensure that reading mems_allowed and mempolicy happens after the
  	 * update of ->mems_allowed_change_disable.
  	 *
  	 * the write-side task finds ->mems_allowed_change_disable is not 0,
  	 * and knows the read-side task is reading mems_allowed or mempolicy,
  	 * so it will clear old bits lazily.
  	 */
  	smp_mb();
  }
  
  static inline void put_mems_allowed(void)
  {
  	/*
  	 * ensure that reading mems_allowed and mempolicy before reducing
  	 * mems_allowed_change_disable.
  	 *
  	 * the write-side task will know that the read-side task is still
  	 * reading mems_allowed or mempolicy, don't clears old bits in the
  	 * nodemask.
  	 */
  	smp_mb();
  	--ACCESS_ONCE(current->mems_allowed_change_disable);
  }
58568d2a8   Miao Xie   cpuset,mm: update...
114
115
  static inline void set_mems_allowed(nodemask_t nodemask)
  {
c0ff7453b   Miao Xie   cpuset,mm: fix no...
116
  	task_lock(current);
58568d2a8   Miao Xie   cpuset,mm: update...
117
  	current->mems_allowed = nodemask;
c0ff7453b   Miao Xie   cpuset,mm: fix no...
118
  	task_unlock(current);
58568d2a8   Miao Xie   cpuset,mm: update...
119
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
120
121
122
123
  #else /* !CONFIG_CPUSETS */
  
  static inline int cpuset_init(void) { return 0; }
  static inline void cpuset_init_smp(void) {}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124

3a101d054   Tejun Heo   sched: adjust whe...
125
126
127
128
  static inline void cpuset_update_active_cpus(void)
  {
  	partition_sched_domains(1, NULL, NULL);
  }
6af866af3   Li Zefan   cpuset: remove re...
129
130
  static inline void cpuset_cpus_allowed(struct task_struct *p,
  				       struct cpumask *mask)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
  {
aa85ea5b8   Rusty Russell   cpumask: use new ...
132
  	cpumask_copy(mask, cpu_possible_mask);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133
  }
9084bb824   Oleg Nesterov   sched: Make selec...
134
135
  static inline int cpuset_cpus_allowed_fallback(struct task_struct *p)
  {
1e1b6c511   KOSAKI Motohiro   cpuset: Fix cpuse...
136
  	do_set_cpus_allowed(p, cpu_possible_mask);
9084bb824   Oleg Nesterov   sched: Make selec...
137
138
  	return cpumask_any(cpu_active_mask);
  }
909d75a3b   Paul Jackson   [PATCH] cpuset: i...
139
140
141
142
  static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)
  {
  	return node_possible_map;
  }
0e1e7c7a7   Christoph Lameter   Memoryless nodes:...
143
  #define cpuset_current_mems_allowed (node_states[N_HIGH_MEMORY])
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
  static inline void cpuset_init_current_mems_allowed(void) {}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145

19770b326   Mel Gorman   mm: filter based ...
146
  static inline int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
147
148
149
  {
  	return 1;
  }
a1bc5a4ee   David Rientjes   cpusets: replace ...
150
151
152
153
154
155
156
157
158
  static inline int cpuset_node_allowed_softwall(int node, gfp_t gfp_mask)
  {
  	return 1;
  }
  
  static inline int cpuset_node_allowed_hardwall(int node, gfp_t gfp_mask)
  {
  	return 1;
  }
02a0e53d8   Paul Jackson   [PATCH] cpuset: r...
159
160
161
162
163
164
  static inline int cpuset_zone_allowed_softwall(struct zone *z, gfp_t gfp_mask)
  {
  	return 1;
  }
  
  static inline int cpuset_zone_allowed_hardwall(struct zone *z, gfp_t gfp_mask)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
165
166
167
  {
  	return 1;
  }
bbe373f2c   David Rientjes   oom: compare cpus...
168
169
  static inline int cpuset_mems_allowed_intersects(const struct task_struct *tsk1,
  						 const struct task_struct *tsk2)
ef08e3b49   Paul Jackson   [PATCH] cpusets: ...
170
171
172
  {
  	return 1;
  }
3e0d98b9f   Paul Jackson   [PATCH] cpuset: m...
173
  static inline void cpuset_memory_pressure_bump(void) {}
df5f8314c   Eric W. Biederman   proc: seqfile con...
174
175
  static inline void cpuset_task_status_allowed(struct seq_file *m,
  						struct task_struct *task)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
176
  {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
177
  }
825a46af5   Paul Jackson   [PATCH] cpuset me...
178
179
180
181
  static inline int cpuset_mem_spread_node(void)
  {
  	return 0;
  }
6adef3ebe   Jack Steiner   cpusets: new roun...
182
183
184
185
  static inline int cpuset_slab_spread_node(void)
  {
  	return 0;
  }
825a46af5   Paul Jackson   [PATCH] cpuset me...
186
187
188
189
190
191
192
193
194
  static inline int cpuset_do_page_mem_spread(void)
  {
  	return 0;
  }
  
  static inline int cpuset_do_slab_mem_spread(void)
  {
  	return 0;
  }
8793d854e   Paul Menage   Task Control Grou...
195
196
197
198
  static inline int current_cpuset_is_being_rebound(void)
  {
  	return 0;
  }
e761b7725   Max Krasnyansky   cpu hotplug, sche...
199
200
  static inline void rebuild_sched_domains(void)
  {
dfb512ec4   Max Krasnyansky   sched: arch_reini...
201
  	partition_sched_domains(1, NULL, NULL);
e761b7725   Max Krasnyansky   cpu hotplug, sche...
202
  }
75aa19941   David Rientjes   oom: print trigge...
203
204
205
  static inline void cpuset_print_task_mems_allowed(struct task_struct *p)
  {
  }
58568d2a8   Miao Xie   cpuset,mm: update...
206
207
208
  static inline void set_mems_allowed(nodemask_t nodemask)
  {
  }
c0ff7453b   Miao Xie   cpuset,mm: fix no...
209
210
211
212
213
214
215
  static inline void get_mems_allowed(void)
  {
  }
  
  static inline void put_mems_allowed(void)
  {
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
216
217
218
  #endif /* !CONFIG_CPUSETS */
  
  #endif /* _LINUX_CPUSET_H */