|
@@ -337,32 +337,82 @@ static inline void __nodes_remap(nodemask_t *dstp, const nodemask_t *srcp,
|
|
|
for ((node) = 0; (node) < 1; (node)++)
|
|
|
#endif /* MAX_NUMNODES */
|
|
|
|
|
|
+/*
|
|
|
+ * Bitmasks that are kept for all the nodes.
|
|
|
+ */
|
|
|
+enum node_states {
|
|
|
+ N_POSSIBLE, /* The node could become online at some point */
|
|
|
+ N_ONLINE, /* The node is online */
|
|
|
+ NR_NODE_STATES
|
|
|
+};
|
|
|
+
|
|
|
/*
|
|
|
* The following particular system nodemasks and operations
|
|
|
* on them manage all possible and online nodes.
|
|
|
*/
|
|
|
|
|
|
-extern nodemask_t node_online_map;
|
|
|
-extern nodemask_t node_possible_map;
|
|
|
+extern nodemask_t node_states[NR_NODE_STATES];
|
|
|
|
|
|
#if MAX_NUMNODES > 1
|
|
|
-#define num_online_nodes() nodes_weight(node_online_map)
|
|
|
-#define num_possible_nodes() nodes_weight(node_possible_map)
|
|
|
-#define node_online(node) node_isset((node), node_online_map)
|
|
|
-#define node_possible(node) node_isset((node), node_possible_map)
|
|
|
-#define first_online_node first_node(node_online_map)
|
|
|
-#define next_online_node(nid) next_node((nid), node_online_map)
|
|
|
+static inline int node_state(int node, enum node_states state)
|
|
|
+{
|
|
|
+ return node_isset(node, node_states[state]);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void node_set_state(int node, enum node_states state)
|
|
|
+{
|
|
|
+ __node_set(node, &node_states[state]);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void node_clear_state(int node, enum node_states state)
|
|
|
+{
|
|
|
+ __node_clear(node, &node_states[state]);
|
|
|
+}
|
|
|
+
|
|
|
+static inline int num_node_state(enum node_states state)
|
|
|
+{
|
|
|
+ return nodes_weight(node_states[state]);
|
|
|
+}
|
|
|
+
|
|
|
+#define for_each_node_state(__node, __state) \
|
|
|
+ for_each_node_mask((__node), node_states[__state])
|
|
|
+
|
|
|
+#define first_online_node first_node(node_states[N_ONLINE])
|
|
|
+#define next_online_node(nid) next_node((nid), node_states[N_ONLINE])
|
|
|
+
|
|
|
extern int nr_node_ids;
|
|
|
#else
|
|
|
-#define num_online_nodes() 1
|
|
|
-#define num_possible_nodes() 1
|
|
|
-#define node_online(node) ((node) == 0)
|
|
|
-#define node_possible(node) ((node) == 0)
|
|
|
+
|
|
|
+static inline int node_state(int node, enum node_states state)
|
|
|
+{
|
|
|
+ return node == 0;
|
|
|
+}
|
|
|
+
|
|
|
+static inline void node_set_state(int node, enum node_states state)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+static inline void node_clear_state(int node, enum node_states state)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+static inline int num_node_state(enum node_states state)
|
|
|
+{
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+#define for_each_node_state(node, __state) \
|
|
|
+ for ( (node) = 0; (node) == 0; (node) = 1)
|
|
|
+
|
|
|
#define first_online_node 0
|
|
|
#define next_online_node(nid) (MAX_NUMNODES)
|
|
|
#define nr_node_ids 1
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
+#define node_online_map node_states[N_ONLINE]
|
|
|
+#define node_possible_map node_states[N_POSSIBLE]
|
|
|
+
|
|
|
#define any_online_node(mask) \
|
|
|
({ \
|
|
|
int node; \
|
|
@@ -372,10 +422,15 @@ extern int nr_node_ids;
|
|
|
node; \
|
|
|
})
|
|
|
|
|
|
-#define node_set_online(node) set_bit((node), node_online_map.bits)
|
|
|
-#define node_set_offline(node) clear_bit((node), node_online_map.bits)
|
|
|
+#define num_online_nodes() num_node_state(N_ONLINE)
|
|
|
+#define num_possible_nodes() num_node_state(N_POSSIBLE)
|
|
|
+#define node_online(node) node_state((node), N_ONLINE)
|
|
|
+#define node_possible(node) node_state((node), N_POSSIBLE)
|
|
|
+
|
|
|
+#define node_set_online(node) node_set_state((node), N_ONLINE)
|
|
|
+#define node_set_offline(node) node_clear_state((node), N_ONLINE)
|
|
|
|
|
|
-#define for_each_node(node) for_each_node_mask((node), node_possible_map)
|
|
|
-#define for_each_online_node(node) for_each_node_mask((node), node_online_map)
|
|
|
+#define for_each_node(node) for_each_node_state(node, N_POSSIBLE)
|
|
|
+#define for_each_online_node(node) for_each_node_state(node, N_ONLINE)
|
|
|
|
|
|
#endif /* __LINUX_NODEMASK_H */
|