linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: clameter@sgi.com
To: Nishanth Aravamudan <nacc@us.ibm.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>, linux-mm@kvack.org
Subject: [RFC 09/13] Memoryless nodes: Update memory policy and page migration
Date: Thu, 14 Jun 2007 00:50:35 -0700	[thread overview]
Message-ID: <20070614075336.187800982@sgi.com> (raw)
In-Reply-To: <20070614075026.607300756@sgi.com>

[-- Attachment #1: nodeless_migrate --]
[-- Type: text/plain, Size: 4060 bytes --]

Online nodes now may have no memory. The checks and initialization must therefore
be changed to no longer use the online functions.

This will correctly initialize the interleave on bootup to only target
nodes with memory and will make sys_move_pages return an error when a page
is to be moved to a memoryless node. Similarly we will get an error if
MPOL_BIND and MPOL_INTERLEAVE is used on a memoryless node.

These are somewhat new semantics. So far one could specify memoryless nodes
and we would maybe do the right thing and just ignore the node (or wed do
something strange like with MPOL_INTERLEAVE). If we want to allow the
specification of memoryless nodes via memory policies then we need to keep
checking for online nodes.

Signed-off-by: Christoph Lameter <clameter@sgi.com>

Index: linux-2.6.22-rc4-mm2/mm/migrate.c
===================================================================
--- linux-2.6.22-rc4-mm2.orig/mm/migrate.c	2007-06-13 23:40:38.000000000 -0700
+++ linux-2.6.22-rc4-mm2/mm/migrate.c	2007-06-13 23:41:26.000000000 -0700
@@ -963,7 +963,7 @@ asmlinkage long sys_move_pages(pid_t pid
 				goto out;
 
 			err = -ENODEV;
-			if (!node_online(node))
+			if (!node_memory(node))
 				goto out;
 
 			err = -EACCES;
Index: linux-2.6.22-rc4-mm2/mm/mempolicy.c
===================================================================
--- linux-2.6.22-rc4-mm2.orig/mm/mempolicy.c	2007-06-13 23:42:50.000000000 -0700
+++ linux-2.6.22-rc4-mm2/mm/mempolicy.c	2007-06-13 23:44:57.000000000 -0700
@@ -130,7 +130,7 @@ static int mpol_check_policy(int mode, n
 			return -EINVAL;
 		break;
 	}
-	return nodes_subset(*nodes, node_online_map) ? 0 : -EINVAL;
+	return nodes_subset(*nodes, node_memory_map) ? 0 : -EINVAL;
 }
 
 /* Generate a custom zonelist for the BIND policy. */
@@ -495,9 +495,9 @@ static void get_zonemask(struct mempolic
 		*nodes = p->v.nodes;
 		break;
 	case MPOL_PREFERRED:
-		/* or use current node instead of online map? */
+		/* or use current node instead of memory_map? */
 		if (p->v.preferred_node < 0)
-			*nodes = node_online_map;
+			*nodes = node_memory_map;
 		else
 			node_set(p->v.preferred_node, *nodes);
 		break;
@@ -1606,7 +1606,7 @@ int mpol_parse_options(char *value, int 
 		*nodelist++ = '\0';
 		if (nodelist_parse(nodelist, *policy_nodes))
 			goto out;
-		if (!nodes_subset(*policy_nodes, node_online_map))
+		if (!nodes_subset(*policy_nodes, node_memory_map))
 			goto out;
 	}
 	if (!strcmp(value, "default")) {
@@ -1631,9 +1631,9 @@ int mpol_parse_options(char *value, int 
 			err = 0;
 	} else if (!strcmp(value, "interleave")) {
 		*policy = MPOL_INTERLEAVE;
-		/* Default to nodes online if no nodelist */
+		/* Default to nodes memory map if no nodelist */
 		if (!nodelist)
-			*policy_nodes = node_online_map;
+			*policy_nodes = node_memory_map;
 		err = 0;
 	}
 out:
@@ -1674,14 +1674,14 @@ void __init numa_policy_init(void)
 
 	/*
 	 * Use the specified nodemask for init, or fall back to
-	 * node_online_map.
+	 * node_memory_map.
 	 */
 	if (policy_sysinit == MPOL_DEFAULT)
 		nmask = NULL;
 	else if (!nodes_empty(nmask_sysinit))
 		nmask = &nmask_sysinit;
 	else
-		nmask = &node_online_map;
+		nmask = &node_memory_map;
 
 	if (do_set_mempolicy(policy_sysinit, nmask))
 		printk("numa_policy_init: setting init policy failed\n");
@@ -1945,7 +1945,7 @@ int show_numa_map(struct seq_file *m, vo
 		seq_printf(m, " huge");
 	} else {
 		check_pgd_range(vma, vma->vm_start, vma->vm_end,
-				&node_online_map, MPOL_MF_STATS, md);
+				&node_memory_map, MPOL_MF_STATS, md);
 	}
 
 	if (!md->pages)
@@ -1972,7 +1972,7 @@ int show_numa_map(struct seq_file *m, vo
 	if (md->writeback)
 		seq_printf(m," writeback=%lu", md->writeback);
 
-	for_each_online_node(n)
+	for_each_memory_node(n)
 		if (md->node[n])
 			seq_printf(m, " N%d=%lu", n, md->node[n]);
 out:

-- 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2007-06-14  7:50 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-14  7:50 [RFC 00/13] RFC memoryless node handling fixes clameter
2007-06-14  7:50 ` [RFC 01/13] NUMA: introduce node_memory_map clameter
2007-06-14  7:50 ` [RFC 02/13] Fix MPOL_INTERLEAVE behavior for memoryless nodes clameter
2007-06-14  7:50 ` [RFC 03/13] OOM: use the node_memory_map instead of constructing one on the fly clameter
2007-06-14  7:50 ` [RFC 04/13] Memoryless Nodes: No need for kswapd clameter
2007-06-14  7:50 ` [RFC 05/13] Memoryless Node: Slab support clameter
2007-06-14  7:50 ` [RFC 06/13] Memoryless nodes: SLUB support clameter
2007-06-14  7:50 ` [RFC 07/13] Uncached allocator: Handle memoryless nodes clameter
2007-06-14  7:50 ` [RFC 08/13] Memoryless node: Allow profiling data to fall back to other nodes clameter
2007-06-14  7:50 ` clameter [this message]
2007-06-14  7:50 ` [RFC 10/13] Memoryless nodes: Fix GFP_THISNODE behavior clameter
2007-06-14 16:07   ` Nishanth Aravamudan
2007-06-14 16:13     ` Christoph Lameter
2007-06-18 16:47     ` Nishanth Aravamudan
2007-06-14  7:50 ` [RFC 11/13] SLUB: Ensure that the # object per slabs stays low enough clameter
2007-06-14  7:50 ` [RFC 12/13] SLUB: minimum alignment fixes clameter
2007-06-14  7:56   ` Christoph Lameter
2007-06-14  7:50 ` [RFC 13/13] I finally found a way to get rid of the nasty list of comparisions in slub_def.h. ilog2 seems to work right for constants clameter
2007-06-14  7:57   ` Christoph Lameter
2007-06-14 14:24 ` [RFC 00/13] RFC memoryless node handling fixes Nishanth Aravamudan

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=20070614075336.187800982@sgi.com \
    --to=clameter@sgi.com \
    --cc=Lee.Schermerhorn@hp.com \
    --cc=linux-mm@kvack.org \
    --cc=nacc@us.ibm.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