aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nodemask.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/nodemask.h')
-rw-r--r--include/linux/nodemask.h44
1 files changed, 21 insertions, 23 deletions
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index b359c4a9ec9e..dba35e413371 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -69,8 +69,6 @@
69 * int node_online(node) Is some node online? 69 * int node_online(node) Is some node online?
70 * int node_possible(node) Is some node possible? 70 * int node_possible(node) Is some node possible?
71 * 71 *
72 * int any_online_node(mask) First online node in mask
73 *
74 * node_set_online(node) set bit 'node' in node_online_map 72 * node_set_online(node) set bit 'node' in node_online_map
75 * node_set_offline(node) clear bit 'node' in node_online_map 73 * node_set_offline(node) clear bit 'node' in node_online_map
76 * 74 *
@@ -245,14 +243,19 @@ static inline int __next_node(int n, const nodemask_t *srcp)
245 return min_t(int,MAX_NUMNODES,find_next_bit(srcp->bits, MAX_NUMNODES, n+1)); 243 return min_t(int,MAX_NUMNODES,find_next_bit(srcp->bits, MAX_NUMNODES, n+1));
246} 244}
247 245
246static inline void init_nodemask_of_node(nodemask_t *mask, int node)
247{
248 nodes_clear(*mask);
249 node_set(node, *mask);
250}
251
248#define nodemask_of_node(node) \ 252#define nodemask_of_node(node) \
249({ \ 253({ \
250 typeof(_unused_nodemask_arg_) m; \ 254 typeof(_unused_nodemask_arg_) m; \
251 if (sizeof(m) == sizeof(unsigned long)) { \ 255 if (sizeof(m) == sizeof(unsigned long)) { \
252 m.bits[0] = 1UL<<(node); \ 256 m.bits[0] = 1UL << (node); \
253 } else { \ 257 } else { \
254 nodes_clear(m); \ 258 init_nodemask_of_node(&m, (node)); \
255 node_set((node), m); \
256 } \ 259 } \
257 m; \ 260 m; \
258}) 261})
@@ -462,15 +465,6 @@ static inline int num_node_state(enum node_states state)
462#define node_online_map node_states[N_ONLINE] 465#define node_online_map node_states[N_ONLINE]
463#define node_possible_map node_states[N_POSSIBLE] 466#define node_possible_map node_states[N_POSSIBLE]
464 467
465#define any_online_node(mask) \
466({ \
467 int node; \
468 for_each_node_mask(node, (mask)) \
469 if (node_online(node)) \
470 break; \
471 node; \
472})
473
474#define num_online_nodes() num_node_state(N_ONLINE) 468#define num_online_nodes() num_node_state(N_ONLINE)
475#define num_possible_nodes() num_node_state(N_POSSIBLE) 469#define num_possible_nodes() num_node_state(N_POSSIBLE)
476#define node_online(node) node_state((node), N_ONLINE) 470#define node_online(node) node_state((node), N_ONLINE)
@@ -480,15 +474,17 @@ static inline int num_node_state(enum node_states state)
480#define for_each_online_node(node) for_each_node_state(node, N_ONLINE) 474#define for_each_online_node(node) for_each_node_state(node, N_ONLINE)
481 475
482/* 476/*
483 * For nodemask scrach area.(See CPUMASK_ALLOC() in cpumask.h) 477 * For nodemask scrach area.
478 * NODEMASK_ALLOC(type, name) allocates an object with a specified type and
479 * name.
484 */ 480 */
485 481#if NODES_SHIFT > 8 /* nodemask_t > 256 bytes */
486#if NODES_SHIFT > 8 /* nodemask_t > 64 bytes */ 482#define NODEMASK_ALLOC(type, name, gfp_flags) \
487#define NODEMASK_ALLOC(x, m) struct x *m = kmalloc(sizeof(*m), GFP_KERNEL) 483 type *name = kmalloc(sizeof(*name), gfp_flags)
488#define NODEMASK_FREE(m) kfree(m) 484#define NODEMASK_FREE(m) kfree(m)
489#else 485#else
490#define NODEMASK_ALLOC(x, m) struct x _m, *m = &_m 486#define NODEMASK_ALLOC(type, name, gfp_flags) type _##name, *name = &_##name
491#define NODEMASK_FREE(m) 487#define NODEMASK_FREE(m) do {} while (0)
492#endif 488#endif
493 489
494/* A example struture for using NODEMASK_ALLOC, used in mempolicy. */ 490/* A example struture for using NODEMASK_ALLOC, used in mempolicy. */
@@ -497,8 +493,10 @@ struct nodemask_scratch {
497 nodemask_t mask2; 493 nodemask_t mask2;
498}; 494};
499 495
500#define NODEMASK_SCRATCH(x) NODEMASK_ALLOC(nodemask_scratch, x) 496#define NODEMASK_SCRATCH(x) \
501#define NODEMASK_SCRATCH_FREE(x) NODEMASK_FREE(x) 497 NODEMASK_ALLOC(struct nodemask_scratch, x, \
498 GFP_KERNEL | __GFP_NORETRY)
499#define NODEMASK_SCRATCH_FREE(x) NODEMASK_FREE(x)
502 500
503 501
504#endif /* __LINUX_NODEMASK_H */ 502#endif /* __LINUX_NODEMASK_H */