diff options
| author | Andy Whitcroft <apw@shadowen.org> | 2006-01-06 03:10:53 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:24 -0500 |
| commit | 2bdaf115b1c364d89484b59d5b937973f1c5a5c3 (patch) | |
| tree | 184d595f1969e5488da6c78f8387f239e8d49cac /include/linux | |
| parent | 03b00ebcc804180829d513df9e92e5fe8f72aacf (diff) | |
[PATCH] flatmem split out memory model
There are three places we define pfn_to_nid(). Two in linux/mmzone.h and one
in asm/mmzone.h. These in essence represent the three memory models. The
definition in linux/mmzone.h under !NEED_MULTIPLE_NODES is both the FLATMEM
definition and the optimisation for single NUMA nodes; the one under SPARSEMEM
is the NUMA sparsemem one; the one in asm/mmzone.h under DISCONTIGMEM is the
discontigmem one. This is not in the least bit obvious, particularly the
connection between the non-NUMA optimisations and the memory models.
Two patches:
flatmem-split-out-memory-model: simplifies the selection of pfn_to_nid()
implementations. The selection is based primarily off the memory model
selected. Optimisations for non-NUMA are applied where needed.
sparse-provide-pfn_to_nid: implement pfn_to_nid() for SPARSEMEM
This patch:
pfn_to_nid is memory model specific
The pfn_to_nid() call is memory model specific. It represents the locality
identifier for the memory passed. Classically this would be a NUMA node,
but not a chunk of memory under DISCONTIGMEM.
The SPARSEMEM and FLATMEM memory model non-NUMA versions of pfn_to_nid()
are folded together under NEED_MULTIPLE_NODES, while DISCONTIGMEM has its
own optimisation. This is all very confusing.
This patch splits out each implementation of pfn_to_nid() so that we can
see them and the optimisations to each.
Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mmzone.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index d294b57a4016..ee9f7b74e613 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -435,7 +435,6 @@ extern struct pglist_data contig_page_data; | |||
| 435 | #define NODE_DATA(nid) (&contig_page_data) | 435 | #define NODE_DATA(nid) (&contig_page_data) |
| 436 | #define NODE_MEM_MAP(nid) mem_map | 436 | #define NODE_MEM_MAP(nid) mem_map |
| 437 | #define MAX_NODES_SHIFT 1 | 437 | #define MAX_NODES_SHIFT 1 |
| 438 | #define pfn_to_nid(pfn) (0) | ||
| 439 | 438 | ||
| 440 | #else /* CONFIG_NEED_MULTIPLE_NODES */ | 439 | #else /* CONFIG_NEED_MULTIPLE_NODES */ |
| 441 | 440 | ||
| @@ -470,6 +469,10 @@ extern struct pglist_data contig_page_data; | |||
| 470 | #define early_pfn_to_nid(nid) (0UL) | 469 | #define early_pfn_to_nid(nid) (0UL) |
| 471 | #endif | 470 | #endif |
| 472 | 471 | ||
| 472 | #ifdef CONFIG_FLATMEM | ||
| 473 | #define pfn_to_nid(pfn) (0) | ||
| 474 | #endif | ||
| 475 | |||
| 473 | #define pfn_to_section_nr(pfn) ((pfn) >> PFN_SECTION_SHIFT) | 476 | #define pfn_to_section_nr(pfn) ((pfn) >> PFN_SECTION_SHIFT) |
| 474 | #define section_nr_to_pfn(sec) ((sec) << PFN_SECTION_SHIFT) | 477 | #define section_nr_to_pfn(sec) ((sec) << PFN_SECTION_SHIFT) |
| 475 | 478 | ||
| @@ -594,6 +597,8 @@ static inline int pfn_valid(unsigned long pfn) | |||
| 594 | */ | 597 | */ |
| 595 | #ifdef CONFIG_NUMA | 598 | #ifdef CONFIG_NUMA |
| 596 | #define pfn_to_nid early_pfn_to_nid | 599 | #define pfn_to_nid early_pfn_to_nid |
| 600 | #else | ||
| 601 | #define pfn_to_nid(pfn) (0) | ||
| 597 | #endif | 602 | #endif |
| 598 | 603 | ||
| 599 | #define early_pfn_valid(pfn) pfn_valid(pfn) | 604 | #define early_pfn_valid(pfn) pfn_valid(pfn) |
