linux-numa.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lee Schermerhorn <lee.schermerhorn@hp.com>
To: linux-mm@vger.kernel.org
Cc: linux-numa@vger.kernel.org, eric.whitney@hp.com,
	Andrew Morton <akpm@linux-foundation.org>,
	Miao Xie <miaox@cn.fujitsu.com>
Subject: [PATCH 1/2] mmotm: cpusetmm-update-tasks-mems_allowed-in-time-fix
Date: Tue, 28 Apr 2009 14:14:25 -0400	[thread overview]
Message-ID: <20090428181425.25190.49303.sendpatchset@localhost.localdomain> (raw)

PATCH 1/2 cpusetmm-update-tasks-mems_allowed-in-time-fix

[forgot linux-mm in previous send.  sorry for repeat.  at least
it's only two patches...]

Against: 2.6.30-rc3-mmotm-090424-1814

The rework of mpol_new() to extract the adjusting of the node mask
to apply cpuset and mpol flags "context" breaks set_mempolicy() and
mbind() with MPOL_PREFERRED and a NULL nodemask--i.e., explicit local
allocation.  Fix this by adding the check for MPOL_PREFERRED and
empty node mask to mpol_new_mpolicy().

Remove the now unneeded 'nodes = NULL' from mpol_new().

Note that mpol_new_mempolicy() is always called with a non-NULL
'nodes' parameter now that it has been removed from mpol_new().
Therefore, we don't need to test nodes for NULL before testing
it for 'empty'.  However, just to be extra paranoid, add a 
VM_BUG_ON() to verify this assumption.

Tested on x86_64 with numactl-2.0.3-rc2+ regression test.

Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com>

 mm/mempolicy.c |   11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Index: linux-2.6.30-rc3-mmotm-090424-1814/mm/mempolicy.c
===================================================================
--- linux-2.6.30-rc3-mmotm-090424-1814.orig/mm/mempolicy.c	2009-04-27 13:42:53.000000000 -0400
+++ linux-2.6.30-rc3-mmotm-090424-1814/mm/mempolicy.c	2009-04-28 13:32:32.000000000 -0400
@@ -182,8 +182,9 @@ static int mpol_new_bind(struct mempolic
 	return 0;
 }
 /*
- * This function is called after mpol_new(). The parameter -- nodes needn't
- * been check because mpol_new() has done it. Maybe this implement is ugly.
+ * This function is called after mpol_new().  mpol_new() has already validated
+ * the nodes parameter with respect to the policy mode and flags.  But, we
+ * need to handle an empty nodemaks with MPOL_PREFERRED here.
  *
  * We use task's alloc_lock to protect task's mems_allowed and mempolicy.
  * so this function should be called with task's alloc_lock held.
@@ -197,7 +198,10 @@ static int mpol_new_mempolicy(struct mem
 	if (pol == NULL)
 		return 0;
 
-	if (nodes) {
+	VM_BUG_ON(!nodes);
+	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);
@@ -243,7 +247,6 @@ static struct mempolicy *mpol_new(unsign
 			if (((flags & MPOL_F_STATIC_NODES) ||
 			     (flags & MPOL_F_RELATIVE_NODES)))
 				return ERR_PTR(-EINVAL);
-			nodes = NULL;	/* flag local alloc */
 		}
 	} else if (nodes_empty(*nodes))
 		return ERR_PTR(-EINVAL);

             reply	other threads:[~2009-04-28 18:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-28 18:14 Lee Schermerhorn [this message]
2009-04-28 18:14 ` [PATCH 2/2] mmotm: cpusetmm-update-tasks-mems_allowed-in-time-cleanup Lee Schermerhorn
  -- strict thread matches above, loose matches on Subject: below --
2009-04-28 18:02 [PATCH 1/2] mmotm: cpusetmm-update-tasks-mems_allowed-in-time-fix Lee Schermerhorn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090428181425.25190.49303.sendpatchset@localhost.localdomain \
    --to=lee.schermerhorn@hp.com \
    --cc=akpm@linux-foundation.org \
    --cc=eric.whitney@hp.com \
    --cc=linux-mm@vger.kernel.org \
    --cc=linux-numa@vger.kernel.org \
    --cc=miaox@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).