bootmem: replace node_boot_start in struct bootmem_data
Almost all users of this field need a PFN instead of a physical address, so replace node_boot_start with node_min_pfn. [Lee.Schermerhorn@hp.com: fix spurious BUG_ON() in mark_bootmem()] Signed-off-by: Johannes Weiner <hannes@saeureba.de> Cc: <linux-arch@vger.kernel.org> Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
75a56cfe9f
commit
3560e249ab
@ -74,17 +74,17 @@ pg_data_t *pgdat_list[MAX_NUMNODES];
|
||||
static int __init build_node_maps(unsigned long start, unsigned long len,
|
||||
int node)
|
||||
{
|
||||
unsigned long cstart, epfn, end = start + len;
|
||||
unsigned long spfn, epfn, end = start + len;
|
||||
struct bootmem_data *bdp = &bootmem_node_data[node];
|
||||
|
||||
epfn = GRANULEROUNDUP(end) >> PAGE_SHIFT;
|
||||
cstart = GRANULEROUNDDOWN(start);
|
||||
spfn = GRANULEROUNDDOWN(start) >> PAGE_SHIFT;
|
||||
|
||||
if (!bdp->node_low_pfn) {
|
||||
bdp->node_boot_start = cstart;
|
||||
bdp->node_min_pfn = spfn;
|
||||
bdp->node_low_pfn = epfn;
|
||||
} else {
|
||||
bdp->node_boot_start = min(cstart, bdp->node_boot_start);
|
||||
bdp->node_min_pfn = min(spfn, bdp->node_min_pfn);
|
||||
bdp->node_low_pfn = max(epfn, bdp->node_low_pfn);
|
||||
}
|
||||
|
||||
@ -221,20 +221,21 @@ static void __init fill_pernode(int node, unsigned long pernode,
|
||||
static int __init find_pernode_space(unsigned long start, unsigned long len,
|
||||
int node)
|
||||
{
|
||||
unsigned long epfn;
|
||||
unsigned long spfn, epfn;
|
||||
unsigned long pernodesize = 0, pernode, pages, mapsize;
|
||||
struct bootmem_data *bdp = &bootmem_node_data[node];
|
||||
|
||||
spfn = start >> PAGE_SHIFT;
|
||||
epfn = (start + len) >> PAGE_SHIFT;
|
||||
|
||||
pages = bdp->node_low_pfn - (bdp->node_boot_start >> PAGE_SHIFT);
|
||||
pages = bdp->node_low_pfn - bdp->node_min_pfn;
|
||||
mapsize = bootmem_bootmap_pages(pages) << PAGE_SHIFT;
|
||||
|
||||
/*
|
||||
* Make sure this memory falls within this node's usable memory
|
||||
* since we may have thrown some away in build_maps().
|
||||
*/
|
||||
if (start < bdp->node_boot_start || epfn > bdp->node_low_pfn)
|
||||
if (spfn < bdp->node_min_pfn || epfn > bdp->node_low_pfn)
|
||||
return 0;
|
||||
|
||||
/* Don't setup this node's local space twice... */
|
||||
@ -296,7 +297,7 @@ static void __init reserve_pernode_space(void)
|
||||
bdp = pdp->bdata;
|
||||
|
||||
/* First the bootmem_map itself */
|
||||
pages = bdp->node_low_pfn - (bdp->node_boot_start>>PAGE_SHIFT);
|
||||
pages = bdp->node_low_pfn - bdp->node_min_pfn;
|
||||
size = bootmem_bootmap_pages(pages) << PAGE_SHIFT;
|
||||
base = __pa(bdp->node_bootmem_map);
|
||||
reserve_bootmem_node(pdp, base, size, BOOTMEM_DEFAULT);
|
||||
@ -466,7 +467,7 @@ void __init find_memory(void)
|
||||
|
||||
init_bootmem_node(pgdat_list[node],
|
||||
map>>PAGE_SHIFT,
|
||||
bdp->node_boot_start>>PAGE_SHIFT,
|
||||
bdp->node_min_pfn,
|
||||
bdp->node_low_pfn);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user