git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nfsd: support ext4 i_version
[safe/jmp/linux-2.6]
/
mm
/
sparse-vmemmap.c
diff --git
a/mm/sparse-vmemmap.c
b/mm/sparse-vmemmap.c
index
22620f6
..
a13ea64
100644
(file)
--- a/
mm/sparse-vmemmap.c
+++ b/
mm/sparse-vmemmap.c
@@
-1,7
+1,7
@@
/*
* Virtual Memory Map support
*
/*
* Virtual Memory Map support
*
- * (C) 2007 sgi. Christoph Lameter
<clameter@sgi.com>
.
+ * (C) 2007 sgi. Christoph Lameter.
*
* Virtual memory maps allow VM primitives pfn_to_page, page_to_pfn,
* virt_to_page, page_address() to be implemented as a base offset
*
* Virtual memory maps allow VM primitives pfn_to_page, page_to_pfn,
* virt_to_page, page_address() to be implemented as a base offset
@@
-34,6
+34,16
@@
* or to back the page tables that are used to create the mapping.
* Uses the main allocators if they are available, else bootmem.
*/
* or to back the page tables that are used to create the mapping.
* Uses the main allocators if they are available, else bootmem.
*/
+
+static void * __init_refok __earlyonly_bootmem_alloc(int node,
+ unsigned long size,
+ unsigned long align,
+ unsigned long goal)
+{
+ return __alloc_bootmem_node(NODE_DATA(node), size, align, goal);
+}
+
+
void * __meminit vmemmap_alloc_block(unsigned long size, int node)
{
/* If the main allocator is up use that, fallback to bootmem. */
void * __meminit vmemmap_alloc_block(unsigned long size, int node)
{
/* If the main allocator is up use that, fallback to bootmem. */
@@
-44,7
+54,7
@@
void * __meminit vmemmap_alloc_block(unsigned long size, int node)
return page_address(page);
return NULL;
} else
return page_address(page);
return NULL;
} else
- return __
alloc_bootmem_node(NODE_DATA(node)
, size, size,
+ return __
earlyonly_bootmem_alloc(node
, size, size,
__pa(MAX_DMA_ADDRESS));
}
__pa(MAX_DMA_ADDRESS));
}
@@
-54,7
+64,7
@@
void __meminit vmemmap_verify(pte_t *pte, int node,
unsigned long pfn = pte_pfn(*pte);
int actual_node = early_pfn_to_nid(pfn);
unsigned long pfn = pte_pfn(*pte);
int actual_node = early_pfn_to_nid(pfn);
- if (
actual_node != node
)
+ if (
node_distance(actual_node, node) > LOCAL_DISTANCE
)
printk(KERN_WARNING "[%lx-%lx] potential offnode "
"page_structs\n", start, end - 1);
}
printk(KERN_WARNING "[%lx-%lx] potential offnode "
"page_structs\n", start, end - 1);
}
@@
-66,7
+76,7
@@
pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node)
pte_t entry;
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
pte_t entry;
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
- return
0
;
+ return
NULL
;
entry = pfn_pte(__pa(p) >> PAGE_SHIFT, PAGE_KERNEL);
set_pte_at(&init_mm, addr, pte, entry);
}
entry = pfn_pte(__pa(p) >> PAGE_SHIFT, PAGE_KERNEL);
set_pte_at(&init_mm, addr, pte, entry);
}
@@
-79,7
+89,7
@@
pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
if (pmd_none(*pmd)) {
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
if (pmd_none(*pmd)) {
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
- return
0
;
+ return
NULL
;
pmd_populate_kernel(&init_mm, pmd, p);
}
return pmd;
pmd_populate_kernel(&init_mm, pmd, p);
}
return pmd;
@@
-91,7
+101,7
@@
pud_t * __meminit vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node)
if (pud_none(*pud)) {
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
if (pud_none(*pud)) {
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
- return
0
;
+ return
NULL
;
pud_populate(&init_mm, pud, p);
}
return pud;
pud_populate(&init_mm, pud, p);
}
return pud;
@@
-103,7
+113,7
@@
pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
if (pgd_none(*pgd)) {
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
if (pgd_none(*pgd)) {
void *p = vmemmap_alloc_block(PAGE_SIZE, node);
if (!p)
- return
0
;
+ return
NULL
;
pgd_populate(&init_mm, pgd, p);
}
return pgd;
pgd_populate(&init_mm, pgd, p);
}
return pgd;