sparse-vmemmap.c (756a025f00091918d9d09ca3229defb160b409c0) sparse-vmemmap.c (1170532bb49f9468aedabdc1d5a560e2521a2bcc)
1/*
2 * Virtual Memory Map support
3 *
4 * (C) 2007 sgi. Christoph Lameter.
5 *
6 * Virtual memory maps allow VM primitives pfn_to_page, page_to_pfn,
7 * virt_to_page, page_address() to be implemented as a base offset
8 * calculation without memory access.

--- 152 unchanged lines hidden (view full) ---

161
162void __meminit vmemmap_verify(pte_t *pte, int node,
163 unsigned long start, unsigned long end)
164{
165 unsigned long pfn = pte_pfn(*pte);
166 int actual_node = early_pfn_to_nid(pfn);
167
168 if (node_distance(actual_node, node) > LOCAL_DISTANCE)
1/*
2 * Virtual Memory Map support
3 *
4 * (C) 2007 sgi. Christoph Lameter.
5 *
6 * Virtual memory maps allow VM primitives pfn_to_page, page_to_pfn,
7 * virt_to_page, page_address() to be implemented as a base offset
8 * calculation without memory access.

--- 152 unchanged lines hidden (view full) ---

161
162void __meminit vmemmap_verify(pte_t *pte, int node,
163 unsigned long start, unsigned long end)
164{
165 unsigned long pfn = pte_pfn(*pte);
166 int actual_node = early_pfn_to_nid(pfn);
167
168 if (node_distance(actual_node, node) > LOCAL_DISTANCE)
169 printk(KERN_WARNING "[%lx-%lx] potential offnode page_structs\n",
170 start, end - 1);
169 pr_warn("[%lx-%lx] potential offnode page_structs\n",
170 start, end - 1);
171}
172
173pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node)
174{
175 pte_t *pte = pte_offset_kernel(pmd, addr);
176 if (pte_none(*pte)) {
177 pte_t entry;
178 void *p = alloc_block_buf(PAGE_SIZE, node);

--- 108 unchanged lines hidden (view full) ---

287
288 if (!present_section_nr(pnum))
289 continue;
290
291 map_map[pnum] = sparse_mem_map_populate(pnum, nodeid);
292 if (map_map[pnum])
293 continue;
294 ms = __nr_to_section(pnum);
171}
172
173pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node)
174{
175 pte_t *pte = pte_offset_kernel(pmd, addr);
176 if (pte_none(*pte)) {
177 pte_t entry;
178 void *p = alloc_block_buf(PAGE_SIZE, node);

--- 108 unchanged lines hidden (view full) ---

287
288 if (!present_section_nr(pnum))
289 continue;
290
291 map_map[pnum] = sparse_mem_map_populate(pnum, nodeid);
292 if (map_map[pnum])
293 continue;
294 ms = __nr_to_section(pnum);
295 printk(KERN_ERR "%s: sparsemem memory map backing failed some memory will not be available.\n",
295 pr_err("%s: sparsemem memory map backing failed some memory will not be available\n",
296 __func__);
297 ms->section_mem_map = 0;
298 }
299
300 if (vmemmap_buf_start) {
301 /* need to free left buf */
302 memblock_free_early(__pa(vmemmap_buf),
303 vmemmap_buf_end - vmemmap_buf);
304 vmemmap_buf = NULL;
305 vmemmap_buf_end = NULL;
306 }
307}
296 __func__);
297 ms->section_mem_map = 0;
298 }
299
300 if (vmemmap_buf_start) {
301 /* need to free left buf */
302 memblock_free_early(__pa(vmemmap_buf),
303 vmemmap_buf_end - vmemmap_buf);
304 vmemmap_buf = NULL;
305 vmemmap_buf_end = NULL;
306 }
307}