for (i = 0; i < nr_cpu_ids; i++) {
if (cpu_to_node[i] == NUMA_NO_NODE)
continue;
- if (!node_isset(cpu_to_node[i], processor_nodes_parsed))
+ if (!nodemask_test(cpu_to_node[i], &processor_nodes_parsed))
numa_set_node(i, NUMA_NO_NODE);
}
numa_init_array();
return NULL;
/* Pick next node. */
- if ( !node_isset(node, nodemask) )
+ if ( !nodemask_test(node, &nodemask) )
{
/* Very first node may be caller-specified and outside nodemask. */
ASSERT(!nodemask_retry);
* void cpumask_clear_cpu(cpu, mask) turn off bit 'cpu' in mask
* void cpumask_setall(mask) set all bits
* void cpumask_clear(mask) clear all bits
- * int cpumask_test_cpu(cpu, mask) true iff bit 'cpu' set in mask
+ * bool cpumask_test_cpu(cpu, mask) true iff bit 'cpu' set in mask
* int cpumask_test_and_set_cpu(cpu, mask) test and set bit 'cpu' in mask
* int cpumask_test_and_clear_cpu(cpu, mask) test and clear bit 'cpu' in mask
*
* for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_map
* for_each_online_cpu(cpu) for-loop cpu over cpu_online_map
* for_each_present_cpu(cpu) for-loop cpu over cpu_present_map
- *
- * Subtlety:
- * 1) The 'type-checked' form of cpumask_test_cpu() causes gcc (3.3.2, anyway)
- * to generate slightly worse code. Note for example the additional
- * 40 lines of assembly code compiling the "for each possible cpu"
- * loops buried in the disk_stat_read() macros calls when compiling
- * drivers/block/genhd.c (arch i386, CONFIG_SMP=y). So use a simple
- * one-line #define for cpumask_test_cpu(), instead of wrapping an inline
- * inside a macro, the way we do the other calls.
*/
#include <xen/bitmap.h>
bitmap_zero(dstp->bits, nr_cpumask_bits);
}
-/* No static inline type checking - see Subtlety (1) above. */
-#define cpumask_test_cpu(cpu, cpumask) \
- test_bit(cpumask_check(cpu), (cpumask)->bits)
+static inline bool cpumask_test_cpu(unsigned int cpu, const cpumask_t *src)
+{
+ return test_bit(cpumask_check(cpu), src->bits);
+}
static inline int cpumask_test_and_set_cpu(int cpu, volatile cpumask_t *addr)
{
* void node_clear(node, mask) turn off bit 'node' in mask
* void nodes_setall(mask) set all bits
* void nodes_clear(mask) clear all bits
- * int node_isset(node, mask) true iff bit 'node' set in mask
+ * bool nodemask_test(node, mask) true iff bit 'node' set in mask
* int node_test_and_set(node, mask) test and set bit 'node' in mask
*
* void nodes_and(dst, src1, src2) dst = src1 & src2 [intersection]
*
* int num_online_nodes() Number of online Nodes
*
- * int node_online(node) Is some node online?
+ * bool node_online(node) Is this node online?
*
* node_set_online(node) set bit 'node' in node_online_map
* node_set_offline(node) clear bit 'node' in node_online_map
*
* for_each_online_node(node) for-loop node over node_online_map
- *
- * Subtlety:
- * 1) The 'type-checked' form of node_isset() causes gcc (3.3.2, anyway)
- * to generate slightly worse code. So use a simple one-line #define
- * for node_isset(), instead of wrapping an inline inside a macro, the
- * way we do the other calls.
*/
#include <xen/kernel.h>
bitmap_zero(dstp->bits, nbits);
}
-/* No static inline type checking - see Subtlety (1) above. */
-#define node_isset(node, nodemask) test_bit((node), (nodemask).bits)
+static inline bool nodemask_test(unsigned int node, const nodemask_t *dst)
+{
+ return test_bit(node, dst->bits);
+}
#define node_test_and_set(node, nodemask) \
__node_test_and_set((node), &(nodemask))
#if MAX_NUMNODES > 1
#define num_online_nodes() nodes_weight(node_online_map)
-#define node_online(node) node_isset((node), node_online_map)
+#define node_online(node) nodemask_test(node, &node_online_map)
#else
#define num_online_nodes() 1
#define node_online(node) ((node) == 0)