diff options
author | Bob Picco <bob.picco@hp.com> | 2005-10-04 15:13:57 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-10-04 13:21:38 -0700 |
commit | 2d4b1fa234417b902c9d3034442387c1805bfa7b (patch) | |
tree | 2ed92c7f82eec32a86f2047ac9e9534d7912e305 /arch/ia64/mm/numa.c | |
parent | 1be7d9935b9c7fb9bd5964bfaf3ac543381277db (diff) | |
download | op-kernel-dev-2d4b1fa234417b902c9d3034442387c1805bfa7b.zip op-kernel-dev-2d4b1fa234417b902c9d3034442387c1805bfa7b.tar.gz |
[PATCH] V5 ia64 SPARSEMEM - SPARSEMEM code changes
This patch is the minimal set of changes required by ia64 to use SPARSEMEM.
Signed-off-by: Bob Picco <bob.picco@hp.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/mm/numa.c')
-rw-r--r-- | arch/ia64/mm/numa.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c index 77118bb..4e5c8b3 100644 --- a/arch/ia64/mm/numa.c +++ b/arch/ia64/mm/numa.c @@ -47,3 +47,27 @@ paddr_to_nid(unsigned long paddr) return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); } + +#if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA) +/* + * Because of holes evaluate on section limits. + * If the section of memory exists, then return the node where the section + * resides. Otherwise return node 0 as the default. This is used by + * SPARSEMEM to allocate the SPARSEMEM sectionmap on the NUMA node where + * the section resides. + */ +int early_pfn_to_nid(unsigned long pfn) +{ + int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; + + for (i = 0; i < num_node_memblks; i++) { + ssec = node_memblk[i].start_paddr >> PA_SECTION_SHIFT; + esec = (node_memblk[i].start_paddr + node_memblk[i].size + + ((1L << PA_SECTION_SHIFT) - 1)) >> PA_SECTION_SHIFT; + if (section >= ssec && section < esec) + return node_memblk[i].nid; + } + + return 0; +} +#endif |