Skip to contentSkip to conversation

CPUSET related breakage of sys_mbind

PATCH In review Bob Picco 3 participants 6 messages Jan 15, 2007 – Jan 16, 2007

Subsystems (3)
lore
Share & tools
lore

Bob Picco

author
#0 lore raw

PATCH 1/1 CPUSET related breakage of sys_mbind

current->mems_allowed is defined for CONFIG_CPUSETS. This broke !CPUSETS build. I compiled and linked tested both variants.

 include/linux/cpuset.h |    6 ++++++
 mm/mempolicy.c         |    2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
mm/mempolicy.c +1 -1
Index: linux-2.6.20-rc4-mm1/mm/mempolicy.c
===================================================================
@@ -882,9 +882,9 @@ asmlinkage long sys_mbind(unsigned long 
 	int err;
 
 	err = get_nodes(&nodes, nmask, maxnode);
-	nodes_and(nodes, nodes, current->mems_allowed);
 	if (err)
 		return err;
+	cpuset_nodes_allowed(&nodes);
 	return do_mbind(start, len, mode, &nodes, flags);
 }
 
include/linux/cpuset.h +6 -0
Index: linux-2.6.20-rc4-mm1/include/linux/cpuset.h
===================================================================
@@ -75,6 +75,11 @@ static inline int cpuset_do_slab_mem_spr
 
 extern void cpuset_track_online_nodes(void);
 
+static inline void cpuset_nodes_allowed(nodemask_t *nodes)
+{
+	nodes_and(*nodes, *nodes, current->mems_allowed);
+}
+
 #else /* !CONFIG_CPUSETS */
 
 static inline int cpuset_init_early(void) { return 0; }
@@ -145,6 +150,7 @@ static inline int cpuset_do_slab_mem_spr
 }
 
 static inline void cpuset_track_online_nodes(void) {}
+static inline void cpuset_nodes_allowed(nodemask_t *nodes) {}
 
 #endif /* !CONFIG_CPUSETS */
 
#1 lore raw

You're right about this problemI think that Christoph Lameter (added to cc list) is working on a fix for this.

Signature · 3 lines
                  I won't rest till it's the best ...
                  Programmer, Linux Scalability
                  Paul Jackson <[email protected]> 1.925.600.0401
#2 lore raw
Quoted 2 lines · Paul Jackson

You're right about this problemI think that Christoph Lameter (added to cc list) is working on a fix for this.

Cpusets is your thing so I think you could fix this the right way. There are already two different patches fixing this. Just make it the way that it fits cpusets.

#3 lore raw
Quoted 1 line · Christoph

Cpusets is your thing so I think you could fix this the right way.

But wasn't it your patch that broke ...

Actually, I'd have blessed Bob Picco's patch, as it's done the right way, with a cpuset_* macro hook, defined twice in cpuset.h, with and without CONFIG_CPUSET, where the without case compiles to a no-op. This is the same way as is used for the couple dozen other cpuset kernel hooks.

But I thought you were already signed up for this one, so I didn't want to trample on your efforts.

And, perhaps more important, I understood you had some other patches in the works that have cpuset hooks. I'm thinking it would be a good idea to learn how these hooks are done, so we don't have to come around here again.

How about this ... you take another look at Bob's patch. If it's ok by you too, then we can both bless it, and that should do it.

Signature · 3 lines
                  I won't rest till it's the best ...
                  Programmer, Linux Scalability
                  Paul Jackson <[email protected]> 1.925.600.0401