.. | .. |
---|
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) |
---|