aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Whitcroft <apw@shadowen.org>2006-01-06 03:10:53 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-06 11:33:24 -0500
commit2bdaf115b1c364d89484b59d5b937973f1c5a5c3 (patch)
tree184d595f1969e5488da6c78f8387f239e8d49cac
parent03b00ebcc804180829d513df9e92e5fe8f72aacf (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>
-rw-r--r--include/linux/mmzone.h7
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)