xref: /OK3568_Linux_fs/kernel/lib/nodemask.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include <linux/nodemask.h>
3*4882a593Smuzhiyun #include <linux/module.h>
4*4882a593Smuzhiyun #include <linux/random.h>
5*4882a593Smuzhiyun 
__next_node_in(int node,const nodemask_t * srcp)6*4882a593Smuzhiyun unsigned int __next_node_in(int node, const nodemask_t *srcp)
7*4882a593Smuzhiyun {
8*4882a593Smuzhiyun 	unsigned int ret = __next_node(node, srcp);
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun 	if (ret == MAX_NUMNODES)
11*4882a593Smuzhiyun 		ret = __first_node(srcp);
12*4882a593Smuzhiyun 	return ret;
13*4882a593Smuzhiyun }
14*4882a593Smuzhiyun EXPORT_SYMBOL(__next_node_in);
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #ifdef CONFIG_NUMA
17*4882a593Smuzhiyun /*
18*4882a593Smuzhiyun  * Return the bit number of a random bit set in the nodemask.
19*4882a593Smuzhiyun  * (returns NUMA_NO_NODE if nodemask is empty)
20*4882a593Smuzhiyun  */
node_random(const nodemask_t * maskp)21*4882a593Smuzhiyun int node_random(const nodemask_t *maskp)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun 	int w, bit = NUMA_NO_NODE;
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun 	w = nodes_weight(*maskp);
26*4882a593Smuzhiyun 	if (w)
27*4882a593Smuzhiyun 		bit = bitmap_ord_to_pos(maskp->bits,
28*4882a593Smuzhiyun 			get_random_int() % w, MAX_NUMNODES);
29*4882a593Smuzhiyun 	return bit;
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun #endif
32