Commit fee83b3a authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

mm/mempolicy.c:offset_il_node() document and clarify

This code was pretty obscure and was relying upon obscure side-effects
of next_node(-1, ...) and was relying upon NUMA_NO_NODE being equal to
-1.

Clean that all up and document the function's intent.
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Joonsoo Kim <js1304@gmail.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Laura Abbott <lauraa@codeaurora.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 54f18d35
...@@ -1758,23 +1758,25 @@ unsigned int mempolicy_slab_node(void) ...@@ -1758,23 +1758,25 @@ unsigned int mempolicy_slab_node(void)
} }
} }
/* Do static interleaving for a VMA with known offset. */ /*
* Do static interleaving for a VMA with known offset @n. Returns the n'th
* node in pol->v.nodes (starting from n=0), wrapping around if n exceeds the
* number of present nodes.
*/
static unsigned offset_il_node(struct mempolicy *pol, static unsigned offset_il_node(struct mempolicy *pol,
struct vm_area_struct *vma, unsigned long off) struct vm_area_struct *vma, unsigned long n)
{ {
unsigned nnodes = nodes_weight(pol->v.nodes); unsigned nnodes = nodes_weight(pol->v.nodes);
unsigned target; unsigned target;
int c; int i;
int nid = NUMA_NO_NODE; int nid;
if (!nnodes) if (!nnodes)
return numa_node_id(); return numa_node_id();
target = (unsigned int)off % nnodes; target = (unsigned int)n % nnodes;
c = 0; nid = first_node(pol->v.nodes);
do { for (i = 0; i < target; i++)
nid = next_node(nid, pol->v.nodes); nid = next_node(nid, pol->v.nodes);
c++;
} while (c <= target);
return nid; return nid;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment