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 | |
| 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>
| -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 | ||||
| -rw-r--r-- | include/asm-alpha/mmzone.h | 3 | ||||
| -rw-r--r-- | include/asm-i386/mmzone.h | 3 | ||||
| -rw-r--r-- | include/asm-m32r/mmzone.h | 3 | ||||
| -rw-r--r-- | include/asm-parisc/mmzone.h | 3 | ||||
| -rw-r--r-- | include/asm-ppc64/mmzone.h | 3 | ||||
| -rw-r--r-- | include/asm-x86_64/mmzone.h | 5 | ||||
| -rw-r--r-- | include/linux/mmzone.h | 2 |
14 files changed, 28 insertions, 36 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 | } |
diff --git a/include/asm-alpha/mmzone.h b/include/asm-alpha/mmzone.h index 726c150dcbe4..a011ef4cf3d3 100644 --- a/include/asm-alpha/mmzone.h +++ b/include/asm-alpha/mmzone.h | |||
| @@ -57,7 +57,6 @@ PLAT_NODE_DATA_LOCALNR(unsigned long p, int n) | |||
| 57 | * Given a kernel address, find the home node of the underlying memory. | 57 | * Given a kernel address, find the home node of the underlying memory. |
| 58 | */ | 58 | */ |
| 59 | #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) | 59 | #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) |
| 60 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 61 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 60 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
| 62 | 61 | ||
| 63 | #define local_mapnr(kvaddr) \ | 62 | #define local_mapnr(kvaddr) \ |
| @@ -108,7 +107,7 @@ PLAT_NODE_DATA_LOCALNR(unsigned long p, int n) | |||
| 108 | #define pfn_to_page(pfn) \ | 107 | #define pfn_to_page(pfn) \ |
| 109 | ({ \ | 108 | ({ \ |
| 110 | unsigned long kaddr = (unsigned long)__va((pfn) << PAGE_SHIFT); \ | 109 | unsigned long kaddr = (unsigned long)__va((pfn) << PAGE_SHIFT); \ |
| 111 | (node_mem_map(kvaddr_to_nid(kaddr)) + local_mapnr(kaddr)); \ | 110 | (NODE_DATA(kvaddr_to_nid(kaddr))->node_mem_map + local_mapnr(kaddr)); \ |
| 112 | }) | 111 | }) |
| 113 | 112 | ||
| 114 | #define page_to_pfn(page) \ | 113 | #define page_to_pfn(page) \ |
diff --git a/include/asm-i386/mmzone.h b/include/asm-i386/mmzone.h index 13830ae67cac..9cec191f462c 100644 --- a/include/asm-i386/mmzone.h +++ b/include/asm-i386/mmzone.h | |||
| @@ -79,7 +79,6 @@ static inline int pfn_to_nid(unsigned long pfn) | |||
| 79 | */ | 79 | */ |
| 80 | #define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT) | 80 | #define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT) |
| 81 | 81 | ||
| 82 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 83 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 82 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
| 84 | #define node_end_pfn(nid) \ | 83 | #define node_end_pfn(nid) \ |
| 85 | ({ \ | 84 | ({ \ |
| @@ -100,7 +99,7 @@ static inline int pfn_to_nid(unsigned long pfn) | |||
| 100 | ({ \ | 99 | ({ \ |
| 101 | unsigned long __pfn = pfn; \ | 100 | unsigned long __pfn = pfn; \ |
| 102 | int __node = pfn_to_nid(__pfn); \ | 101 | int __node = pfn_to_nid(__pfn); \ |
| 103 | &node_mem_map(__node)[node_localnr(__pfn,__node)]; \ | 102 | &NODE_DATA(__node)->node_mem_map[node_localnr(__pfn,__node)]; \ |
| 104 | }) | 103 | }) |
| 105 | 104 | ||
| 106 | #define page_to_pfn(pg) \ | 105 | #define page_to_pfn(pg) \ |
diff --git a/include/asm-m32r/mmzone.h b/include/asm-m32r/mmzone.h index ebf0228fec42..d58878ec899e 100644 --- a/include/asm-m32r/mmzone.h +++ b/include/asm-m32r/mmzone.h | |||
| @@ -14,7 +14,6 @@ extern struct pglist_data *node_data[]; | |||
| 14 | #define NODE_DATA(nid) (node_data[nid]) | 14 | #define NODE_DATA(nid) (node_data[nid]) |
| 15 | 15 | ||
| 16 | #define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn) | 16 | #define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn) |
| 17 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 18 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 17 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
| 19 | #define node_end_pfn(nid) \ | 18 | #define node_end_pfn(nid) \ |
| 20 | ({ \ | 19 | ({ \ |
| @@ -32,7 +31,7 @@ extern struct pglist_data *node_data[]; | |||
| 32 | ({ \ | 31 | ({ \ |
| 33 | unsigned long __pfn = pfn; \ | 32 | unsigned long __pfn = pfn; \ |
| 34 | int __node = pfn_to_nid(__pfn); \ | 33 | int __node = pfn_to_nid(__pfn); \ |
| 35 | &node_mem_map(__node)[node_localnr(__pfn,__node)]; \ | 34 | &NODE_DATA(__node)->node_mem_map[node_localnr(__pfn,__node)]; \ |
| 36 | }) | 35 | }) |
| 37 | 36 | ||
| 38 | #define page_to_pfn(pg) \ | 37 | #define page_to_pfn(pg) \ |
diff --git a/include/asm-parisc/mmzone.h b/include/asm-parisc/mmzone.h index 928bf50c4693..595d3dce120a 100644 --- a/include/asm-parisc/mmzone.h +++ b/include/asm-parisc/mmzone.h | |||
| @@ -19,7 +19,6 @@ extern struct node_map_data node_data[]; | |||
| 19 | */ | 19 | */ |
| 20 | #define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT) | 20 | #define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT) |
| 21 | 21 | ||
| 22 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 23 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 22 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
| 24 | #define node_end_pfn(nid) \ | 23 | #define node_end_pfn(nid) \ |
| 25 | ({ \ | 24 | ({ \ |
| @@ -38,7 +37,7 @@ extern struct node_map_data node_data[]; | |||
| 38 | ({ \ | 37 | ({ \ |
| 39 | unsigned long __pfn = (pfn); \ | 38 | unsigned long __pfn = (pfn); \ |
| 40 | int __node = pfn_to_nid(__pfn); \ | 39 | int __node = pfn_to_nid(__pfn); \ |
| 41 | &node_mem_map(__node)[node_localnr(__pfn,__node)]; \ | 40 | &NODE_DATA(__node)->node_mem_map[node_localnr(__pfn,__node)]; \ |
| 42 | }) | 41 | }) |
| 43 | 42 | ||
| 44 | #define page_to_pfn(pg) \ | 43 | #define page_to_pfn(pg) \ |
diff --git a/include/asm-ppc64/mmzone.h b/include/asm-ppc64/mmzone.h index 0619a41a3c9d..cbfc5ecfe875 100644 --- a/include/asm-ppc64/mmzone.h +++ b/include/asm-ppc64/mmzone.h | |||
| @@ -65,7 +65,6 @@ static inline int pa_to_nid(unsigned long pa) | |||
| 65 | */ | 65 | */ |
| 66 | #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) | 66 | #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) |
| 67 | 67 | ||
| 68 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 69 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 68 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
| 70 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn) | 69 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn) |
| 71 | 70 | ||
| @@ -76,7 +75,7 @@ static inline int pa_to_nid(unsigned long pa) | |||
| 76 | #define discontigmem_pfn_to_page(pfn) \ | 75 | #define discontigmem_pfn_to_page(pfn) \ |
| 77 | ({ \ | 76 | ({ \ |
| 78 | unsigned long __tmp = pfn; \ | 77 | unsigned long __tmp = pfn; \ |
| 79 | (node_mem_map(pfn_to_nid(__tmp)) + \ | 78 | (NODE_DATA(pfn_to_nid(__tmp))->node_mem_map + \ |
| 80 | node_localnr(__tmp, pfn_to_nid(__tmp))); \ | 79 | node_localnr(__tmp, pfn_to_nid(__tmp))); \ |
| 81 | }) | 80 | }) |
| 82 | 81 | ||
diff --git a/include/asm-x86_64/mmzone.h b/include/asm-x86_64/mmzone.h index d95b7c240831..ca4fc3fe0dee 100644 --- a/include/asm-x86_64/mmzone.h +++ b/include/asm-x86_64/mmzone.h | |||
| @@ -35,9 +35,6 @@ static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) | |||
| 35 | #define kvaddr_to_nid(kaddr) phys_to_nid(__pa(kaddr)) | 35 | #define kvaddr_to_nid(kaddr) phys_to_nid(__pa(kaddr)) |
| 36 | #define NODE_DATA(nid) (node_data[nid]) | 36 | #define NODE_DATA(nid) (node_data[nid]) |
| 37 | 37 | ||
| 38 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 39 | |||
| 40 | #define node_mem_map(nid) (NODE_DATA(nid)->node_mem_map) | ||
| 41 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | 38 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) |
| 42 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \ | 39 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \ |
| 43 | NODE_DATA(nid)->node_spanned_pages) | 40 | NODE_DATA(nid)->node_spanned_pages) |
| @@ -50,7 +47,7 @@ static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) | |||
| 50 | (2.4 used to). */ | 47 | (2.4 used to). */ |
| 51 | #define pfn_to_page(pfn) ({ \ | 48 | #define pfn_to_page(pfn) ({ \ |
| 52 | int nid = phys_to_nid(((unsigned long)(pfn)) << PAGE_SHIFT); \ | 49 | int nid = phys_to_nid(((unsigned long)(pfn)) << PAGE_SHIFT); \ |
| 53 | ((pfn) - node_start_pfn(nid)) + node_mem_map(nid); \ | 50 | ((pfn) - node_start_pfn(nid)) + NODE_DATA(nid)->node_mem_map; \ |
| 54 | }) | 51 | }) |
| 55 | 52 | ||
| 56 | #define page_to_pfn(page) \ | 53 | #define page_to_pfn(page) \ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 4733d35d8223..b79633d3a97b 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -284,6 +284,8 @@ typedef struct pglist_data { | |||
| 284 | 284 | ||
| 285 | #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) | 285 | #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) |
| 286 | #define node_spanned_pages(nid) (NODE_DATA(nid)->node_spanned_pages) | 286 | #define node_spanned_pages(nid) (NODE_DATA(nid)->node_spanned_pages) |
| 287 | #define pgdat_page_nr(pgdat, pagenr) ((pgdat)->node_mem_map + (pagenr)) | ||
| 288 | #define nid_page_nr(nid, pagenr) pgdat_page_nr(NODE_DATA(nid),(pagenr)) | ||
| 287 | 289 | ||
| 288 | extern struct pglist_data *pgdat_list; | 290 | extern struct pglist_data *pgdat_list; |
| 289 | 291 | ||
