* [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(®ion_mask, numnodes);
+ gen_region_mask(®ion_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).