linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map'
@ 2004-12-23 21:51 Matthew Dobson
  2004-12-23 22:35 ` [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha Matthew Dobson
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 21:51 UTC (permalink / raw)
  To: LKML, LSE Tech, Andrew Morton

The next 10 messages will contain 10 patches to remove the global
variable 'numnodes' and replace it's use with manipulations of
'node_online_map'.  This will remove the requirement that nodes be
numbered sequentially [0 ... (numnodes-1)] with no gaps in the
numbering.  The removal of this requirement will facilitate node HotPlug
as well as remove the need for some of the arch-specific node
renumbering schemes in the kernel.  Several architectures have to map
their native node numbers to 'Linux' node numbers, and I hope that some
of this may be removed now.

The following 10 patches replace numnodes in arch-independent code and
the 9 architectures that reference numnodes (alpha, arm, i386, ia64,
m32r, mips, parisc, ppc64, & x86_64).  A rollup patch has been lightly
tested (aka: booted) on x86 & ppc64.

Cheers!

-Matt


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
@ 2004-12-23 22:35 ` Matthew Dobson
  2004-12-23 22:37 ` [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm Matthew Dobson
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:35 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

1/10 - Replace numnodes with node_online_map for alpha

[mcd@arrakis node_online_map]$ diffstat arch-alpha.patch
 numa.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/alpha/mm/numa.c linux-2.6.10-rc3-mm1-nom.alpha/arch/alpha/mm/numa.c
--- linux-2.6.10-rc3-mm1/arch/alpha/mm/numa.c	2004-12-13 16:22:45.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.alpha/arch/alpha/mm/numa.c	2004-12-14 11:57:16.000000000 -0800
@@ -246,7 +246,7 @@ setup_memory_node(int nid, void *kernel_
 	reserve_bootmem_node(NODE_DATA(nid), PFN_PHYS(bootmap_start), bootmap_size);
 	printk(" reserving pages %ld:%ld\n", bootmap_start, bootmap_start+PFN_UP(bootmap_size));
 
-	numnodes++;
+	node_set_online(nid);
 }
 
 void __init
@@ -256,7 +256,7 @@ setup_memory(void *kernel_end)
 
 	show_mem_layout();
 
-	numnodes = 0;
+	nodes_clear(node_online_map);
 
 	min_low_pfn = ~0UL;
 	max_low_pfn = 0UL;
@@ -303,7 +303,7 @@ void __init paging_init(void)
 	 */
 	dma_local_pfn = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
 
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		unsigned long start_pfn = node_bdata[nid].node_boot_start >> PAGE_SHIFT;
 		unsigned long end_pfn = node_bdata[nid].node_low_pfn;
 
@@ -332,7 +332,7 @@ void __init mem_init(void)
 	high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
 	reservedpages = 0;
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		/*
 		 * This will free up the bootmem, ie, slot 0 memory
 		 */
@@ -372,7 +372,7 @@ show_mem(void)
 	printk("\nMem-info:\n");
 	show_free_areas();
 	printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		struct page * lmem_map = node_mem_map(nid);
 		i = node_spanned_pages(nid);
 		while (i-- > 0) {



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
  2004-12-23 22:35 ` [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha Matthew Dobson
@ 2004-12-23 22:37 ` Matthew Dobson
  2004-12-23 22:39 ` [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386 Matthew Dobson
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:37 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

2/10 - Replace numnodes with node_online_map for arm

[mcd@arrakis node_online_map]$ diffstat arch-arm.patch
 arch/arm/mm/init.c                |   34 +++++++++++++++-------------------
 arch/arm/mm/mm-armv.c             |    2 +-
 arch/arm26/mm/init.c              |    3 ++-
 include/asm-arm/arch-pxa/memory.h |    2 --
 4 files changed, 18 insertions(+), 23 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/arm/mm/init.c linux-2.6.10-rc3-mm1-nom.arm/arch/arm/mm/init.c
--- linux-2.6.10-rc3-mm1/arch/arm/mm/init.c	2004-12-13 16:22:55.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.arm/arch/arm/mm/init.c	2004-12-15 16:17:24.000000000 -0800
@@ -55,7 +55,7 @@ void show_mem(void)
 	show_free_areas();
 	printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
 
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		struct page *page, *end;
 
 		page = NODE_MEM_MAP(node);
@@ -178,18 +178,14 @@ find_memend_and_nodes(struct meminfo *mi
 
 		node = mi->bank[i].node;
 
-		if (node >= numnodes) {
-			numnodes = node + 1;
-
-			/*
-			 * Make sure we haven't exceeded the maximum number
-			 * of nodes that we have in this configuration.  If
-			 * we have, we're in trouble.  (maybe we ought to
-			 * limit, instead of bugging?)
-			 */
-			if (numnodes > MAX_NUMNODES)
-				BUG();
-		}
+		/*
+		 * Make sure we haven't exceeded the maximum number of nodes
+		 * that we have in this configuration.  If we have, we're in
+		 * trouble.  (maybe we ought to limit, instead of bugging?)
+		 */
+		if (node >= MAX_NUMNODES)
+			BUG();
+		node_set_online(node);
 
 		/*
 		 * Get the start and end pfns for this bank
@@ -211,7 +207,7 @@ find_memend_and_nodes(struct meminfo *mi
 	 * Calculate the number of pages we require to
 	 * store the bootmem bitmaps.
 	 */
-	for (i = 0; i < numnodes; i++) {
+	for_each_online_node(i) {
 		if (np[i].end == 0)
 			continue;
 
@@ -380,13 +376,13 @@ static void __init bootmem_init(struct m
 	 * (we could also do with rolling bootmem_init and paging_init
 	 * into one generic "memory_init" type function).
 	 */
-	np += numnodes - 1;
-	for (node = numnodes - 1; node >= 0; node--, np--) {
+	np += num_online_nodes() - 1;
+	for (node = num_online_nodes() - 1; node >= 0; node--, np--) {
 		/*
 		 * If there are no pages in this node, ignore it.
 		 * Note that node 0 must always have some pages.
 		 */
-		if (np->end == 0) {
+		if (np->end == 0 || !node_online(node)) {
 			if (node == 0)
 				BUG();
 			continue;
@@ -449,7 +445,7 @@ void __init paging_init(struct meminfo *
 	/*
 	 * initialise the zones within each node
 	 */
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		unsigned long zone_size[MAX_NR_ZONES];
 		unsigned long zhole_size[MAX_NR_ZONES];
 		struct bootmem_data *bdata;
@@ -558,7 +554,7 @@ void __init mem_init(void)
 		create_memmap_holes(&meminfo);
 
 	/* this will put all unused low memory onto the freelists */
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		pg_data_t *pgdat = NODE_DATA(node);
 
 		if (pgdat->node_spanned_pages != 0)
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/arm/mm/mm-armv.c linux-2.6.10-rc3-mm1-nom.arm/arch/arm/mm/mm-armv.c
--- linux-2.6.10-rc3-mm1/arch/arm/mm/mm-armv.c	2004-12-13 16:22:55.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.arm/arch/arm/mm/mm-armv.c	2004-12-14 11:57:16.000000000 -0800
@@ -681,6 +681,6 @@ void __init create_memmap_holes(struct m
 {
 	int node;
 
-	for (node = 0; node < numnodes; node++)
+	for_each_online_node(node)
 		free_unused_memmap_node(node, mi);
 }
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/arm26/mm/init.c linux-2.6.10-rc3-mm1-nom.arm/arch/arm26/mm/init.c
--- linux-2.6.10-rc3-mm1/arch/arm26/mm/init.c	2004-12-13 16:22:26.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.arm/arch/arm26/mm/init.c	2004-12-14 11:57:16.000000000 -0800
@@ -156,7 +156,8 @@ find_memend_and_nodes(struct meminfo *mi
 {
 	unsigned int memend_pfn = 0;
 
-	numnodes = 1;
+	nodes_clear(node_online_map);
+	node_set_online(0);
 
 	np->bootmap_pages = 0;
 
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-arm/arch-pxa/memory.h linux-2.6.10-rc3-mm1-nom.arm/include/asm-arm/arch-pxa/memory.h
--- linux-2.6.10-rc3-mm1/include/asm-arm/arch-pxa/memory.h	2004-12-13 16:23:59.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.arm/include/asm-arm/arch-pxa/memory.h	2004-12-16 14:21:50.000000000 -0800
@@ -37,8 +37,6 @@
  * 	node 3:  0xac000000-0xafffffff	-->  0xcc000000-0xcfffffff
  */
 
-#define NR_NODES	4
-
 /*
  * Given a kernel address, find the home node of the underlying memory.
  */



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
  2004-12-23 22:35 ` [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha Matthew Dobson
  2004-12-23 22:37 ` [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm Matthew Dobson
@ 2004-12-23 22:39 ` Matthew Dobson
  2004-12-23 22:40 ` [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64 Matthew Dobson
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:39 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

3/10 - Replace numnodes with node_online_map for i386

[mcd@arrakis node_online_map]$ diffstat arch-i386.patch
 arch/i386/kernel/mpparse.c              |    4 ++--
 arch/i386/kernel/numaq.c                |   10 ++++------
 arch/i386/kernel/srat.c                 |   32 ++++++++++++++++++--------------
 arch/i386/mm/discontig.c                |   28 +++++++++++++++++-----------
 arch/i386/pci/numa.c                    |    7 ++++---
 include/asm-i386/mach-numaq/mach_apic.h |   10 ++++++----
 6 files changed, 51 insertions(+), 40 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/i386/kernel/mpparse.c linux-2.6.10-rc3-mm1-nom.i386/arch/i386/kernel/mpparse.c
--- linux-2.6.10-rc3-mm1/arch/i386/kernel/mpparse.c	2004-12-13 16:21:50.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.i386/arch/i386/kernel/mpparse.c	2004-12-16 11:41:35.000000000 -0800
@@ -309,8 +309,8 @@ static void __init MP_translation_info (
 		printk(KERN_ERR "MAX_MPC_ENTRY exceeded!\n");
 	else
 		translation_table[mpc_record] = m; /* stash this for later */
-	if (m->trans_quad+1 > numnodes)
-		numnodes = m->trans_quad+1;
+	if (m->trans_quad < MAX_NUMNODES && !node_online(m->trans_quad))
+		node_set_online(m->trans_quad);
 }
 
 /*
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/i386/kernel/numaq.c linux-2.6.10-rc3-mm1-nom.i386/arch/i386/kernel/numaq.c
--- linux-2.6.10-rc3-mm1/arch/i386/kernel/numaq.c	2004-12-13 16:21:50.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.i386/arch/i386/kernel/numaq.c	2004-12-16 11:44:44.000000000 -0800
@@ -40,8 +40,7 @@ extern long node_start_pfn[], node_end_p
  * Function: smp_dump_qct()
  *
  * Description: gets memory layout from the quad config table.  This
- * function also increments numnodes with the number of nodes (quads)
- * present.
+ * function also updates node_online_map with the nodes (quads) present.
  */
 static void __init smp_dump_qct(void)
 {
@@ -50,11 +49,10 @@ static void __init smp_dump_qct(void)
 	struct sys_cfg_data *scd =
 		(struct sys_cfg_data *)__va(SYS_CFG_DATA_PRIV_ADDR);
 
-	numnodes = 0;
-	for(node = 0; node < MAX_NUMNODES; node++) {
-		if(scd->quads_present31_0 & (1 << node)) {
+	nodes_clear(node_online_map);
+	for_each_node(node) {
+		if (scd->quads_present31_0 & (1 << node)) {
 			node_set_online(node);
-			numnodes++;
 			eq = &scd->eq[node];
 			/* Convert to pages */
 			node_start_pfn[node] = MB_TO_PAGES(
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/i386/kernel/srat.c linux-2.6.10-rc3-mm1-nom.i386/arch/i386/kernel/srat.c
--- linux-2.6.10-rc3-mm1/arch/i386/kernel/srat.c	2004-12-13 16:21:50.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.i386/arch/i386/kernel/srat.c	2004-12-16 17:12:38.000000000 -0800
@@ -232,18 +232,22 @@ static int __init acpi20_parse_srat(stru
 	 * a set of sequential node IDs starting at zero.  (ACPI doesn't seem
 	 * to specify the range of _PXM values.)
 	 */
-	numnodes = 0;		/* init total nodes in system */
+	/*
+	 * MCD - we no longer HAVE to number nodes sequentially.  PXM domain
+	 * numbers could go as high as 256, and MAX_NUMNODES for i386 is typically
+	 * 32, so we will continue numbering them in this manner until MAX_NUMNODES
+	 * approaches MAX_PXM_DOMAINS for i386.
+	 */
+	nodes_clear(node_online_map);
 	for (i = 0; i < MAX_PXM_DOMAINS; i++) {
 		if (BMAP_TEST(pxm_bitmap, i)) {
-			pxm_to_nid_map[i] = numnodes;
-			nid_to_pxm_map[numnodes] = i;
-			node_set_online(numnodes);
-			++numnodes;
+			nid = num_online_nodes();
+			pxm_to_nid_map[i] = nid;
+			nid_to_pxm_map[nid] = i;
+			node_set_online(nid);
 		}
 	}
-
-	if (numnodes == 0)
-		BUG();
+	BUG_ON(num_online_nodes() == 0);
 
 	/* set cnode id in memory chunk structure */
 	for (i = 0; i < num_memory_chunks; i++)
@@ -254,7 +258,7 @@ static int __init acpi20_parse_srat(stru
 		printk("%02X ", pxm_bitmap[i]);
 	}
 	printk("\n");
-	printk("Number of logical nodes in system = %d\n", numnodes);
+	printk("Number of logical nodes in system = %d\n", num_online_nodes());
 	printk("Number of memory chunks in system = %d\n", num_memory_chunks);
 
 	for (j = 0; j < num_memory_chunks; j++){
@@ -265,7 +269,7 @@ static int __init acpi20_parse_srat(stru
 	}
  
 	/*calculate node_start_pfn/node_end_pfn arrays*/
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		int been_here_before = 0;
 
 		for (j = 0; j < num_memory_chunks; j++){
@@ -397,7 +401,7 @@ static void __init get_zholes_init(void)
 	int first;
 	unsigned long end = 0;
 
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		first = 1;
 		for (c = 0; c < num_memory_chunks; c++){
 			if (node_memory_chunk[c].nid == nid) {
@@ -425,8 +429,8 @@ unsigned long * __init get_zholes_size(i
 		zholes_size_init++;
 		get_zholes_init();
 	}
-	if((nid >= numnodes) | (nid >= MAX_NUMNODES))
-		printk("%s: nid = %d is invalid. numnodes = %d",
-		       __FUNCTION__, nid, numnodes);
+	if (nid >= MAX_NUMNODES || !node_online(nid))
+		printk("%s: nid = %d is invalid/offline. num_online_nodes = %d",
+		       __FUNCTION__, nid, num_online_nodes());
 	return &zholes_size[nid * MAX_NR_ZONES];
 }
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/i386/mm/discontig.c linux-2.6.10-rc3-mm1-nom.i386/arch/i386/mm/discontig.c
--- linux-2.6.10-rc3-mm1/arch/i386/mm/discontig.c	2004-12-13 16:21:52.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.i386/arch/i386/mm/discontig.c	2004-12-16 12:00:52.000000000 -0800
@@ -42,7 +42,7 @@ bootmem_data_t node0_bdata;
  * numa interface - we expect the numa architecture specfic code to have
  *                  populated the following initialisation.
  *
- * 1) numnodes         - the total number of nodes configured in the system
+ * 1) node_online_map  - the map of all nodes configured (online) in the system
  * 2) physnode_map     - the mapping between a pfn and owning node
  * 3) node_start_pfn   - the starting page frame number for a node
  * 3) node_end_pfn     - the ending page fram number for a node
@@ -94,12 +94,12 @@ int __init get_memcfg_numa_flat(void)
 
 	/* Run the memory configuration and find the top of memory. */
 	find_max_pfn();
-	node_start_pfn[0]  = 0;
-	node_end_pfn[0]	  = max_pfn;
+	node_start_pfn[0] = 0;
+	node_end_pfn[0] = max_pfn;
 
         /* Indicate there is one node available. */
+	nodes_clear(node_online_map);
 	node_set_online(0);
-	numnodes = 1;
 	return 1;
 }
 
@@ -184,7 +184,9 @@ void __init remap_numa_kva(void)
 	unsigned long pfn;
 	int node;
 
-	for (node = 1; node < numnodes; ++node) {
+	for_each_online_node(node) {
+		if (node == 0)
+			continue;
 		for (pfn=0; pfn < node_remap_size[node]; pfn += PTRS_PER_PTE) {
 			vaddr = node_remap_start_vaddr[node]+(pfn<<PAGE_SHIFT);
 			set_pmd_pfn((ulong) vaddr, 
@@ -199,7 +201,9 @@ static unsigned long calculate_numa_rema
 	int nid;
 	unsigned long size, reserve_pages = 0;
 
-	for (nid = 1; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
+		if (nid == 0)
+			continue;
 		/* calculate the size of the mem_map needed in bytes */
 		size = (node_end_pfn[nid] - node_start_pfn[nid] + 1) 
 			* sizeof(struct page) + sizeof(pg_data_t);
@@ -249,7 +253,7 @@ unsigned long __init setup_memory(void)
 	get_memcfg_numa();
 
 	/* Fill in the physnode_map */
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		printk("Node: %d, start_pfn: %ld, end_pfn: %ld\n",
 				nid, node_start_pfn[nid], node_end_pfn[nid]);
 		printk("  Setting physnode_map array to node %d for pfns:\n  ",
@@ -286,7 +290,7 @@ unsigned long __init setup_memory(void)
 
 	printk("Low memory ends at vaddr %08lx\n",
 			(ulong) pfn_to_kaddr(max_low_pfn));
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		node_remap_start_vaddr[nid] = pfn_to_kaddr(
 			(highstart_pfn + reserve_pages) - node_remap_offset[nid]);
 		allocate_pgdat(nid);
@@ -298,7 +302,7 @@ unsigned long __init setup_memory(void)
 	printk("High memory starts at vaddr %08lx\n",
 			(ulong) pfn_to_kaddr(highstart_pfn));
 	vmalloc_earlyreserve = reserve_pages * PAGE_SIZE;
-	for (nid = 0; nid < numnodes; nid++)
+	for_each_online_node(nid)
 		find_max_pfn_node(nid);
 
 	NODE_DATA(0)->bdata = &node0_bdata;
@@ -379,14 +383,16 @@ void __init zone_sizes_init(void)
 	 * Clobber node 0's links and NULL out pgdat_list before starting.
 	 */
 	pgdat_list = NULL;
-	for (nid = numnodes - 1; nid >= 0; nid--) {       
+	for (nid = MAX_NUMNODES - 1; nid >= 0; nid--) {
+		if (!node_online(nid))
+			continue;
 		if (nid)
 			memset(NODE_DATA(nid), 0, sizeof(pg_data_t));
 		NODE_DATA(nid)->pgdat_next = pgdat_list;
 		pgdat_list = NODE_DATA(nid);
 	}
 
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
 		unsigned long *zholes_size;
 		unsigned int max_dma;
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/i386/pci/numa.c linux-2.6.10-rc3-mm1-nom.i386/arch/i386/pci/numa.c
--- linux-2.6.10-rc3-mm1/arch/i386/pci/numa.c	2004-12-13 16:21:53.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.i386/arch/i386/pci/numa.c	2004-12-16 12:04:17.000000000 -0800
@@ -112,14 +112,15 @@ static int __init pci_numa_init(void)
 		return 0;
 
 	pci_root_bus = pcibios_scan_root(0);
-	if (numnodes > 1) {
-		for (quad = 1; quad < numnodes; ++quad) {
+	if (num_online_nodes() > 1)
+		for_each_online_node(quad) {
+			if (quad == 0)
+				continue;
 			printk("Scanning PCI bus %d for quad %d\n", 
 				QUADLOCAL2BUS(quad,0), quad);
 			pci_scan_bus(QUADLOCAL2BUS(quad,0), 
 				&pci_root_ops, NULL);
 		}
-	}
 	return 0;
 }
 
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-i386/mach-numaq/mach_apic.h linux-2.6.10-rc3-mm1-nom.i386/include/asm-i386/mach-numaq/mach_apic.h
--- linux-2.6.10-rc3-mm1/include/asm-i386/mach-numaq/mach_apic.h	2004-12-13 16:24:09.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.i386/include/asm-i386/mach-numaq/mach_apic.h	2004-12-16 12:06:26.000000000 -0800
@@ -112,13 +112,15 @@ static inline int mpc_apic_id(struct mpc
 
 static inline void setup_portio_remap(void)
 {
-	if (numnodes <= 1)
+	int num_quads = num_online_nodes();
+
+	if (num_quads <= 1)
        		return;
 
-	printk("Remapping cross-quad port I/O for %d quads\n", numnodes);
-	xquad_portio = ioremap (XQUAD_PORTIO_BASE, numnodes*XQUAD_PORTIO_QUAD);
+	printk("Remapping cross-quad port I/O for %d quads\n", num_quads);
+	xquad_portio = ioremap(XQUAD_PORTIO_BASE, num_quads*XQUAD_PORTIO_QUAD);
 	printk("xquad_portio vaddr 0x%08lx, len %08lx\n",
-		(u_long) xquad_portio, (u_long) numnodes*XQUAD_PORTIO_QUAD);
+		(u_long) xquad_portio, (u_long) num_quads*XQUAD_PORTIO_QUAD);
 }
 
 static inline int check_phys_apicid_present(int boot_cpu_physical_apicid)



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (2 preceding siblings ...)
  2004-12-23 22:39 ` [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386 Matthew Dobson
@ 2004-12-23 22:40 ` Matthew Dobson
  2004-12-23 22:41 ` [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r Matthew Dobson
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:40 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

4/10 - Replace numnodes with node_online_map for ia64

[mcd@arrakis node_online_map]$ diffstat arch-ia64.patch
 arch/ia64/kernel/acpi.c                 |   22 +++++-----
 arch/ia64/kernel/topology.c             |    3 -
 arch/ia64/mm/discontig.c                |   70 ++++++++++++++++++--------------
 arch/ia64/sn/kernel/io_init.c           |    2
 arch/ia64/sn/kernel/setup.c             |   16 +++----
 arch/ia64/sn/kernel/sn2/prominfo_proc.c |   13 +++--
 arch/ia64/sn/kernel/sn2/sn2_smp.c       |   14 ++----
 include/asm-ia64/mmzone.h               |   11 ++---
 include/asm-ia64/nodedata.h             |    2
 include/asm-ia64/numa.h                 |    2
 10 files changed, 85 insertions(+), 70 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/kernel/acpi.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/kernel/acpi.c
--- linux-2.6.10-rc3-mm1/arch/ia64/kernel/acpi.c	2004-12-13 16:22:41.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/kernel/acpi.c	2004-12-16 13:12:10.000000000 -0800
@@ -445,16 +445,20 @@ acpi_numa_arch_fixup (void)
 		return;
 	}
 
+	/*
+	 * MCD - This can probably be dropped now.  No need for pxm ID to node ID 
+	 * mapping with sparse node numbering iff MAX_PXM_DOMAINS <= MAX_NUMNODES.
+	 */
 	/* calculate total number of nodes in system from PXM bitmap */
-	numnodes = 0;		/* init total nodes in system */
-
 	memset(pxm_to_nid_map, -1, sizeof(pxm_to_nid_map));
 	memset(nid_to_pxm_map, -1, sizeof(nid_to_pxm_map));
+	nodes_clear(node_online_map);
 	for (i = 0; i < MAX_PXM_DOMAINS; i++) {
 		if (pxm_bit_test(i)) {
-			pxm_to_nid_map[i] = numnodes;
-			node_set_online(numnodes);
-			nid_to_pxm_map[numnodes++] = i;
+			int nid = num_online_nodes();
+			pxm_to_nid_map[i] = nid;
+			nid_to_pxm_map[nid] = i;
+			node_set_online(nid);
 		}
 	}
 
@@ -463,7 +467,7 @@ acpi_numa_arch_fixup (void)
 		node_memblk[i].nid = pxm_to_nid_map[node_memblk[i].nid];
 
 	/* assign memory bank numbers for each chunk on each node */
-	for (i = 0; i < numnodes; i++) {
+	for_each_online_node(i) {
 		int bank;
 
 		bank = 0;
@@ -476,7 +480,7 @@ acpi_numa_arch_fixup (void)
 	for (i = 0; i < srat_num_cpus; i++)
 		node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid];
 
-	printk(KERN_INFO "Number of logical nodes in system = %d\n", numnodes);
+	printk(KERN_INFO "Number of logical nodes in system = %d\n", num_online_nodes());
 	printk(KERN_INFO "Number of memory chunks in system = %d\n", num_node_memblks);
 
 	if (!slit_table) return;
@@ -496,8 +500,8 @@ acpi_numa_arch_fixup (void)
 
 #ifdef SLIT_DEBUG
 	printk("ACPI 2.0 SLIT locality table:\n");
-	for (i = 0; i < numnodes; i++) {
-		for (j = 0; j < numnodes; j++)
+	for_each_online_node(i) {
+		for_each_online_node(j)
 			printk("%03d ", node_distance(i,j));
 		printk("\n");
 	}
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/kernel/topology.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/kernel/topology.c
--- linux-2.6.10-rc3-mm1/arch/ia64/kernel/topology.c	2004-12-13 16:22:42.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/kernel/topology.c	2004-12-16 13:15:05.000000000 -0800
@@ -68,7 +68,8 @@ static int __init topology_init(void)
 	}
 	memset(sysfs_nodes, 0, sizeof(struct node) * MAX_NUMNODES);
 
-	for (i = 0; i < numnodes; i++)
+	/* MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? */
+	for_each_online_node(i)
 		if ((err = register_node(&sysfs_nodes[i], i, 0)))
 			goto out;
 #endif
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/mm/discontig.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/mm/discontig.c
--- linux-2.6.10-rc3-mm1/arch/ia64/mm/discontig.c	2004-12-13 16:22:44.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/mm/discontig.c	2004-12-16 14:06:06.000000000 -0800
@@ -39,7 +39,7 @@ struct early_node_data {
 	unsigned long max_pfn;
 };
 
-static struct early_node_data mem_data[NR_NODES] __initdata;
+static struct early_node_data mem_data[MAX_NUMNODES] __initdata;
 
 /**
  * reassign_cpu_only_nodes - called from find_memory to move CPU-only nodes to a memory node
@@ -56,9 +56,9 @@ static void __init reassign_cpu_only_nod
 	struct node_memblk_s *p;
 	int i, j, k, nnode, nid, cpu, cpunid, pxm;
 	u8 cslit, slit;
-	static DECLARE_BITMAP(nodes_with_mem, NR_NODES) __initdata;
+	static DECLARE_BITMAP(nodes_with_mem, MAX_NUMNODES) __initdata;
 	static u8 numa_slit_fix[MAX_NUMNODES * MAX_NUMNODES] __initdata;
-	static int node_flip[NR_NODES] __initdata;
+	static int node_flip[MAX_NUMNODES] __initdata;
 	static int old_nid_map[NR_CPUS] __initdata;
 
 	for (nnode = 0, p = &node_memblk[0]; p < &node_memblk[num_node_memblks]; p++)
@@ -70,7 +70,7 @@ static void __init reassign_cpu_only_nod
 	/*
 	 * All nids with memory.
 	 */
-	if (nnode == numnodes)
+	if (nnode == num_online_nodes())
 		return;
 
 	/*
@@ -79,10 +79,17 @@ static void __init reassign_cpu_only_nod
 	 * For reassigned CPU nodes a nid can't be arrived at
 	 * until after this loop because the target nid's new
 	 * identity might not have been established yet. So
-	 * new nid values are fabricated above numnodes and
+	 * new nid values are fabricated above num_online_nodes() and
 	 * mapped back later to their true value.
 	 */
-	for (nid = 0, i = 0; i < numnodes; i++)  {
+	/* MCD - This code is a bit complicated, but may be unnecessary now.
+	 * We can now handle much more interesting node-numbering.
+	 * The old requirement that 0 <= nid <= numnodes <= MAX_NUMNODES
+	 * and that there be no holes in the numbering 0..numnodes
+	 * has become simply 0 <= nid <= MAX_NUMNODES.
+	 */
+	nid = 0;
+	for_each_online_node(i)  {
 		if (test_bit(i, (void *) nodes_with_mem)) {
 			/*
 			 * Save original nid value for numa_slit
@@ -102,7 +109,7 @@ static void __init reassign_cpu_only_nod
 			cpunid = nid;
 			nid++;
 		} else
-			cpunid = numnodes;
+			cpunid = MAX_NUMNODES;
 
 		for (cpu = 0; cpu < NR_CPUS; cpu++)
 			if (node_cpuid[cpu].nid == i) {
@@ -110,7 +117,7 @@ static void __init reassign_cpu_only_nod
 				 * For nodes not being reassigned just
 				 * fix the cpu's nid and reverse pxm map
 				 */
-				if (cpunid < numnodes) {
+				if (cpunid < MAX_NUMNODES) {
 					pxm = nid_to_pxm_map[i];
 					pxm_to_nid_map[pxm] =
 					          node_cpuid[cpu].nid = cpunid;
@@ -120,18 +127,21 @@ static void __init reassign_cpu_only_nod
 				/*
 				 * For nodes being reassigned, find best node by
 				 * numa_slit information and then make a temporary
-				 * nid value based on current nid and numnodes.
+				 * nid value based on current nid and num_online_nodes().
 				 */
-				for (slit = 0xff, k = numnodes + numnodes, j = 0; j < numnodes; j++)
+				slit = 0xff;
+				k = 2*num_online_nodes();
+				for_each_online_node(j) {
 					if (i == j)
 						continue;
 					else if (test_bit(j, (void *) nodes_with_mem)) {
-						cslit = numa_slit[i * numnodes + j];
+						cslit = numa_slit[i * num_online_nodes() + j];
 						if (cslit < slit) {
-							k = numnodes + j;
+							k = num_online_nodes() + j;
 							slit = cslit;
 						}
 					}
+				}
 
 				/* save old nid map so we can update the pxm */
 				old_nid_map[cpu] = node_cpuid[cpu].nid;
@@ -143,12 +153,12 @@ static void __init reassign_cpu_only_nod
 	 * Fixup temporary nid values for CPU-only nodes.
 	 */
 	for (cpu = 0; cpu < NR_CPUS; cpu++)
-		if (node_cpuid[cpu].nid == (numnodes + numnodes)) {
+		if (node_cpuid[cpu].nid == (2*num_online_nodes())) {
 			pxm = nid_to_pxm_map[old_nid_map[cpu]];
 			pxm_to_nid_map[pxm] = node_cpuid[cpu].nid = nnode - 1;
 		} else {
 			for (i = 0; i < nnode; i++) {
-				if (node_flip[i] != (node_cpuid[cpu].nid - numnodes))
+				if (node_flip[i] != (node_cpuid[cpu].nid - num_online_nodes()))
 					continue;
 
 				pxm = nid_to_pxm_map[old_nid_map[cpu]];
@@ -164,14 +174,13 @@ static void __init reassign_cpu_only_nod
 	for (i = 0; i < nnode; i++)
 		for (j = 0; j < nnode; j++)
 			numa_slit_fix[i * nnode + j] =
-				numa_slit[node_flip[i] * numnodes + node_flip[j]];
+				numa_slit[node_flip[i] * num_online_nodes() + node_flip[j]];
 
 	memcpy(numa_slit, numa_slit_fix, sizeof (numa_slit));
 
-	for (i = nnode; i < numnodes; i++)
-		node_set_offline(i);
-
-	numnodes = nnode;
+	nodes_clear(node_online_map);
+	for (i = 0; i < nnode; i++)
+		node_set_online(i);
 
 	return;
 }
@@ -370,7 +379,7 @@ static void __init reserve_pernode_space
 	struct bootmem_data *bdp;
 	int node;
 
-	for (node = 0; node < numnodes; node++) {
+	for_each_online(node) {
 		pg_data_t *pdp = mem_data[node].pgdat;
 
 		bdp = pdp->bdata;
@@ -399,13 +408,13 @@ static void __init reserve_pernode_space
 static void __init initialize_pernode_data(void)
 {
 	int cpu, node;
-	pg_data_t *pgdat_list[NR_NODES];
+	pg_data_t *pgdat_list[MAX_NUMNODES];
 
-	for (node = 0; node < numnodes; node++)
+	for_each_online_node(node)
 		pgdat_list[node] = mem_data[node].pgdat;
 
 	/* Copy the pg_data_t list to each node and init the node field */
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		memcpy(mem_data[node].node_data->pg_data_ptrs, pgdat_list,
 		       sizeof(pgdat_list));
 	}
@@ -429,15 +438,15 @@ void __init find_memory(void)
 
 	reserve_memory();
 
-	if (numnodes == 0) {
+	if (num_online_nodes() == 0) {
 		printk(KERN_ERR "node info missing!\n");
-		numnodes = 1;
+		node_set_online(0);
 	}
 
 	min_low_pfn = -1;
 	max_low_pfn = 0;
 
-	if (numnodes > 1)
+	if (num_online_nodes() > 1)
 		reassign_cpu_only_nodes();
 
 	/* These actually end up getting called by call_pernode_memory() */
@@ -448,10 +457,13 @@ void __init find_memory(void)
 	 * Initialize the boot memory maps in reverse order since that's
 	 * what the bootmem allocator expects
 	 */
-	for (node = numnodes - 1; node >= 0; node--) {
+	for (node = MAX_NUMNODES - 1; node >= 0; node--) {
 		unsigned long pernode, pernodesize, map;
 		struct bootmem_data *bdp;
 
+		if (!node_online(node))
+			continue;
+
 		bdp = &mem_data[node].bootmem_data;
 		pernode = mem_data[node].pernode_addr;
 		pernodesize = mem_data[node].pernode_size;
@@ -638,12 +650,12 @@ void __init paging_init(void)
 	max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT;
 
 	/* so min() will work in count_node_pages */
-	for (node = 0; node < numnodes; node++)
+	for_each_online_node(node)
 		mem_data[node].min_pfn = ~0UL;
 
 	efi_memmap_walk(filter_rsvd_memory, count_node_pages);
 
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		memset(zones_size, 0, sizeof(zones_size));
 		memset(zholes_size, 0, sizeof(zholes_size));
 
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/io_init.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/io_init.c
--- linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/io_init.c	2004-12-13 16:22:43.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/io_init.c	2004-12-14 11:57:17.000000000 -0800
@@ -382,7 +382,7 @@ void hubdev_init_node(nodepda_t * npda, 
 
 	struct hubdev_info *hubdev_info;
 
-	if (node >= numnodes)	/* Headless/memless IO nodes */
+	if (node >= num_online_nodes())	/* Headless/memless IO nodes */
 		hubdev_info =
 		    (struct hubdev_info *)alloc_bootmem_node(NODE_DATA(0),
 							     sizeof(struct
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/setup.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/setup.c
--- linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/setup.c	2004-12-13 16:22:43.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/setup.c	2004-12-16 14:10:54.000000000 -0800
@@ -224,7 +224,7 @@ static void __init sn_check_for_wars(voi
 {
 	int cnode;
 
-	for (cnode = 0; cnode < numnodes; cnode++)
+	for_each_online_node(cnode)
 		if (is_shub_1_1(cnodeid_to_nasid(cnode)))
 			shub_1_1_found = 1;
 }
@@ -346,17 +346,17 @@ void __init sn_init_pdas(char **cmdline_
 
 	memset(pda->cnodeid_to_nasid_table, -1,
 	       sizeof(pda->cnodeid_to_nasid_table));
-	for (cnode = 0; cnode < numnodes; cnode++)
+	for_each_online_node(cnode)
 		pda->cnodeid_to_nasid_table[cnode] =
 		    pxm_to_nasid(nid_to_pxm_map[cnode]);
 
-	numionodes = numnodes;
+	numionodes = num_online_nodes();
 	scan_for_ionodes();
 
 	/*
 	 * Allocate & initalize the nodepda for each node.
 	 */
-	for (cnode = 0; cnode < numnodes; cnode++) {
+	for_each_online_node(cnode) {
 		nodepdaindr[cnode] =
 		    alloc_bootmem_node(NODE_DATA(cnode), sizeof(nodepda_t));
 		memset(nodepdaindr[cnode], 0, sizeof(nodepda_t));
@@ -367,7 +367,7 @@ void __init sn_init_pdas(char **cmdline_
 	/*
 	 * Allocate & initialize nodepda for TIOs.  For now, put them on node 0.
 	 */
-	for (cnode = numnodes; cnode < numionodes; cnode++) {
+	for (cnode = num_online_nodes(); cnode < numionodes; cnode++) {
 		nodepdaindr[cnode] =
 		    alloc_bootmem_node(NODE_DATA(0), sizeof(nodepda_t));
 		memset(nodepdaindr[cnode], 0, sizeof(nodepda_t));
@@ -385,7 +385,7 @@ void __init sn_init_pdas(char **cmdline_
 	 * The following routine actually sets up the hubinfo struct
 	 * in nodepda.
 	 */
-	for (cnode = 0; cnode < numnodes; cnode++) {
+	for_each_online_node(cnode) {
 		bte_init_node(nodepdaindr[cnode], cnode);
 	}
 
@@ -431,7 +431,7 @@ void __init sn_cpu_init(void)
 	if (ia64_sn_get_sapic_info(cpuphyid, &nasid, &subnode, &slice))
 		BUG();
 
-	for (i=0; i < NR_NODES; i++) {
+	for (i=0; i < MAX_NUMNODES; i++) {
 		if (nodepdaindr[i]) {
 			nodepdaindr[i]->phys_cpuid[cpuid].nasid = nasid;
 			nodepdaindr[i]->phys_cpuid[cpuid].slice = slice;
@@ -484,7 +484,7 @@ void __init sn_cpu_init(void)
 		int buddy_nasid;
 		buddy_nasid =
 		    cnodeid_to_nasid(numa_node_id() ==
-				     numnodes - 1 ? 0 : numa_node_id() + 1);
+				     num_online_nodes() - 1 ? 0 : numa_node_id() + 1);
 		pda->pio_shub_war_cam_addr =
 		    (volatile unsigned long *)GLOBAL_MMR_ADDR(nasid,
 							      SH_PI_CAM_CONTROL);
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/sn2/prominfo_proc.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/sn2/prominfo_proc.c
--- linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/sn2/prominfo_proc.c	2004-12-13 16:22:43.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/sn2/prominfo_proc.c	2004-12-16 14:13:31.000000000 -0800
@@ -233,14 +233,13 @@ int __init prominfo_init(void)
 	if (!ia64_platform_is("sn2"))
 		return 0;
 
-	proc_entries = kmalloc(numnodes * sizeof(struct proc_dir_entry *),
+	proc_entries = kmalloc(num_online_nodes() * sizeof(struct proc_dir_entry *),
 			       GFP_KERNEL);
 
 	sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL);
 
-	for (cnodeid = 0, entp = proc_entries;
-	     cnodeid < numnodes;
-	     cnodeid++, entp++) {
+	entp = proc_entries;
+	for_each_online_node(cnodeid) {
 		sprintf(name, "node%d", cnodeid);
 		*entp = proc_mkdir(name, sgi_prominfo_entry);
 		nasid = cnodeid_to_nasid(cnodeid);
@@ -254,6 +253,7 @@ int __init prominfo_init(void)
 			(void *)nasid);
 		if (p)
 			p->owner = THIS_MODULE;
+		entp++;
 	}
 
 	return 0;
@@ -265,12 +265,13 @@ void __exit prominfo_exit(void)
 	unsigned cnodeid;
 	char name[NODE_NAME_LEN];
 
-	for (cnodeid = 0, entp = proc_entries;
-	     cnodeid < numnodes; cnodeid++, entp++) {
+	entp = proc_entries;
+	for (cnodeid) {
 		remove_proc_entry("fit", *entp);
 		remove_proc_entry("version", *entp);
 		sprintf(name, "node%d", cnodeid);
 		remove_proc_entry(name, sgi_prominfo_entry);
+		entp++;
 	}
 	remove_proc_entry("sgi_prominfo", NULL);
 	kfree(proc_entries);
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/sn2/sn2_smp.c linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/sn2/sn2_smp.c
--- linux-2.6.10-rc3-mm1/arch/ia64/sn/kernel/sn2/sn2_smp.c	2004-12-13 16:22:43.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/arch/ia64/sn/kernel/sn2/sn2_smp.c	2004-12-16 14:19:59.000000000 -0800
@@ -92,16 +92,15 @@ sn2_global_tlb_purge(unsigned long start
 	volatile unsigned long *ptc0, *ptc1;
 	unsigned long flags = 0, data0, data1;
 	struct mm_struct *mm = current->active_mm;
-	short nasids[NR_NODES], nix;
-	DECLARE_BITMAP(nodes_flushed, NR_NODES);
-
-	bitmap_zero(nodes_flushed, NR_NODES);
+	short nasids[MAX_NUMNODES], nix;
+	nodemask_t nodes_flushed;
 
+	nodes_clear(nodes_flushed);
 	i = 0;
 
 	for_each_cpu_mask(cpu, mm->cpu_vm_mask) {
 		cnode = cpu_to_node(cpu);
-		__set_bit(cnode, nodes_flushed);
+		node_set(cnode, nodes_flushed);
 		lcpu = cpu;
 		i++;
 	}
@@ -125,8 +124,7 @@ sn2_global_tlb_purge(unsigned long start
 	}
 
 	nix = 0;
-	for (cnode = find_first_bit(&nodes_flushed, NR_NODES); cnode < NR_NODES;
-	     cnode = find_next_bit(&nodes_flushed, NR_NODES, ++cnode))
+	for_each_node_mask(cnode, nodes_flushed)
 		nasids[nix++] = cnodeid_to_nasid(cnode);
 
 	data0 = (1UL << SH_PTC_0_A_SHFT) |
@@ -194,7 +192,7 @@ void sn2_ptc_deadlock_recovery(unsigned 
 
 	mycnode = numa_node_id();
 
-	for (cnode = 0; cnode < numnodes; cnode++) {
+	for_each_online_node(cnode) {
 		if (is_headless_node(cnode) || cnode == mycnode)
 			continue;
 		nasid = cnodeid_to_nasid(cnode);
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-ia64/mmzone.h linux-2.6.10-rc3-mm1-nom.ia64/include/asm-ia64/mmzone.h
--- linux-2.6.10-rc3-mm1/include/asm-ia64/mmzone.h	2004-12-13 16:23:42.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/include/asm-ia64/mmzone.h	2004-12-16 13:36:02.000000000 -0800
@@ -11,7 +11,7 @@
 #ifndef _ASM_IA64_MMZONE_H
 #define _ASM_IA64_MMZONE_H
 
-#include <linux/config.h>
+#include <linux/numa.h>
 #include <asm/page.h>
 #include <asm/meminit.h>
 
@@ -19,15 +19,14 @@
 
 #ifdef CONFIG_IA64_DIG /* DIG systems are small */
 # define MAX_PHYSNODE_ID	8
-# define NR_NODES		8
-# define NR_NODE_MEMBLKS	(NR_NODES * 8)
+# define NR_NODE_MEMBLKS	(MAX_NUMNODES * 8)
 #else /* sn2 is the biggest case, so we use that if !DIG */
 # define MAX_PHYSNODE_ID	2048
-# define NR_NODES		256
-# define NR_NODE_MEMBLKS	(NR_NODES * 4)
+# define NR_NODE_MEMBLKS	(MAX_NUMNODES * 4)
 #endif
 
 #else /* CONFIG_DISCONTIGMEM */
-# define NR_NODE_MEMBLKS	4
+# define NR_NODE_MEMBLKS	(MAX_NUMNODES * 4)
 #endif /* CONFIG_DISCONTIGMEM */
+
 #endif /* _ASM_IA64_MMZONE_H */
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-ia64/nodedata.h linux-2.6.10-rc3-mm1-nom.ia64/include/asm-ia64/nodedata.h
--- linux-2.6.10-rc3-mm1/include/asm-ia64/nodedata.h	2004-12-13 16:23:42.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/include/asm-ia64/nodedata.h	2004-12-16 13:23:42.000000000 -0800
@@ -27,7 +27,7 @@ struct pglist_data;
 struct ia64_node_data {
 	short			active_cpu_count;
 	short			node;
-	struct pglist_data	*pg_data_ptrs[NR_NODES];
+	struct pglist_data	*pg_data_ptrs[MAX_NUMNODES];
 };
 
 
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-ia64/numa.h linux-2.6.10-rc3-mm1-nom.ia64/include/asm-ia64/numa.h
--- linux-2.6.10-rc3-mm1/include/asm-ia64/numa.h	2004-12-13 16:23:41.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ia64/include/asm-ia64/numa.h	2004-12-14 11:57:17.000000000 -0800
@@ -59,7 +59,7 @@ extern struct node_cpuid_s node_cpuid[NR
  */
 
 extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES];
-#define node_distance(from,to) (numa_slit[(from) * numnodes + (to)])
+#define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)])
 
 extern int paddr_to_nid(unsigned long paddr);
 



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (3 preceding siblings ...)
  2004-12-23 22:40 ` [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64 Matthew Dobson
@ 2004-12-23 22:41 ` Matthew Dobson
  2004-12-23 22:42 ` [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips Matthew Dobson
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:41 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

5/10 - Replace numnodes with node_online_map for m32r

[mcd@arrakis node_online_map]$ diffstat arch-m32r.patch
 kernel/setup.c |    4 +++-
 mm/discontig.c |    6 +++---
 mm/init.c      |    6 +++---
 3 files changed, 9 insertions(+), 7 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/m32r/kernel/setup.c linux-2.6.10-rc3-mm1-nom.m32r/arch/m32r/kernel/setup.c
--- linux-2.6.10-rc3-mm1/arch/m32r/kernel/setup.c	2004-12-13 16:23:17.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.m32r/arch/m32r/kernel/setup.c	2004-12-15 15:50:49.000000000 -0800
@@ -251,7 +251,9 @@ void __init setup_arch(char **cmdline_p)
 #endif
 
 #ifdef CONFIG_DISCONTIGMEM
-	numnodes = 2;
+	nodes_clear(node_online_map);
+	node_set_online(0);
+	node_set_online(1);
 #endif	/* CONFIG_DISCONTIGMEM */
 
 	init_mm.start_code = (unsigned long) _text;
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/m32r/mm/discontig.c linux-2.6.10-rc3-mm1-nom.m32r/arch/m32r/mm/discontig.c
--- linux-2.6.10-rc3-mm1/arch/m32r/mm/discontig.c	2004-12-13 16:23:19.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.m32r/arch/m32r/mm/discontig.c	2004-12-14 11:57:17.000000000 -0800
@@ -75,7 +75,7 @@ unsigned long __init setup_memory(void)
 
 	mem_prof_init();
 
-	for (nid = 0 ; nid < numnodes ; nid++) {
+	for_each_online_node(nid) {
 		mp = &mem_prof[nid];
 		NODE_DATA(nid)=(pg_data_t *)&m32r_node_data[nid];
 		NODE_DATA(nid)->bdata = &node_bdata[nid];
@@ -135,12 +135,12 @@ unsigned long __init zone_sizes_init(voi
 	mem_prof_t *mp;
 
 	pgdat_list = NULL;
-	for (nid = numnodes - 1 ; nid >= 0 ; nid--) {
+	for (nid = num_online_nodes() - 1 ; nid >= 0 ; nid--) {
 		NODE_DATA(nid)->pgdat_next = pgdat_list;
 		pgdat_list = NODE_DATA(nid);
 	}
 
-	for (nid = 0 ; nid < numnodes ; nid++) {
+	for_each_online_node(nid) {
 		mp = &mem_prof[nid];
 		for (i = 0 ; i < MAX_NR_ZONES ; i++) {
 			zones_size[i] = 0;
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/m32r/mm/init.c linux-2.6.10-rc3-mm1-nom.m32r/arch/m32r/mm/init.c
--- linux-2.6.10-rc3-mm1/arch/m32r/mm/init.c	2004-12-13 16:23:19.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.m32r/arch/m32r/mm/init.c	2004-12-14 11:57:17.000000000 -0800
@@ -153,7 +153,7 @@ int __init reservedpages_count(void)
 	int reservedpages, nid, i;
 
 	reservedpages = 0;
-	for (nid = 0 ; nid < numnodes ; nid++)
+	for_each_online_node(nid)
 		for (i = 0 ; i < MAX_LOW_PFN(nid) - START_PFN(nid) ; i++)
 			if (PageReserved(NODE_DATA(nid)->node_mem_map + i))
 				reservedpages++;
@@ -174,7 +174,7 @@ void __init mem_init(void)
 #endif
 
 	num_physpages = 0;
-	for (nid = 0 ; nid < numnodes ; nid++)
+	for_each_online_node(nid)
 		num_physpages += MAX_LOW_PFN(nid) - START_PFN(nid) + 1;
 
 	num_physpages -= hole_pages;
@@ -193,7 +193,7 @@ void __init mem_init(void)
 	memset(empty_zero_page, 0, PAGE_SIZE);
 
 	/* this will put all low memory onto the freelists */
-	for (nid = 0 ; nid < numnodes ; nid++)
+	for_each_online_node(nid)
 		totalram_pages += free_all_bootmem_node(NODE_DATA(nid));
 
 	reservedpages = reservedpages_count() - hole_pages;



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (4 preceding siblings ...)
  2004-12-23 22:41 ` [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r Matthew Dobson
@ 2004-12-23 22:42 ` Matthew Dobson
  2004-12-23 22:44 ` [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc Matthew Dobson
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:42 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

6/10 - Replace numnodes with node_online_map for mips

[mcd@arrakis node_online_map]$ diffstat arch-mips.patch
 arch/mips/sgi-ip27/ip27-init.c   |    1 -
 arch/mips/sgi-ip27/ip27-klnuma.c |   28 +++++++++++-----------------
 arch/mips/sgi-ip27/ip27-memory.c |   32 ++++++++++++++++----------------
 arch/mips/sgi-ip27/ip27-nmi.c    |    8 ++++----
 arch/mips/sgi-ip27/ip27-reset.c  |    4 ++--
 arch/mips/sgi-ip27/ip27-smp.c    |   14 +++++++++-----
 include/asm-mips/sn/sn_private.h |    4 ++--
 7 files changed, 44 insertions(+), 47 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-init.c linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-init.c
--- linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-init.c	2004-12-13 16:22:15.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-init.c	2004-12-15 14:52:12.000000000 -0800
@@ -10,7 +10,6 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/sched.h>
-#include <linux/mmzone.h>	/* for numnodes */
 #include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/cpumask.h>
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-klnuma.c linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-klnuma.c
--- linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-klnuma.c	2004-12-13 16:22:15.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-klnuma.c	2004-12-15 15:03:18.000000000 -0800
@@ -27,33 +27,25 @@ static cpumask_t ktext_repmask;
  * kernel.  For example, we should never put a copy on a headless node,
  * and we should respect the topology of the machine.
  */
-void __init setup_replication_mask(int maxnodes)
+void __init setup_replication_mask()
 {
-	static int 	numa_kernel_replication_ratio;
 	cnodeid_t	cnode;
 
 	/* Set only the master cnode's bit.  The master cnode is always 0. */
 	cpus_clear(ktext_repmask);
 	cpu_set(0, ktext_repmask);
 
-	numa_kernel_replication_ratio = 0;
 #ifdef CONFIG_REPLICATE_KTEXT
 #ifndef CONFIG_MAPPED_KERNEL
 #error Kernel replication works with mapped kernel support. No calias support.
 #endif
-	numa_kernel_replication_ratio = 1;
-#endif
-
-	for (cnode = 1; cnode < numnodes; cnode++) {
-		/* See if this node should get a copy of the kernel */
-		if (numa_kernel_replication_ratio &&
-		    !(cnode % numa_kernel_replication_ratio)) {
-
-			/* Advertise that we have a copy of the kernel */
-			cpu_set(cnode, ktext_repmask);
-		}
+	for_each_online_node(cnode) {
+		if (cnode == 0)
+			continue;
+		/* Advertise that we have a copy of the kernel */
+		cpu_set(cnode, ktext_repmask);
 	}
-
+#endif
 	/* Set up a GDA pointer to the replication mask. */
 	GDA->g_ktext_repmask = &ktext_repmask;
 }
@@ -92,7 +84,7 @@ static __init void copy_kernel(nasid_t d
 	memcpy((void *)dest_kern_start, (void *)source_start, kern_size);
 }
 
-void __init replicate_kernel_text(int maxnodes)
+void __init replicate_kernel_text()
 {
 	cnodeid_t cnode;
 	nasid_t client_nasid;
@@ -103,7 +95,9 @@ void __init replicate_kernel_text(int ma
 	/* Record where the master node should get its kernel text */
 	set_ktext_source(master_nasid, master_nasid);
 
-	for (cnode = 1; cnode < maxnodes; cnode++) {
+	for_each_online_node(cnode) {
+		if (cnode == 0)
+			continue;
 		client_nasid = COMPACT_TO_NASID_NODEID(cnode);
 
 		/* Check if this node should get a copy of the kernel */
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-memory.c linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-memory.c
--- linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-memory.c	2004-12-13 16:22:15.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-memory.c	2004-12-15 15:12:58.000000000 -0800
@@ -59,12 +59,12 @@ static hubreg_t get_region(cnodeid_t cno
 
 static hubreg_t region_mask;
 
-static void gen_region_mask(hubreg_t *region_mask, int maxnodes)
+static void gen_region_mask(hubreg_t *region_mask)
 {
 	cnodeid_t cnode;
 
 	(*region_mask) = 0;
-	for (cnode = 0; cnode < maxnodes; cnode++) {
+	for_each_online_node(cnode) {
 		(*region_mask) |= 1ULL << get_region(cnode);
 	}
 }
@@ -120,7 +120,7 @@ static int __init compute_node_distance(
 	int port;
 
 	/* Figure out which routers nodes in question are connected to */
-	for (cnode = 0; cnode < numnodes; cnode++) {
+	for_each_online_node(cnode) {
 		nasid = COMPACT_TO_NASID_NODEID(cnode);
 
 		if (nasid == -1) continue;
@@ -187,9 +187,9 @@ static void __init init_topology_matrix(
 		for (col = 0; col < MAX_COMPACT_NODES; col++)
 			__node_distances[row][col] = -1;
 
-	for (row = 0; row < numnodes; row++) {
+	for_each_online_node(row) {
 		nasid = COMPACT_TO_NASID_NODEID(row);
-		for (col = 0; col < numnodes; col++) {
+		for_each_online_node(col) {
 			nasid2 = COMPACT_TO_NASID_NODEID(col);
 			__node_distances[row][col] =
 				compute_node_distance(nasid, nasid2);
@@ -210,17 +210,17 @@ static void __init dump_topology(void)
 	printk("************** Topology ********************\n");
 
 	printk("    ");
-	for (col = 0; col < numnodes; col++)
+	for_each_online_node(col)
 		printk("%02d ", col);
 	printk("\n");
-	for (row = 0; row < numnodes; row++) {
+	for_each_online_node(row) {
 		printk("%02d  ", row);
-		for (col = 0; col < numnodes; col++)
+		for_each_online_node(col)
 			printk("%2d ", node_distance(row, col));
 		printk("\n");
 	}
 
-	for (cnode = 0; cnode < numnodes; cnode++) {
+	for_each_online_node(cnode) {
 		nasid = COMPACT_TO_NASID_NODEID(cnode);
 
 		if (nasid == -1) continue;
@@ -363,14 +363,14 @@ static void __init mlreset(void)
 	init_topology_matrix();
 	dump_topology();
 
-	gen_region_mask(&region_mask, numnodes);
+	gen_region_mask(&region_mask);
 
-	setup_replication_mask(numnodes);
+	setup_replication_mask();
 
 	/*
 	 * Set all nodes' calias sizes to 8k
 	 */
-	for (i = 0; i < numnodes; i++) {
+	for_each_online_node(i) {
 		nasid_t nasid;
 
 		nasid = COMPACT_TO_NASID_NODEID(i);
@@ -407,7 +407,7 @@ static void __init szmem(void)
 
 	num_physpages = 0;
 
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		ignore = nodebytes = 0;
 		for (slot = 0; slot < MAX_MEM_SLOTS; slot++) {
 			slot_psize = slot_psize_compute(node, slot);
@@ -489,7 +489,7 @@ void __init prom_meminit(void)
 	szmem();
 
 	for (node = 0; node < MAX_COMPACT_NODES; node++) {
-		if (node < numnodes) {
+		if (node_online(node)) {
 			node_mem_init(node);
 			continue;
 		}
@@ -513,7 +513,7 @@ void __init paging_init(void)
 
 	pagetable_init();
 
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		pfn_t start_pfn = slot_getbasepfn(node, 0);
 		pfn_t end_pfn = node_getmaxclick(node) + 1;
 
@@ -533,7 +533,7 @@ void __init mem_init(void)
 
 	high_memory = (void *) __va(num_physpages << PAGE_SHIFT);
 
-	for (node = 0; node < numnodes; node++) {
+	for_each_online_node(node) {
 		unsigned slot, numslots;
 		struct page *end, *p;
 	
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-nmi.c linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-nmi.c
--- linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-nmi.c	2004-12-13 16:22:15.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-nmi.c	2004-12-14 11:57:17.000000000 -0800
@@ -183,7 +183,7 @@ nmi_eframes_save(void)
 {
 	cnodeid_t	cnode;
 
-	for(cnode = 0 ; cnode < numnodes; cnode++)
+	for_each_online_node(cnode)
 		nmi_node_eframe_save(cnode);
 }
 
@@ -214,13 +214,13 @@ cont_nmi_dump(void)
 	 * send NMIs to all cpus on a 256p system.
 	 */
 	for (i=0; i < 1500; i++) {
-		for (node=0; node < numnodes; node++)
+		for_each_online_node(node)
 			if (NODEPDA(node)->dump_count == 0)
 				break;
-		if (node == numnodes)
+		if (node == MAX_NUMNODES)
 			break;
 		if (i == 1000) {
-			for (node=0; node < numnodes; node++)
+			for_each_online_node(node)
 				if (NODEPDA(node)->dump_count == 0) {
 					cpu = node_to_first_cpu(node);
 					for (n=0; n < CNODE_NUM_CPUS(node); cpu++, n++) {
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-reset.c linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-reset.c
--- linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-reset.c	2004-12-13 16:22:15.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-reset.c	2004-12-14 11:57:17.000000000 -0800
@@ -43,7 +43,7 @@ static void ip27_machine_restart(char *c
 	smp_send_stop();
 #endif
 #if 0
-	for (i = 0; i < numnodes; i++)
+	for_each_online_node(i)
 		REMOTE_HUB_S(COMPACT_TO_NASID_NODEID(i), PROMOP_REG,
 							PROMOP_REBOOT);
 #else
@@ -59,7 +59,7 @@ static void ip27_machine_halt(void)
 #ifdef CONFIG_SMP
 	smp_send_stop();
 #endif
-	for (i = 0; i < numnodes; i++)
+	for_each_online_node(i)
 		REMOTE_HUB_S(COMPACT_TO_NASID_NODEID(i), PROMOP_REG,
 							PROMOP_RESTART);
 	LOCAL_HUB_S(NI_PORT_RESET, NPR_PORTRESET | NPR_LOCALRESET);
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-smp.c linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-smp.c
--- linux-2.6.10-rc3-mm1/arch/mips/sgi-ip27/ip27-smp.c	2004-12-13 16:22:15.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/arch/mips/sgi-ip27/ip27-smp.c	2004-12-15 15:48:00.000000000 -0800
@@ -108,18 +108,22 @@ void cpu_node_probe(void)
 	for (i = 0; i < MAXCPUS; i++)
 		cpuid_to_compact_node[i] = INVALID_CNODEID;
 
-	numnodes = 0;
+	/*
+	 * MCD - this whole "compact node" stuff can probably be dropped, 
+	 * as we can handle sparse numbering now
+	 */
+	nodes_clear(node_online_map);
 	for (i = 0; i < MAX_COMPACT_NODES; i++) {
 		nasid_t nasid = gdap->g_nasidtable[i];
 		if (nasid == INVALID_NASID)
 			break;
 		compact_to_nasid_node[i] = nasid;
 		nasid_to_compact_node[nasid] = i;
-		numnodes++;
+		node_set_online(num_online_nodes());
 		highest = do_cpumask(i, nasid, highest);
 	}
 
-	printk("Discovered %d cpus on %d nodes\n", highest + 1, numnodes);
+	printk("Discovered %d cpus on %d nodes\n", highest + 1, num_online_nodes());
 }
 
 static void intr_clear_bits(nasid_t nasid, volatile hubreg_t *pend,
@@ -151,10 +155,10 @@ void __init prom_prepare_cpus(unsigned i
 {
 	cnodeid_t	cnode;
 
-	for (cnode = 0; cnode < numnodes; cnode++)
+	for_each_online_node(cnode)
 		intr_clear_all(COMPACT_TO_NASID_NODEID(cnode));
 
-	replicate_kernel_text(numnodes);
+	replicate_kernel_text();
 
 	/*
 	 * Assumption to be fixed: we're always booted on logical / physical
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-mips/sn/sn_private.h linux-2.6.10-rc3-mm1-nom.mips/include/asm-mips/sn/sn_private.h
--- linux-2.6.10-rc3-mm1/include/asm-mips/sn/sn_private.h	2004-12-13 16:23:38.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.mips/include/asm-mips/sn/sn_private.h	2004-12-14 11:57:17.000000000 -0800
@@ -12,8 +12,8 @@ extern void cpu_time_init(void);
 extern void per_cpu_init(void);
 extern void install_cpu_nmi_handler(int slice);
 extern void install_ipi(void);
-extern void setup_replication_mask(int);
-extern void replicate_kernel_text(int);
+extern void setup_replication_mask();
+extern void replicate_kernel_text();
 extern pfn_t node_getfirstfree(cnodeid_t);
 
 #endif /* __ASM_SN_SN_PRIVATE_H */



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (5 preceding siblings ...)
  2004-12-23 22:42 ` [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips Matthew Dobson
@ 2004-12-23 22:44 ` Matthew Dobson
  2004-12-23 22:45 ` [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64 Matthew Dobson
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:44 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

7/10 - Replace numnodes with node_online_map for parisc

[mcd@arrakis node_online_map]$ diffstat arch-parisc.patch
 init.c |    2 --
 1 files changed, 2 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/parisc/mm/init.c linux-2.6.10-rc3-mm1-nom.parisc/arch/parisc/mm/init.c
--- linux-2.6.10-rc3-mm1/arch/parisc/mm/init.c	2004-12-13 16:23:04.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.parisc/arch/parisc/mm/init.c	2004-12-14 11:57:17.000000000 -0800
@@ -269,8 +269,6 @@ static void __init setup_bootmem(void)
 	}
 	memset(pfnnid_map, 0xff, sizeof(pfnnid_map));
 
-	numnodes = npmem_ranges;
-
 	for (i = 0; i < npmem_ranges; i++)
 		node_set_online(i);
 #endif



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (6 preceding siblings ...)
  2004-12-23 22:44 ` [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc Matthew Dobson
@ 2004-12-23 22:45 ` Matthew Dobson
  2004-12-23 22:46 ` [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64 Matthew Dobson
  2004-12-23 22:47 ` [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent Matthew Dobson
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:45 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

8/10 - Replace numnodes with node_online_map for ppc64

[mcd@arrakis node_online_map]$ diffstat arch-ppc64.patch
 init.c |    2 +-
 numa.c |   14 ++++++--------
 2 files changed, 7 insertions(+), 9 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ppc64/mm/init.c linux-2.6.10-rc3-mm1-nom.ppc64/arch/ppc64/mm/init.c
--- linux-2.6.10-rc3-mm1/arch/ppc64/mm/init.c	2004-12-13 16:22:53.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ppc64/arch/ppc64/mm/init.c	2004-12-14 11:57:17.000000000 -0800
@@ -703,7 +703,7 @@ void __init mem_init(void)
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 
 #ifdef CONFIG_DISCONTIGMEM
-        for (nid = 0; nid < numnodes; nid++) {
+        for_each_online_node(nid) {
 		if (NODE_DATA(nid)->node_spanned_pages != 0) {
 			printk("freeing bootmem node %x\n", nid);
 			totalram_pages +=
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/ppc64/mm/numa.c linux-2.6.10-rc3-mm1-nom.ppc64/arch/ppc64/mm/numa.c
--- linux-2.6.10-rc3-mm1/arch/ppc64/mm/numa.c	2004-12-13 16:22:53.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.ppc64/arch/ppc64/mm/numa.c	2004-12-15 13:29:14.000000000 -0800
@@ -216,7 +216,7 @@ static int numa_setup_cpu(unsigned long 
 
 	numa_domain = of_node_numa_domain(cpu);
 
-	if (numa_domain >= numnodes) {
+	if (numa_domain >= num_online_nodes()) {
 		/*
 		 * POWER4 LPAR uses 0xffff as invalid node,
 		 * dont warn in this case.
@@ -384,7 +384,8 @@ new_range:
 			goto new_range;
 	}
 
-	numnodes = max_domain + 1;
+	for (i = 0; i <= max_domain; i++)
+		node_set_online(i);
 
 	return 0;
 }
@@ -430,12 +431,9 @@ static void __init dump_numa_topology(vo
 	if (min_common_depth == -1 || !numa_enabled)
 		return;
 
-	for (node = 0; node < MAX_NUMNODES; node++) {
+	for_each_online_node(node) {
 		unsigned long i;
 
-		if (!node_online(node))
-			continue;
-
 		printk(KERN_INFO "Node %d Memory:", node);
 
 		count = 0;
@@ -519,7 +517,7 @@ void __init do_init_bootmem(void)
 
 	register_cpu_notifier(&ppc64_numa_nb);
 
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		unsigned long start_paddr, end_paddr;
 		int i;
 		unsigned long bootmem_paddr;
@@ -619,7 +617,7 @@ void __init paging_init(void)
 	memset(zones_size, 0, sizeof(zones_size));
 	memset(zholes_size, 0, sizeof(zholes_size));
 
-	for (nid = 0; nid < numnodes; nid++) {
+	for_each_online_node(nid) {
 		unsigned long start_pfn;
 		unsigned long end_pfn;
 



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (7 preceding siblings ...)
  2004-12-23 22:45 ` [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64 Matthew Dobson
@ 2004-12-23 22:46 ` Matthew Dobson
  2004-12-23 22:47 ` [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent Matthew Dobson
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:46 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

9/10 - Replace numnodes with node_online_map for x86_64

[mcd@arrakis node_online_map]$ diffstat arch-x86_64.patch
 arch/x86_64/kernel/setup64.c |    3 ++-
 arch/x86_64/mm/k8topology.c  |    9 +++++----
 arch/x86_64/mm/numa.c        |   15 +++++++--------
 arch/x86_64/mm/srat.c        |   13 +++++--------
 include/asm-x86_64/numa.h    |    3 ---
 5 files changed, 19 insertions(+), 24 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/x86_64/kernel/setup64.c linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/kernel/setup64.c
--- linux-2.6.10-rc3-mm1/arch/x86_64/kernel/setup64.c	2004-12-13 16:23:05.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/kernel/setup64.c	2004-12-14 11:57:17.000000000 -0800
@@ -82,7 +82,8 @@ void __init setup_per_cpu_areas(void)
 		unsigned char *ptr;
 
 		if (!NODE_DATA(cpu_to_node(i))) {
-			printk("cpu with no node %d, numnodes %d\n", i, numnodes);
+			printk("cpu with no node %d, num_online_nodes %d\n", 
+			       i, num_online_nodes());
 			ptr = alloc_bootmem(size);
 		} else { 
 			ptr = alloc_bootmem_node(NODE_DATA(cpu_to_node(i)), size);
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/x86_64/mm/k8topology.c linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/mm/k8topology.c
--- linux-2.6.10-rc3-mm1/arch/x86_64/mm/k8topology.c	2004-12-13 16:23:05.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/mm/k8topology.c	2004-12-14 16:08:46.000000000 -0800
@@ -55,9 +55,10 @@ int __init k8_scan_nodes(unsigned long s
 	printk(KERN_INFO "Scanning NUMA topology in Northbridge %d\n", nb); 
 
 	reg = read_pci_config(0, nb, 0, 0x60); 
-	numnodes =  ((reg >> 4) & 7) + 1; 
+	for (i = 0; i <= ((reg >> 4) & 7); i++)
+		node_set_online(i);
 
-	printk(KERN_INFO "Number of nodes %d (%x)\n", numnodes, reg);
+	printk(KERN_INFO "Number of nodes %d (%x)\n", num_online_nodes(), reg);
 
 	memset(&nodes,0,sizeof(nodes)); 
 	prevbase = 0;
@@ -69,11 +70,11 @@ int __init k8_scan_nodes(unsigned long s
 
 		nodeid = limit & 7; 
 		if ((base & 3) == 0) { 
-			if (i < numnodes) 
+			if (i < num_online_nodes()) 
 				printk("Skipping disabled node %d\n", i); 
 			continue;
 		} 
-		if (nodeid >= numnodes) { 
+		if (nodeid >= num_online_nodes()) { 
 			printk("Ignoring excess node %d (%lx:%lx)\n", nodeid,
 			       base, limit); 
 			continue;
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/x86_64/mm/numa.c linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/mm/numa.c
--- linux-2.6.10-rc3-mm1/arch/x86_64/mm/numa.c	2004-12-13 16:23:05.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/mm/numa.c	2004-12-14 16:12:18.000000000 -0800
@@ -45,7 +45,7 @@ int __init compute_hash_shift(struct nod
 	/* When in doubt use brute force. */
 	while (shift < 48) { 
 		memset(memnodemap,0xff,sizeof(*memnodemap) * NODEMAPSIZE); 
-		for (i = 0; i < numnodes; i++) { 
+		for_each_online_node(i) { 
 			if (nodes[i].start == nodes[i].end) 
 				continue;
 			for (addr = nodes[i].start; 
@@ -111,8 +111,6 @@ void __init setup_node_bootmem(int nodei
 
 	reserve_bootmem_node(NODE_DATA(nodeid), nodedata_phys, pgdat_size); 
 	reserve_bootmem_node(NODE_DATA(nodeid), bootmap_start, bootmap_pages<<PAGE_SHIFT);
-	if (nodeid + 1 > numnodes)
-		numnodes = nodeid + 1;
 	node_set_online(nodeid);
 } 
 
@@ -197,15 +195,15 @@ static int numa_emulation(unsigned long 
  		       i,
  		       nodes[i].start, nodes[i].end,
  		       (nodes[i].end - nodes[i].start) >> 20);
+		node_set_online(i);
  	}
- 	numnodes = numa_fake;
  	memnode_shift = compute_hash_shift(nodes);
  	if (memnode_shift < 0) {
  		memnode_shift = 0;
  		printk(KERN_ERR "No NUMA hash function found. Emulation disabled.\n");
  		return -1;
  	}
- 	for (i = 0; i < numa_fake; i++)
+ 	for_each_online_node(i)
  		setup_node_bootmem(i, nodes[i].start, nodes[i].end);
  	numa_init_array();
  	return 0;
@@ -240,7 +238,8 @@ void __init numa_initmem_init(unsigned l
 		/* setup dummy node covering all memory */ 
 	memnode_shift = 63; 
 	memnodemap[0] = 0;
-	numnodes = 1;
+	nodes_clear(node_online_map);
+	node_set_online(0);
 	for (i = 0; i < NR_CPUS; i++)
 		cpu_to_node[i] = 0;
 	node_to_cpumask[0] = cpumask_of_cpu(0);
@@ -258,7 +257,7 @@ unsigned long __init numa_free_all_bootm
 { 
 	int i;
 	unsigned long pages = 0;
-	for_all_nodes(i) {
+	for_each_online_node(i) {
 		pages += free_all_bootmem_node(NODE_DATA(i));
 	}
 	return pages;
@@ -267,7 +266,7 @@ unsigned long __init numa_free_all_bootm
 void __init paging_init(void)
 { 
 	int i;
-	for_all_nodes(i) { 
+	for_each_online_node(i) { 
 		setup_node_zones(i); 
 	}
 } 
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/arch/x86_64/mm/srat.c linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/mm/srat.c
--- linux-2.6.10-rc3-mm1/arch/x86_64/mm/srat.c	2004-12-13 16:23:05.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.x86_64/arch/x86_64/mm/srat.c	2004-12-14 16:17:39.000000000 -0800
@@ -27,10 +27,10 @@ static __u8  pxm2node[256] __initdata = 
 static __init int setup_node(int pxm)
 {
 	if (pxm2node[pxm] == 0xff) {
-		if (numnodes > MAX_NUMNODES)
+		if (num_online_nodes() >= MAX_NUMNODES)
 			return -1;
-		pxm2node[pxm] = numnodes - 1;
-		numnodes++;
+		pxm2node[pxm] = num_online_nodes();
+		node_set_online(num_online_nodes());
 	}
 	return pxm2node[pxm];
 }
@@ -38,7 +38,7 @@ static __init int setup_node(int pxm)
 static __init int conflicting_nodes(unsigned long start, unsigned long end)
 {
 	int i;
-	for (i = 0; i < numnodes; i++) {
+	for_each_online_node(i) {
 		struct node *nd = &nodes[i];
 		if (nd->start == nd->end)
 			continue;
@@ -155,10 +155,7 @@ acpi_numa_memory_affinity_init(struct ac
 	       nd->start, nd->end);
 }
 
-void __init acpi_numa_arch_fixup(void)
-{
-	numnodes--;
-}
+void __init acpi_numa_arch_fixup(void) {}
 
 /* Use the information discovered above to actually set up the nodes. */
 int __init acpi_scan_nodes(unsigned long start, unsigned long end)
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/asm-x86_64/numa.h linux-2.6.10-rc3-mm1-nom.x86_64/include/asm-x86_64/numa.h
--- linux-2.6.10-rc3-mm1/include/asm-x86_64/numa.h	2004-12-13 16:23:20.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.x86_64/include/asm-x86_64/numa.h	2004-12-14 11:57:17.000000000 -0800
@@ -8,9 +8,6 @@ struct node { 
 	u64 start,end; 
 };
 
-#define for_all_nodes(x) for ((x) = 0; (x) < numnodes; (x)++) \
-				if (node_online(x))
-
 extern int compute_hash_shift(struct node *nodes);
 
 #define ZONE_ALIGN (1UL << (MAX_ORDER+PAGE_SHIFT))



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent
  2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
                   ` (8 preceding siblings ...)
  2004-12-23 22:46 ` [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64 Matthew Dobson
@ 2004-12-23 22:47 ` Matthew Dobson
  9 siblings, 0 replies; 11+ messages in thread
From: Matthew Dobson @ 2004-12-23 22:47 UTC (permalink / raw)
  To: LKML; +Cc: LSE Tech, Andrew Morton

10/10 - Replace numnodes with node_online_map for arch-independent code

[mcd@arrakis node_online_map]$ diffstat arch-generic.patch
 Documentation/vm/numa    |    2 +-
 drivers/base/node.c      |    2 +-
 include/linux/mmzone.h   |    1 -
 include/linux/topology.h |   13 +++----------
 mm/hugetlb.c             |    4 ++--
 mm/mempolicy.c           |    2 +-
 mm/page_alloc.c          |   46 ++++++++++++++++++++++++++--------------------
 7 files changed, 34 insertions(+), 36 deletions(-)


-Matt

diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/Documentation/vm/numa linux-2.6.10-rc3-mm1-nom.generic/Documentation/vm/numa
--- linux-2.6.10-rc3-mm1/Documentation/vm/numa	2004-12-13 16:24:49.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/Documentation/vm/numa	2004-12-20 16:56:02.000000000 -0800
@@ -29,7 +29,7 @@ Each node's page allocation data structu
 into a pg_data_t. The bootmem_data_t is just one part of this. To 
 make the code look uniform between NUMA and regular UMA platforms, 
 UMA platforms have a statically allocated pg_data_t too (contig_page_data).
-For the sake of uniformity, the variable "numnodes" is also defined
+For the sake of uniformity, the function num_online_nodes() is also defined
 for all platforms. As we run benchmarks, we might decide to NUMAize 
 more variables like low_on_memory, nr_free_pages etc into the pg_data_t.
 
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/drivers/base/node.c linux-2.6.10-rc3-mm1-nom.generic/drivers/base/node.c
--- linux-2.6.10-rc3-mm1/drivers/base/node.c	2004-12-13 16:20:36.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/drivers/base/node.c	2004-12-20 16:56:02.000000000 -0800
@@ -120,7 +120,7 @@ static ssize_t node_read_distance(struct
 	/* buf currently PAGE_SIZE, need ~4 chars per node */
 	BUILD_BUG_ON(MAX_NUMNODES*4 > PAGE_SIZE/2);
 
-	for (i = 0; i < numnodes; i++)
+	for_each_online_node(i)
 		len += sprintf(buf + len, "%s%d", i ? " " : "", node_distance(nid, i));
 
 	len += sprintf(buf + len, "\n");
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/linux/mmzone.h linux-2.6.10-rc3-mm1-nom.generic/include/linux/mmzone.h
--- linux-2.6.10-rc3-mm1/include/linux/mmzone.h	2004-12-13 16:23:30.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/include/linux/mmzone.h	2004-12-20 16:56:02.000000000 -0800
@@ -271,7 +271,6 @@ typedef struct pglist_data {
 #define node_present_pages(nid)	(NODE_DATA(nid)->node_present_pages)
 #define node_spanned_pages(nid)	(NODE_DATA(nid)->node_spanned_pages)
 
-extern int numnodes;
 extern struct pglist_data *pgdat_list;
 
 void __get_zone_counts(unsigned long *active, unsigned long *inactive,
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/include/linux/topology.h linux-2.6.10-rc3-mm1-nom.generic/include/linux/topology.h
--- linux-2.6.10-rc3-mm1/include/linux/topology.h	2004-12-13 16:23:31.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/include/linux/topology.h	2004-12-20 16:56:02.000000000 -0800
@@ -43,16 +43,9 @@
 	})
 #endif
 
-static inline int __next_node_with_cpus(int node)
-{
-	do
-		++node;
-	while (node < numnodes && !nr_cpus_node(node));
-	return node;
-}
-
-#define for_each_node_with_cpus(node) \
-	for (node = 0; node < numnodes; node = __next_node_with_cpus(node))
+#define for_each_node_with_cpus(node)						\
+	for_each_online_node(node)						\
+		if (nr_cpus_node(node))
 
 #ifndef node_distance
 /* Conform to ACPI 2.0 SLIT distance definitions */
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/mm/hugetlb.c linux-2.6.10-rc3-mm1-nom.generic/mm/hugetlb.c
--- linux-2.6.10-rc3-mm1/mm/hugetlb.c	2004-12-13 16:25:02.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/mm/hugetlb.c	2004-12-20 16:56:02.000000000 -0800
@@ -54,10 +54,10 @@ static struct page *alloc_fresh_huge_pag
 	struct page *page;
 	page = alloc_pages_node(nid, GFP_HIGHUSER|__GFP_COMP|__GFP_NOWARN,
 					HUGETLB_PAGE_ORDER);
-	nid = (nid + 1) % numnodes;
+	nid = (nid + 1) % num_online_nodes();
 	if (page) {
 		nr_huge_pages++;
-		nr_huge_pages_node[page_zone(page)->zone_pgdat->node_id]++;
+		nr_huge_pages_node[page_to_nid(page)]++;
 	}
 	return page;
 }
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/mm/mempolicy.c linux-2.6.10-rc3-mm1-nom.generic/mm/mempolicy.c
--- linux-2.6.10-rc3-mm1/mm/mempolicy.c	2004-12-13 16:25:02.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/mm/mempolicy.c	2004-12-20 16:57:51.000000000 -0800
@@ -714,7 +714,7 @@ asmlinkage long sys_get_mempolicy(int __
 
 	if (flags & ~(unsigned long)(MPOL_F_NODE|MPOL_F_ADDR))
 		return -EINVAL;
-	if (nmask != NULL && maxnode < numnodes)
+	if (nmask != NULL && maxnode < MAX_NUMNODES)
 		return -EINVAL;
 	if (flags & MPOL_F_ADDR) {
 		down_read(&mm->mmap_sem);
diff -Nurp --exclude-from=/home/mcd/.dontdiff linux-2.6.10-rc3-mm1/mm/page_alloc.c linux-2.6.10-rc3-mm1-nom.generic/mm/page_alloc.c
--- linux-2.6.10-rc3-mm1/mm/page_alloc.c	2004-12-13 16:25:01.000000000 -0800
+++ linux-2.6.10-rc3-mm1-nom.generic/mm/page_alloc.c	2004-12-22 17:32:38.000000000 -0800
@@ -37,13 +37,13 @@
 #include <asm/tlbflush.h>
 #include "internal.h"
 
-nodemask_t node_online_map = NODE_MASK_NONE;
+/* MCD - HACK: Find somewhere to initialize this EARLY, or make this initializer cleaner */
+nodemask_t node_online_map = { { [0] = 1UL } };
 nodemask_t node_possible_map = NODE_MASK_ALL;
 struct pglist_data *pgdat_list;
 unsigned long totalram_pages;
 unsigned long totalhigh_pages;
 long nr_swap_pages;
-int numnodes = 1;
 int sysctl_lower_zone_protection = 0;
 
 EXPORT_SYMBOL(totalram_pages);
@@ -1358,13 +1358,13 @@ static int __init build_zonelists_node(p
 }
 
 #ifdef CONFIG_NUMA
-#define MAX_NODE_LOAD (numnodes)
+#define MAX_NODE_LOAD (num_online_nodes())
 static int __initdata node_load[MAX_NUMNODES];
 /**
  * find_next_best_node - find the next node that should appear in a given
  *    node's fallback list
  * @node: node whose fallback list we're appending
- * @used_node_mask: pointer to the bitmap of already used nodes
+ * @used_node_mask: nodemask_t of already used nodes
  *
  * We use a number of factors to determine which is the next node that should
  * appear on a given node's fallback list.  The node should not have appeared
@@ -1375,24 +1375,24 @@ static int __initdata node_load[MAX_NUMN
  * on them otherwise.
  * It returns -1 if no node is found.
  */
-static int __init find_next_best_node(int node, void *used_node_mask)
+static int __init find_next_best_node(int node, nodemask_t used_node_mask)
 {
 	int i, n, val;
 	int min_val = INT_MAX;
 	int best_node = -1;
 
-	for (i = 0; i < numnodes; i++) {
+	for_each_online_node(i) {
 		cpumask_t tmp;
 
 		/* Start from local node */
-		n = (node+i)%numnodes;
+		n = (node+i) % num_online_nodes();
 
 		/* Don't want a node to appear more than once */
-		if (test_bit(n, used_node_mask))
+		if (node_isset(n, used_node_mask))
 			continue;
 
 		/* Use the local node if we haven't already */
-		if (!test_bit(node, used_node_mask)) {
+		if (!node_isset(node, used_node_mask)) {
 			best_node = node;
 			break;
 		}
@@ -1416,7 +1416,7 @@ static int __init find_next_best_node(in
 	}
 
 	if (best_node >= 0)
-		set_bit(best_node, used_node_mask);
+		node_set(best_node, used_node_mask);
 
 	return best_node;
 }
@@ -1426,7 +1426,7 @@ static void __init build_zonelists(pg_da
 	int i, j, k, node, local_node;
 	int prev_node, load;
 	struct zonelist *zonelist;
-	DECLARE_BITMAP(used_mask, MAX_NUMNODES);
+	nodemask_t used_mask;
 
 	/* initialize zonelists */
 	for (i = 0; i < GFP_ZONETYPES; i++) {
@@ -1437,9 +1437,9 @@ static void __init build_zonelists(pg_da
 
 	/* NUMA-aware ordering of nodes */
 	local_node = pgdat->node_id;
-	load = numnodes;
+	load = num_online_nodes();
 	prev_node = local_node;
-	bitmap_zero(used_mask, MAX_NUMNODES);
+	nodes_clear(used_mask);
 	while ((node = find_next_best_node(local_node, used_mask)) >= 0) {
 		/*
 		 * We don't want to pressure a particular node.
@@ -1496,11 +1496,17 @@ static void __init build_zonelists(pg_da
  		 * zones coming right after the local ones are those from
  		 * node N+1 (modulo N)
  		 */
- 		for (node = local_node + 1; node < numnodes; node++)
- 			j = build_zonelists_node(NODE_DATA(node), zonelist, j, k);
- 		for (node = 0; node < local_node; node++)
- 			j = build_zonelists_node(NODE_DATA(node), zonelist, j, k);
- 
+		for (node = local_node + 1; node < MAX_NUMNODES; node++) {
+			if (!node_online(node))
+				continue;
+			j = build_zonelists_node(NODE_DATA(node), zonelist, j, k);
+		}
+		for (node = 0; node < local_node; node++) {
+			if (!node_online(node))
+				continue;
+			j = build_zonelists_node(NODE_DATA(node), zonelist, j, k);
+		}
+
 		zonelist->zones[j] = NULL;
 	}
 }
@@ -1511,9 +1517,9 @@ void __init build_all_zonelists(void)
 {
 	int i;
 
-	for(i = 0 ; i < numnodes ; i++)
+	for_each_online_node(i)
 		build_zonelists(NODE_DATA(i));
-	printk("Built %i zonelists\n", numnodes);
+	printk("Built %i zonelists\n", num_online_nodes());
 	cpuset_init_current_mems_allowed();
 }
 



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2004-12-23 22:55 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-12-23 21:51 [RFC PATCH 0/10] Replace 'numnodes' with 'node_online_map' Matthew Dobson
2004-12-23 22:35 ` [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha Matthew Dobson
2004-12-23 22:37 ` [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm Matthew Dobson
2004-12-23 22:39 ` [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386 Matthew Dobson
2004-12-23 22:40 ` [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64 Matthew Dobson
2004-12-23 22:41 ` [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r Matthew Dobson
2004-12-23 22:42 ` [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips Matthew Dobson
2004-12-23 22:44 ` [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc Matthew Dobson
2004-12-23 22:45 ` [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64 Matthew Dobson
2004-12-23 22:46 ` [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64 Matthew Dobson
2004-12-23 22:47 ` [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent Matthew Dobson

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).