lkml.org 
[lkml]   [2009]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [BUG] set_mempolicy(MPOL_INTERLEAV) cause kernel panic
On Wed, 15 Jul 2009, Lee Schermerhorn wrote:

> Interestingly, on ia64, the top cpuset mems_allowed gets set to all
> possible nodes, while on x86_64, it gets set to on-line nodes [or nodes
> with memory]. Maybe this is a to support hot-plug?
>

numactl --interleave=all simply passes a nodemask with all bits set, so if
cpuset_current_mems_allowed includes offline nodes from node_possible_map,
then mpol_set_nodemask() doesn't mask them off.

Seems like we could handle this strictly in mempolicies without worrying
about top_cpuset like in the following?
---
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -194,6 +194,7 @@ static int mpol_new_bind(struct mempolicy *pol, const nodemask_t *nodes)
static int mpol_set_nodemask(struct mempolicy *pol, const nodemask_t *nodes)
{
nodemask_t cpuset_context_nmask;
+ nodemask_t mems_allowed;
int ret;

/* if mode is MPOL_DEFAULT, pol is NULL. This is right. */
@@ -201,20 +202,21 @@ static int mpol_set_nodemask(struct mempolicy *pol, const nodemask_t *nodes)
return 0;

VM_BUG_ON(!nodes);
+ nodes_and(mems_allowed, cpuset_current_mems_allowed,
+ node_states[N_HIGH_MEMORY]);
if (pol->mode == MPOL_PREFERRED && nodes_empty(*nodes))
nodes = NULL; /* explicit local allocation */
else {
if (pol->flags & MPOL_F_RELATIVE_NODES)
mpol_relative_nodemask(&cpuset_context_nmask, nodes,
- &cpuset_current_mems_allowed);
+ &mems_allowed);
else
nodes_and(cpuset_context_nmask, *nodes,
- cpuset_current_mems_allowed);
+ mems_allowed);
if (mpol_store_user_nodemask(pol))
pol->w.user_nodemask = *nodes;
else
- pol->w.cpuset_mems_allowed =
- cpuset_current_mems_allowed;
+ pol->w.cpuset_mems_allowed = mems_allowed;
}

ret = mpol_ops[pol->mode].create(pol,

\
 
 \ /
  Last update: 2009-07-16 22:07    [W:0.170 / U:0.016 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site