18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include <linux/nodemask.h> 38c2ecf20Sopenharmony_ci#include <linux/module.h> 48c2ecf20Sopenharmony_ci#include <linux/random.h> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ciunsigned int __next_node_in(int node, const nodemask_t *srcp) 78c2ecf20Sopenharmony_ci{ 88c2ecf20Sopenharmony_ci unsigned int ret = __next_node(node, srcp); 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci if (ret == MAX_NUMNODES) 118c2ecf20Sopenharmony_ci ret = __first_node(srcp); 128c2ecf20Sopenharmony_ci return ret; 138c2ecf20Sopenharmony_ci} 148c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__next_node_in); 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#ifdef CONFIG_NUMA 178c2ecf20Sopenharmony_ci/* 188c2ecf20Sopenharmony_ci * Return the bit number of a random bit set in the nodemask. 198c2ecf20Sopenharmony_ci * (returns NUMA_NO_NODE if nodemask is empty) 208c2ecf20Sopenharmony_ci */ 218c2ecf20Sopenharmony_ciint node_random(const nodemask_t *maskp) 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci int w, bit = NUMA_NO_NODE; 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci w = nodes_weight(*maskp); 268c2ecf20Sopenharmony_ci if (w) 278c2ecf20Sopenharmony_ci bit = bitmap_ord_to_pos(maskp->bits, 288c2ecf20Sopenharmony_ci get_random_int() % w, MAX_NUMNODES); 298c2ecf20Sopenharmony_ci return bit; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci#endif 32