| .. | .. |
|---|
| 42 | 42 | * void nodes_shift_right(dst, src, n) Shift right |
|---|
| 43 | 43 | * void nodes_shift_left(dst, src, n) Shift left |
|---|
| 44 | 44 | * |
|---|
| 45 | | - * int first_node(mask) Number lowest set bit, or MAX_NUMNODES |
|---|
| 46 | | - * int next_node(node, mask) Next node past 'node', or MAX_NUMNODES |
|---|
| 47 | | - * int next_node_in(node, mask) Next node past 'node', or wrap to first, |
|---|
| 45 | + * unsigned int first_node(mask) Number lowest set bit, or MAX_NUMNODES |
|---|
| 46 | + * unsigend int next_node(node, mask) Next node past 'node', or MAX_NUMNODES |
|---|
| 47 | + * unsigned int next_node_in(node, mask) Next node past 'node', or wrap to first, |
|---|
| 48 | 48 | * or MAX_NUMNODES |
|---|
| 49 | | - * int first_unset_node(mask) First node not set in mask, or |
|---|
| 49 | + * unsigned int first_unset_node(mask) First node not set in mask, or |
|---|
| 50 | 50 | * MAX_NUMNODES |
|---|
| 51 | 51 | * |
|---|
| 52 | 52 | * nodemask_t nodemask_of_node(node) Return nodemask with bit 'node' set |
|---|
| .. | .. |
|---|
| 90 | 90 | * for such situations. See below and CPUMASK_ALLOC also. |
|---|
| 91 | 91 | */ |
|---|
| 92 | 92 | |
|---|
| 93 | | -#include <linux/kernel.h> |
|---|
| 94 | 93 | #include <linux/threads.h> |
|---|
| 95 | 94 | #include <linux/bitmap.h> |
|---|
| 95 | +#include <linux/minmax.h> |
|---|
| 96 | 96 | #include <linux/numa.h> |
|---|
| 97 | 97 | |
|---|
| 98 | 98 | typedef struct { DECLARE_BITMAP(bits, MAX_NUMNODES); } nodemask_t; |
|---|
| .. | .. |
|---|
| 153 | 153 | |
|---|
| 154 | 154 | #define node_test_and_set(node, nodemask) \ |
|---|
| 155 | 155 | __node_test_and_set((node), &(nodemask)) |
|---|
| 156 | | -static inline int __node_test_and_set(int node, nodemask_t *addr) |
|---|
| 156 | +static inline bool __node_test_and_set(int node, nodemask_t *addr) |
|---|
| 157 | 157 | { |
|---|
| 158 | 158 | return test_and_set_bit(node, addr->bits); |
|---|
| 159 | 159 | } |
|---|
| .. | .. |
|---|
| 200 | 200 | |
|---|
| 201 | 201 | #define nodes_equal(src1, src2) \ |
|---|
| 202 | 202 | __nodes_equal(&(src1), &(src2), MAX_NUMNODES) |
|---|
| 203 | | -static inline int __nodes_equal(const nodemask_t *src1p, |
|---|
| 203 | +static inline bool __nodes_equal(const nodemask_t *src1p, |
|---|
| 204 | 204 | const nodemask_t *src2p, unsigned int nbits) |
|---|
| 205 | 205 | { |
|---|
| 206 | 206 | return bitmap_equal(src1p->bits, src2p->bits, nbits); |
|---|
| .. | .. |
|---|
| 208 | 208 | |
|---|
| 209 | 209 | #define nodes_intersects(src1, src2) \ |
|---|
| 210 | 210 | __nodes_intersects(&(src1), &(src2), MAX_NUMNODES) |
|---|
| 211 | | -static inline int __nodes_intersects(const nodemask_t *src1p, |
|---|
| 211 | +static inline bool __nodes_intersects(const nodemask_t *src1p, |
|---|
| 212 | 212 | const nodemask_t *src2p, unsigned int nbits) |
|---|
| 213 | 213 | { |
|---|
| 214 | 214 | return bitmap_intersects(src1p->bits, src2p->bits, nbits); |
|---|
| .. | .. |
|---|
| 216 | 216 | |
|---|
| 217 | 217 | #define nodes_subset(src1, src2) \ |
|---|
| 218 | 218 | __nodes_subset(&(src1), &(src2), MAX_NUMNODES) |
|---|
| 219 | | -static inline int __nodes_subset(const nodemask_t *src1p, |
|---|
| 219 | +static inline bool __nodes_subset(const nodemask_t *src1p, |
|---|
| 220 | 220 | const nodemask_t *src2p, unsigned int nbits) |
|---|
| 221 | 221 | { |
|---|
| 222 | 222 | return bitmap_subset(src1p->bits, src2p->bits, nbits); |
|---|
| 223 | 223 | } |
|---|
| 224 | 224 | |
|---|
| 225 | 225 | #define nodes_empty(src) __nodes_empty(&(src), MAX_NUMNODES) |
|---|
| 226 | | -static inline int __nodes_empty(const nodemask_t *srcp, unsigned int nbits) |
|---|
| 226 | +static inline bool __nodes_empty(const nodemask_t *srcp, unsigned int nbits) |
|---|
| 227 | 227 | { |
|---|
| 228 | 228 | return bitmap_empty(srcp->bits, nbits); |
|---|
| 229 | 229 | } |
|---|
| 230 | 230 | |
|---|
| 231 | 231 | #define nodes_full(nodemask) __nodes_full(&(nodemask), MAX_NUMNODES) |
|---|
| 232 | | -static inline int __nodes_full(const nodemask_t *srcp, unsigned int nbits) |
|---|
| 232 | +static inline bool __nodes_full(const nodemask_t *srcp, unsigned int nbits) |
|---|
| 233 | 233 | { |
|---|
| 234 | 234 | return bitmap_full(srcp->bits, nbits); |
|---|
| 235 | 235 | } |
|---|
| .. | .. |
|---|
| 260 | 260 | > MAX_NUMNODES, then the silly min_ts could be dropped. */ |
|---|
| 261 | 261 | |
|---|
| 262 | 262 | #define first_node(src) __first_node(&(src)) |
|---|
| 263 | | -static inline int __first_node(const nodemask_t *srcp) |
|---|
| 263 | +static inline unsigned int __first_node(const nodemask_t *srcp) |
|---|
| 264 | 264 | { |
|---|
| 265 | | - return min_t(int, MAX_NUMNODES, find_first_bit(srcp->bits, MAX_NUMNODES)); |
|---|
| 265 | + return min_t(unsigned int, MAX_NUMNODES, find_first_bit(srcp->bits, MAX_NUMNODES)); |
|---|
| 266 | 266 | } |
|---|
| 267 | 267 | |
|---|
| 268 | 268 | #define next_node(n, src) __next_node((n), &(src)) |
|---|
| 269 | | -static inline int __next_node(int n, const nodemask_t *srcp) |
|---|
| 269 | +static inline unsigned int __next_node(int n, const nodemask_t *srcp) |
|---|
| 270 | 270 | { |
|---|
| 271 | | - return min_t(int,MAX_NUMNODES,find_next_bit(srcp->bits, MAX_NUMNODES, n+1)); |
|---|
| 271 | + return min_t(unsigned int, MAX_NUMNODES, find_next_bit(srcp->bits, MAX_NUMNODES, n+1)); |
|---|
| 272 | 272 | } |
|---|
| 273 | 273 | |
|---|
| 274 | 274 | /* |
|---|
| .. | .. |
|---|
| 276 | 276 | * the first node in src if needed. Returns MAX_NUMNODES if src is empty. |
|---|
| 277 | 277 | */ |
|---|
| 278 | 278 | #define next_node_in(n, src) __next_node_in((n), &(src)) |
|---|
| 279 | | -int __next_node_in(int node, const nodemask_t *srcp); |
|---|
| 279 | +unsigned int __next_node_in(int node, const nodemask_t *srcp); |
|---|
| 280 | 280 | |
|---|
| 281 | 281 | static inline void init_nodemask_of_node(nodemask_t *mask, int node) |
|---|
| 282 | 282 | { |
|---|
| .. | .. |
|---|
| 296 | 296 | }) |
|---|
| 297 | 297 | |
|---|
| 298 | 298 | #define first_unset_node(mask) __first_unset_node(&(mask)) |
|---|
| 299 | | -static inline int __first_unset_node(const nodemask_t *maskp) |
|---|
| 299 | +static inline unsigned int __first_unset_node(const nodemask_t *maskp) |
|---|
| 300 | 300 | { |
|---|
| 301 | | - return min_t(int,MAX_NUMNODES, |
|---|
| 301 | + return min_t(unsigned int, MAX_NUMNODES, |
|---|
| 302 | 302 | find_first_zero_bit(maskp->bits, MAX_NUMNODES)); |
|---|
| 303 | 303 | } |
|---|
| 304 | 304 | |
|---|
| .. | .. |
|---|
| 375 | 375 | } |
|---|
| 376 | 376 | |
|---|
| 377 | 377 | #if MAX_NUMNODES > 1 |
|---|
| 378 | | -#define for_each_node_mask(node, mask) \ |
|---|
| 379 | | - for ((node) = first_node(mask); \ |
|---|
| 380 | | - (node) < MAX_NUMNODES; \ |
|---|
| 381 | | - (node) = next_node((node), (mask))) |
|---|
| 378 | +#define for_each_node_mask(node, mask) \ |
|---|
| 379 | + for ((node) = first_node(mask); \ |
|---|
| 380 | + (node >= 0) && (node) < MAX_NUMNODES; \ |
|---|
| 381 | + (node) = next_node((node), (mask))) |
|---|
| 382 | 382 | #else /* MAX_NUMNODES == 1 */ |
|---|
| 383 | | -#define for_each_node_mask(node, mask) \ |
|---|
| 384 | | - if (!nodes_empty(mask)) \ |
|---|
| 385 | | - for ((node) = 0; (node) < 1; (node)++) |
|---|
| 383 | +#define for_each_node_mask(node, mask) \ |
|---|
| 384 | + for ((node) = 0; (node) < 1 && !nodes_empty(mask); (node)++) |
|---|
| 386 | 385 | #endif /* MAX_NUMNODES */ |
|---|
| 387 | 386 | |
|---|
| 388 | 387 | /* |
|---|
| .. | .. |
|---|
| 399 | 398 | #endif |
|---|
| 400 | 399 | N_MEMORY, /* The node has memory(regular, high, movable) */ |
|---|
| 401 | 400 | N_CPU, /* The node has one or more cpus */ |
|---|
| 401 | + N_GENERIC_INITIATOR, /* The node has one or more Generic Initiators */ |
|---|
| 402 | 402 | NR_NODE_STATES |
|---|
| 403 | 403 | }; |
|---|
| 404 | 404 | |
|---|
| .. | .. |
|---|
| 435 | 435 | |
|---|
| 436 | 436 | #define first_online_node first_node(node_states[N_ONLINE]) |
|---|
| 437 | 437 | #define first_memory_node first_node(node_states[N_MEMORY]) |
|---|
| 438 | | -static inline int next_online_node(int nid) |
|---|
| 438 | +static inline unsigned int next_online_node(int nid) |
|---|
| 439 | 439 | { |
|---|
| 440 | 440 | return next_node(nid, node_states[N_ONLINE]); |
|---|
| 441 | 441 | } |
|---|
| 442 | | -static inline int next_memory_node(int nid) |
|---|
| 442 | +static inline unsigned int next_memory_node(int nid) |
|---|
| 443 | 443 | { |
|---|
| 444 | 444 | return next_node(nid, node_states[N_MEMORY]); |
|---|
| 445 | 445 | } |
|---|
| 446 | 446 | |
|---|
| 447 | | -extern int nr_node_ids; |
|---|
| 448 | | -extern int nr_online_nodes; |
|---|
| 447 | +extern unsigned int nr_node_ids; |
|---|
| 448 | +extern unsigned int nr_online_nodes; |
|---|
| 449 | 449 | |
|---|
| 450 | 450 | static inline void node_set_online(int nid) |
|---|
| 451 | 451 | { |
|---|
| .. | .. |
|---|
| 485 | 485 | #define first_online_node 0 |
|---|
| 486 | 486 | #define first_memory_node 0 |
|---|
| 487 | 487 | #define next_online_node(nid) (MAX_NUMNODES) |
|---|
| 488 | | -#define nr_node_ids 1 |
|---|
| 489 | | -#define nr_online_nodes 1 |
|---|
| 488 | +#define nr_node_ids 1U |
|---|
| 489 | +#define nr_online_nodes 1U |
|---|
| 490 | 490 | |
|---|
| 491 | 491 | #define node_set_online(node) node_set_state((node), N_ONLINE) |
|---|
| 492 | 492 | #define node_set_offline(node) node_clear_state((node), N_ONLINE) |
|---|