diff options
author | Dave Hansen <haveblue@us.ibm.com> | 2005-06-23 03:07:37 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-23 12:45:00 -0400 |
commit | 408fde81c1bff15c875a3618481e93a01dcc79ea (patch) | |
tree | 89b173c5cccd69a17aa64bff8916c54bdcb2d6fe /arch | |
parent | 29c31a3bf257e0723423f1f0f9afd1b840434c75 (diff) |
[PATCH] remove non-DISCONTIG use of pgdat->node_mem_map
This patch effectively eliminates direct use of pgdat->node_mem_map outside
of the DISCONTIG code. On a flat memory system, these fields aren't
currently used, neither are they on a sparsemem system.
There was also a node_mem_map(nid) macro on many architectures. Its use
along with the use of ->node_mem_map itself was not consistent. It has
been removed in favor of two new, more explicit, arch-independent macros:
pgdat_page_nr(pgdat, pagenr)
nid_page_nr(nid, pagenr)
I called them "pgdat" and "nid" because we overload the term "node" to mean
"NUMA node", "DISCONTIG node" or "pg_data_t" in very confusing ways. I
believe the newer names are much clearer.
These macros can be overridden in the sparsemem case with a theoretically
slower operation using node_start_pfn and pfn_to_page(), instead. We could
make this the only behavior if people want, but I don't want to change too
much at once. One thing at a time.
This patch removes more code than it adds.
Compile tested on alpha, alpha discontig, arm, arm-discontig, i386, i386
generic, NUMAQ, Summit, ppc64, ppc64 discontig, and x86_64. Full list
here: http://sr71.net/patches/2.6.12/2.6.12-rc1-mhp2/configs/
Boot tested on NUMAQ, x86 SMP and ppc64 power4/5 LPARs.
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Martin J. Bligh <mbligh@aracnet.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/mm/numa.c | 16 | ||||
-rw-r--r-- | arch/i386/mm/pgtable.c | 2 | ||||
-rw-r--r-- | arch/ia64/mm/discontig.c | 9 | ||||
-rw-r--r-- | arch/m32r/mm/init.c | 4 | ||||
-rw-r--r-- | arch/mips/sgi-ip27/ip27-memory.c | 5 | ||||
-rw-r--r-- | arch/parisc/mm/init.c | 2 | ||||
-rw-r--r-- | arch/ppc64/mm/init.c | 4 |
7 files changed, 20 insertions, 22 deletions
diff --git a/arch/alpha/mm/numa.c b/arch/alpha/mm/numa.c index ba81c4422aaf..c7481d59b6df 100644 --- a/arch/alpha/mm/numa.c +++ b/arch/alpha/mm/numa.c | |||
@@ -327,8 +327,6 @@ void __init mem_init(void) | |||
327 | extern char _text, _etext, _data, _edata; | 327 | extern char _text, _etext, _data, _edata; |
328 | extern char __init_begin, __init_end; | 328 | extern char __init_begin, __init_end; |
329 | unsigned long nid, i; | 329 | unsigned long nid, i; |
330 | struct page * lmem_map; | ||
331 | |||
332 | high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT); | 330 | high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT); |
333 | 331 | ||
334 | reservedpages = 0; | 332 | reservedpages = 0; |
@@ -338,10 +336,10 @@ void __init mem_init(void) | |||
338 | */ | 336 | */ |
339 | totalram_pages += free_all_bootmem_node(NODE_DATA(nid)); | 337 | totalram_pages += free_all_bootmem_node(NODE_DATA(nid)); |
340 | 338 | ||
341 | lmem_map = node_mem_map(nid); | ||
342 | pfn = NODE_DATA(nid)->node_start_pfn; | 339 | pfn = NODE_DATA(nid)->node_start_pfn; |
343 | for (i = 0; i < node_spanned_pages(nid); i++, pfn++) | 340 | for (i = 0; i < node_spanned_pages(nid); i++, pfn++) |
344 | if (page_is_ram(pfn) && PageReserved(lmem_map+i)) | 341 | if (page_is_ram(pfn) && |
342 | PageReserved(nid_page_nr(nid, i))) | ||
345 | reservedpages++; | 343 | reservedpages++; |
346 | } | 344 | } |
347 | 345 | ||
@@ -373,18 +371,18 @@ show_mem(void) | |||
373 | show_free_areas(); | 371 | show_free_areas(); |
374 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 372 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
375 | for_each_online_node(nid) { | 373 | for_each_online_node(nid) { |
376 | struct page * lmem_map = node_mem_map(nid); | ||
377 | i = node_spanned_pages(nid); | 374 | i = node_spanned_pages(nid); |
378 | while (i-- > 0) { | 375 | while (i-- > 0) { |
376 | struct page *page = nid_page_nr(nid, i); | ||
379 | total++; | 377 | total++; |
380 | if (PageReserved(lmem_map+i)) | 378 | if (PageReserved(page)) |
381 | reserved++; | 379 | reserved++; |
382 | else if (PageSwapCache(lmem_map+i)) | 380 | else if (PageSwapCache(page)) |
383 | cached++; | 381 | cached++; |
384 | else if (!page_count(lmem_map+i)) | 382 | else if (!page_count(page)) |
385 | free++; | 383 | free++; |
386 | else | 384 | else |
387 | shared += page_count(lmem_map + i) - 1; | 385 | shared += page_count(page) - 1; |
388 | } | 386 | } |
389 | } | 387 | } |
390 | printk("%ld pages of RAM\n",total); | 388 | printk("%ld pages of RAM\n",total); |
diff --git a/arch/i386/mm/pgtable.c b/arch/i386/mm/pgtable.c index dd81479ff88a..80c84cdf22ef 100644 --- a/arch/i386/mm/pgtable.c +++ b/arch/i386/mm/pgtable.c | |||
@@ -36,7 +36,7 @@ void show_mem(void) | |||
36 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 36 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
37 | for_each_pgdat(pgdat) { | 37 | for_each_pgdat(pgdat) { |
38 | for (i = 0; i < pgdat->node_spanned_pages; ++i) { | 38 | for (i = 0; i < pgdat->node_spanned_pages; ++i) { |
39 | page = pgdat->node_mem_map + i; | 39 | page = pgdat_page_nr(pgdat, i); |
40 | total++; | 40 | total++; |
41 | if (PageHighMem(page)) | 41 | if (PageHighMem(page)) |
42 | highmem++; | 42 | highmem++; |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index c00710929390..f3fd528ead3b 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
@@ -560,14 +560,15 @@ void show_mem(void) | |||
560 | int shared = 0, cached = 0, reserved = 0; | 560 | int shared = 0, cached = 0, reserved = 0; |
561 | printk("Node ID: %d\n", pgdat->node_id); | 561 | printk("Node ID: %d\n", pgdat->node_id); |
562 | for(i = 0; i < pgdat->node_spanned_pages; i++) { | 562 | for(i = 0; i < pgdat->node_spanned_pages; i++) { |
563 | struct page *page = pgdat_page_nr(pgdat, i); | ||
563 | if (!ia64_pfn_valid(pgdat->node_start_pfn+i)) | 564 | if (!ia64_pfn_valid(pgdat->node_start_pfn+i)) |
564 | continue; | 565 | continue; |
565 | if (PageReserved(pgdat->node_mem_map+i)) | 566 | if (PageReserved(page)) |
566 | reserved++; | 567 | reserved++; |
567 | else if (PageSwapCache(pgdat->node_mem_map+i)) | 568 | else if (PageSwapCache(page)) |
568 | cached++; | 569 | cached++; |
569 | else if (page_count(pgdat->node_mem_map+i)) | 570 | else if (page_count(page)) |
570 | shared += page_count(pgdat->node_mem_map+i)-1; | 571 | shared += page_count(page)-1; |
571 | } | 572 | } |
572 | total_present += present; | 573 | total_present += present; |
573 | total_reserved += reserved; | 574 | total_reserved += reserved; |
diff --git a/arch/m32r/mm/init.c b/arch/m32r/mm/init.c index bc423d838fb8..d9a40b1fe8ba 100644 --- a/arch/m32r/mm/init.c +++ b/arch/m32r/mm/init.c | |||
@@ -49,7 +49,7 @@ void show_mem(void) | |||
49 | printk("Free swap: %6ldkB\n",nr_swap_pages<<(PAGE_SHIFT-10)); | 49 | printk("Free swap: %6ldkB\n",nr_swap_pages<<(PAGE_SHIFT-10)); |
50 | for_each_pgdat(pgdat) { | 50 | for_each_pgdat(pgdat) { |
51 | for (i = 0; i < pgdat->node_spanned_pages; ++i) { | 51 | for (i = 0; i < pgdat->node_spanned_pages; ++i) { |
52 | page = pgdat->node_mem_map + i; | 52 | page = pgdat_page_nr(pgdat, i); |
53 | total++; | 53 | total++; |
54 | if (PageHighMem(page)) | 54 | if (PageHighMem(page)) |
55 | highmem++; | 55 | highmem++; |
@@ -152,7 +152,7 @@ int __init reservedpages_count(void) | |||
152 | reservedpages = 0; | 152 | reservedpages = 0; |
153 | for_each_online_node(nid) | 153 | for_each_online_node(nid) |
154 | for (i = 0 ; i < MAX_LOW_PFN(nid) - START_PFN(nid) ; i++) | 154 | for (i = 0 ; i < MAX_LOW_PFN(nid) - START_PFN(nid) ; i++) |
155 | if (PageReserved(NODE_DATA(nid)->node_mem_map + i)) | 155 | if (PageReserved(nid_page_nr(nid, i))) |
156 | reservedpages++; | 156 | reservedpages++; |
157 | 157 | ||
158 | return reservedpages; | 158 | return reservedpages; |
diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c index 0a44a98d7adc..a160d04f7dbe 100644 --- a/arch/mips/sgi-ip27/ip27-memory.c +++ b/arch/mips/sgi-ip27/ip27-memory.c | |||
@@ -549,9 +549,8 @@ void __init mem_init(void) | |||
549 | */ | 549 | */ |
550 | numslots = node_getlastslot(node); | 550 | numslots = node_getlastslot(node); |
551 | for (slot = 1; slot <= numslots; slot++) { | 551 | for (slot = 1; slot <= numslots; slot++) { |
552 | p = NODE_DATA(node)->node_mem_map + | 552 | p = nid_page_nr(node, slot_getbasepfn(node, slot) - |
553 | (slot_getbasepfn(node, slot) - | 553 | slot_getbasepfn(node, 0)); |
554 | slot_getbasepfn(node, 0)); | ||
555 | 554 | ||
556 | /* | 555 | /* |
557 | * Free valid memory in current slot. | 556 | * Free valid memory in current slot. |
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c index cac37589e35c..2886ad70db48 100644 --- a/arch/parisc/mm/init.c +++ b/arch/parisc/mm/init.c | |||
@@ -506,7 +506,7 @@ void show_mem(void) | |||
506 | for (j = node_start_pfn(i); j < node_end_pfn(i); j++) { | 506 | for (j = node_start_pfn(i); j < node_end_pfn(i); j++) { |
507 | struct page *p; | 507 | struct page *p; |
508 | 508 | ||
509 | p = node_mem_map(i) + j - node_start_pfn(i); | 509 | p = nid_page_nr(i, j) - node_start_pfn(i); |
510 | 510 | ||
511 | total++; | 511 | total++; |
512 | if (PageReserved(p)) | 512 | if (PageReserved(p)) |
diff --git a/arch/ppc64/mm/init.c b/arch/ppc64/mm/init.c index 6fa1e6490b57..29dbe084c21f 100644 --- a/arch/ppc64/mm/init.c +++ b/arch/ppc64/mm/init.c | |||
@@ -98,7 +98,7 @@ void show_mem(void) | |||
98 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 98 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
99 | for_each_pgdat(pgdat) { | 99 | for_each_pgdat(pgdat) { |
100 | for (i = 0; i < pgdat->node_spanned_pages; i++) { | 100 | for (i = 0; i < pgdat->node_spanned_pages; i++) { |
101 | page = pgdat->node_mem_map + i; | 101 | page = pgdat_page_nr(pgdat, i); |
102 | total++; | 102 | total++; |
103 | if (PageReserved(page)) | 103 | if (PageReserved(page)) |
104 | reserved++; | 104 | reserved++; |
@@ -654,7 +654,7 @@ void __init mem_init(void) | |||
654 | 654 | ||
655 | for_each_pgdat(pgdat) { | 655 | for_each_pgdat(pgdat) { |
656 | for (i = 0; i < pgdat->node_spanned_pages; i++) { | 656 | for (i = 0; i < pgdat->node_spanned_pages; i++) { |
657 | page = pgdat->node_mem_map + i; | 657 | page = pgdat_page_nr(pgdat, i); |
658 | if (PageReserved(page)) | 658 | if (PageReserved(page)) |
659 | reservedpages++; | 659 | reservedpages++; |
660 | } | 660 | } |