aboutsummaryrefslogtreecommitdiffstats
path: root/mm/sparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/sparse.c')
-rw-r--r--mm/sparse.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/mm/sparse.c b/mm/sparse.c
index 347249a4917a..0d3bd4bf3aaa 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -72,6 +72,31 @@ static inline int sparse_index_init(unsigned long section_nr, int nid)
72} 72}
73#endif 73#endif
74 74
75/*
76 * Although written for the SPARSEMEM_EXTREME case, this happens
77 * to also work for the flat array case becase
78 * NR_SECTION_ROOTS==NR_MEM_SECTIONS.
79 */
80int __section_nr(struct mem_section* ms)
81{
82 unsigned long root_nr;
83 struct mem_section* root;
84
85 for (root_nr = 0;
86 root_nr < NR_MEM_SECTIONS;
87 root_nr += SECTIONS_PER_ROOT) {
88 root = __nr_to_section(root_nr);
89
90 if (!root)
91 continue;
92
93 if ((ms >= root) && (ms < (root + SECTIONS_PER_ROOT)))
94 break;
95 }
96
97 return (root_nr * SECTIONS_PER_ROOT) + (ms - root);
98}
99
75/* Record a memory area against a node. */ 100/* Record a memory area against a node. */
76void memory_present(int nid, unsigned long start, unsigned long end) 101void memory_present(int nid, unsigned long start, unsigned long end)
77{ 102{