diff -r fd335a2c3bc4 usr/src/uts/i86pc/vm/vm_machdep.c
--- a/usr/src/uts/i86pc/vm/vm_machdep.c	Wed Mar 18 00:36:41 2009 +0800
+++ b/usr/src/uts/i86pc/vm/vm_machdep.c	Wed Mar 18 12:17:57 2009 +0800
@@ -1250,10 +1250,26 @@
 mnode_range_setup(mnoderange_t *mnoderanges)
 {
 	int	mnode, mri;
+	int	i, max_mnodes = 0;
+	int	mnodes[MAX_MEM_NODES];
 
 	for (mnode = 0; mnode < max_mem_nodes; mnode++) {
 		if (mem_node_config[mnode].exists == 0)
 			continue;
+		for (i = max_mnodes; i > 0; i--) {
+			if (mem_node_config[mnode].physbase >
+			    mem_node_config[mnodes[i - 1]].physbase) {
+				break;
+			} else {
+				mnodes[i] = mnodes[i - 1];
+			}
+		}
+		mnodes[i] = mnode;
+		max_mnodes++;
+	}
+
+	for (i = 0; i < max_mnodes; i++) {
+		mnode = mnodes[i];
 
 		mri = nranges - 1;
 
