diff options
Diffstat (limited to 'include/linux/nodemask.h')
-rw-r--r-- | include/linux/nodemask.h | 44 |
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 | ||
246 | static 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 */ |