V4L/DVB (6384): Replace TDA9887_SET_CONFIG by TUNER_SET_CONFIG
[pandora-kernel.git] / include / linux / nodemask.h
index 1a9ef3e..905e18f 100644 (file)
@@ -8,8 +8,8 @@
  * See detailed comments in the file linux/bitmap.h describing the
  * data type on which these nodemasks are based.
  *
- * For details of nodemask_scnprintf() and nodemask_parse(),
- * see bitmap_scnprintf() and bitmap_parse() in lib/bitmap.c.
+ * For details of nodemask_scnprintf() and nodemask_parse_user(),
+ * see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c.
  * For details of nodelist_scnprintf() and nodelist_parse(), see
  * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c.
  * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c.
@@ -51,7 +51,7 @@
  * unsigned long *nodes_addr(mask)     Array of unsigned long's in mask
  *
  * int nodemask_scnprintf(buf, len, mask) Format nodemask for printing
- * int nodemask_parse(ubuf, ulen, mask)        Parse ascii string as nodemask
+ * int nodemask_parse_user(ubuf, ulen, mask)   Parse ascii string as nodemask
  * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing
  * int nodelist_parse(buf, map)                Parse ascii string as nodelist
  * int node_remap(oldbit, old, new)    newbit = map(old, new)(oldbit)
@@ -288,12 +288,12 @@ static inline int __nodemask_scnprintf(char *buf, int len,
        return bitmap_scnprintf(buf, len, srcp->bits, nbits);
 }
 
-#define nodemask_parse(ubuf, ulen, dst) \
-                       __nodemask_parse((ubuf), (ulen), &(dst), MAX_NUMNODES)
-static inline int __nodemask_parse(const char __user *buf, int len,
+#define nodemask_parse_user(ubuf, ulen, dst) \
+               __nodemask_parse_user((ubuf), (ulen), &(dst), MAX_NUMNODES)
+static inline int __nodemask_parse_user(const char __user *buf, int len,
                                        nodemask_t *dstp, int nbits)
 {
-       return bitmap_parse(buf, len, dstp->bits, nbits);
+       return bitmap_parse_user(buf, len, dstp->bits, nbits);
 }
 
 #define nodelist_scnprintf(buf, len, src) \
@@ -337,30 +337,89 @@ 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 */
+       N_NORMAL_MEMORY,        /* The node has regular memory */
+#ifdef CONFIG_HIGHMEM
+       N_HIGH_MEMORY,          /* The node has regular or high memory */
+#else
+       N_HIGH_MEMORY = N_NORMAL_MEMORY,
+#endif
+       N_CPU,          /* The node has one or more cpus */
+       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;                               \
@@ -370,10 +429,15 @@ extern nodemask_t node_possible_map;
        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 */