Lines Matching refs:nodes
15 * interleave Allocate memory interleaved over a set of nodes,
22 * bind Only allocate memory on a specific set of nodes,
26 * the allocation to memory nodes instead
176 int (*create)(struct mempolicy *pol, const nodemask_t *nodes);
177 void (*rebind)(struct mempolicy *pol, const nodemask_t *nodes);
193 static int mpol_new_interleave(struct mempolicy *pol, const nodemask_t *nodes)
195 if (nodes_empty(*nodes))
197 pol->v.nodes = *nodes;
201 static int mpol_new_preferred(struct mempolicy *pol, const nodemask_t *nodes)
203 if (!nodes)
205 else if (nodes_empty(*nodes))
206 return -EINVAL; /* no allowed nodes */
208 pol->v.preferred_node = first_node(*nodes);
212 static int mpol_new_bind(struct mempolicy *pol, const nodemask_t *nodes)
214 if (nodes_empty(*nodes))
216 pol->v.nodes = *nodes;
222 * any, for the new policy. mpol_new() has already validated the nodes
230 const nodemask_t *nodes, struct nodemask_scratch *nsc)
241 VM_BUG_ON(!nodes);
242 if (pol->mode == MPOL_PREFERRED && nodes_empty(*nodes))
243 nodes = NULL; /* explicit local allocation */
246 mpol_relative_nodemask(&nsc->mask2, nodes, &nsc->mask1);
248 nodes_and(nsc->mask2, *nodes, nsc->mask1);
251 pol->w.user_nodemask = *nodes;
257 if (nodes)
266 * initialization. You must invoke mpol_set_nodemask() to set nodes.
269 nodemask_t *nodes)
273 pr_debug("setting mode %d flags %d nodes[0] %lx\n",
274 mode, flags, nodes ? nodes_addr(*nodes)[0] : NUMA_NO_NODE);
277 if (nodes && !nodes_empty(*nodes))
281 VM_BUG_ON(!nodes);
289 if (nodes_empty(*nodes)) {
295 if (!nodes_empty(*nodes) ||
300 } else if (nodes_empty(*nodes))
320 static void mpol_rebind_default(struct mempolicy *pol, const nodemask_t *nodes)
324 static void mpol_rebind_nodemask(struct mempolicy *pol, const nodemask_t *nodes)
329 nodes_and(tmp, pol->w.user_nodemask, *nodes);
331 mpol_relative_nodemask(&tmp, &pol->w.user_nodemask, nodes);
333 nodes_remap(tmp, pol->v.nodes,pol->w.cpuset_mems_allowed,
334 *nodes);
335 pol->w.cpuset_mems_allowed = *nodes;
339 tmp = *nodes;
341 pol->v.nodes = tmp;
345 const nodemask_t *nodes)
352 if (node_isset(node, *nodes)) {
358 mpol_relative_nodemask(&tmp, &pol->w.user_nodemask, nodes);
363 *nodes);
364 pol->w.cpuset_mems_allowed = *nodes;
369 * mpol_rebind_policy - Migrate a policy to a different set of nodes
730 * If pages found in a given range are on a set of nodes (determined by
731 * @nodes and @flags,) it's isolated and queued to the pagelist which is
744 nodemask_t *nodes, unsigned long flags,
751 .nmask = nodes,
859 nodemask_t *nodes)
868 new = mpol_new(mode, flags, nodes);
874 ret = mpol_set_nodemask(new, nodes, scratch);
897 static void get_policy_nodemask(struct mempolicy *p, nodemask_t *nodes)
899 nodes_clear(*nodes);
906 *nodes = p->v.nodes;
910 node_set(p->v.preferred_node, *nodes);
996 *policy = next_node_in(current->il_prev, pol->v.nodes);
1134 * This lets us pick a pair of nodes to migrate between, such that
1163 * However if the number of source nodes is not equal to
1164 * the number of destination nodes we can not preserve
1184 /* dest not in remaining from nodes? */
1308 pr_debug("mbind %lx-%lx mode:%d flags:%d nodes:%lx\n",
1372 static int get_nodes(nodemask_t *nodes, const unsigned long __user *nmask,
1381 nodes_clear(*nodes);
1394 * When the user specified more nodes than supported just check
1426 if (copy_from_user(nodes_addr(*nodes), nmask, nlongs*sizeof(unsigned long)))
1428 nodes_addr(*nodes)[nlongs-1] &= endmask;
1434 nodemask_t *nodes)
1446 return copy_to_user(mask, nodes_addr(*nodes), copy) ? -EFAULT : 0;
1453 nodemask_t nodes;
1465 err = get_nodes(&nodes, nmask, maxnode);
1468 return do_mbind(start, len, mode, mode_flags, &nodes, flags);
1483 nodemask_t nodes;
1492 err = get_nodes(&nodes, nmask, maxnode);
1495 return do_set_mempolicy(mode, flags, &nodes);
1554 /* Is the user allowed to access the target nodes? */
1609 nodemask_t nodes;
1616 err = do_get_mempolicy(&pval, &nodes, addr, flags);
1625 err = copy_nodes_to_user(nmask, maxnode, &nodes);
1852 * if policy->v.nodes has movable memory only,
1855 * policy->v.nodes is intersect with node_states[N_MEMORY].
1857 * policy->v.nodes has movable memory only.
1859 if (!nodes_intersects(policy->v.nodes, node_states[N_HIGH_MEMORY]))
1866 * Return a nodemask representing a mempolicy for filtering nodes for
1874 cpuset_nodemask_valid_mems_allowed(&policy->v.nodes))
1875 return &policy->v.nodes;
1903 next = next_node_in(me->il_prev, policy->v.nodes);
1946 &policy->v.nodes);
1957 * node in pol->v.nodes (starting from n=0), wrapping around if n exceeds the
1958 * number of present nodes.
1962 unsigned nnodes = nodes_weight(pol->v.nodes);
1970 nid = first_node(pol->v.nodes);
1972 nid = next_node(nid, pol->v.nodes);
2028 *nodemask = &(*mpol)->v.nodes;
2070 *mask = mempolicy->v.nodes;
2108 * MPOL_PREFERRED and MPOL_F_LOCAL are only preferred nodes to
2109 * allocate from, they may fallback to other nodes when oom.
2111 * nodes in mask.
2116 ret = nodes_intersects(mempolicy->v.nodes, *mask);
2195 * node and don't fall back to other nodes, as the cost of
2336 return !!nodes_equal(a->v.nodes, b->v.nodes);
2491 * allows binding to multiple nodes.
2494 * If no allowed nodes, use current [!misplaced].
2496 if (node_isset(curnid, pol->v.nodes))
2501 &pol->v.nodes);
2705 npol ? nodes_addr(npol->v.nodes)[0] : NUMA_NO_NODE);
2809 * enabled across suitably sized nodes (default is >= 16MB), or
2875 nodemask_t nodes;
2886 if (nodelist_parse(nodelist, nodes))
2888 if (!nodes_subset(nodes, node_states[N_MEMORY]))
2891 nodes_clear(nodes);
2901 * we use first_node(nodes) to grab a single node, so here
2902 * nodelist (or nodes) cannot be empty.
2910 if (nodes_empty(nodes))
2916 * Default to online nodes with memory if no nodelist
2919 nodes = node_states[N_MEMORY];
2958 new = mpol_new(mode, mode_flags, &nodes);
2963 * Save nodes for mpol_to_str() to show the tmpfs mount options
2967 new->v.nodes = nodes;
2969 new->v.preferred_node = first_node(nodes);
2974 * Save nodes for contextualization: this will be used to "clone"
2977 new->w.user_nodemask = nodes;
3006 nodemask_t nodes = NODE_MASK_NONE;
3022 node_set(pol->v.preferred_node, nodes);
3026 nodes = pol->v.nodes;
3048 if (!nodes_empty(nodes))
3050 nodemask_pr_args(&nodes));