diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2013-05-02 17:37:49 +0200 | 
|---|---|---|
| committer | Frederic Weisbecker <fweisbec@gmail.com> | 2013-05-02 17:54:19 +0200 | 
| commit | c032862fba51a3ca504752d3a25186b324c5ce83 (patch) | |
| tree | 955dc2ba4ab3df76ecc2bb780ee84aca04967e8d /mm/sparse-vmemmap.c | |
| parent | fda76e074c7737fc57855dd17c762e50ed526052 (diff) | |
| parent | 8700c95adb033843fc163d112b9d21d4fda78018 (diff) | |
| download | olio-linux-3.10-c032862fba51a3ca504752d3a25186b324c5ce83.tar.xz olio-linux-3.10-c032862fba51a3ca504752d3a25186b324c5ce83.zip  | |
Merge commit '8700c95adb03' into timers/nohz
The full dynticks tree needs the latest RCU and sched
upstream updates in order to fix some dependencies.
Merge a common upstream merge point that has these
updates.
Conflicts:
	include/linux/perf_event.h
	kernel/rcutree.h
	kernel/rcutree_plugin.h
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'mm/sparse-vmemmap.c')
| -rw-r--r-- | mm/sparse-vmemmap.c | 27 | 
1 files changed, 17 insertions, 10 deletions
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 1b7e22ab9b0..27eeab3be75 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -53,10 +53,12 @@ void * __meminit vmemmap_alloc_block(unsigned long size, int node)  		struct page *page;  		if (node_state(node, N_HIGH_MEMORY)) -			page = alloc_pages_node(node, -				GFP_KERNEL | __GFP_ZERO, get_order(size)); +			page = alloc_pages_node( +				node, GFP_KERNEL | __GFP_ZERO | __GFP_REPEAT, +				get_order(size));  		else -			page = alloc_pages(GFP_KERNEL | __GFP_ZERO, +			page = alloc_pages( +				GFP_KERNEL | __GFP_ZERO | __GFP_REPEAT,  				get_order(size));  		if (page)  			return page_address(page); @@ -145,11 +147,10 @@ pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)  	return pgd;  } -int __meminit vmemmap_populate_basepages(struct page *start_page, -						unsigned long size, int node) +int __meminit vmemmap_populate_basepages(unsigned long start, +					 unsigned long end, int node)  { -	unsigned long addr = (unsigned long)start_page; -	unsigned long end = (unsigned long)(start_page + size); +	unsigned long addr = start;  	pgd_t *pgd;  	pud_t *pud;  	pmd_t *pmd; @@ -176,9 +177,15 @@ int __meminit vmemmap_populate_basepages(struct page *start_page,  struct page * __meminit sparse_mem_map_populate(unsigned long pnum, int nid)  { -	struct page *map = pfn_to_page(pnum * PAGES_PER_SECTION); -	int error = vmemmap_populate(map, PAGES_PER_SECTION, nid); -	if (error) +	unsigned long start; +	unsigned long end; +	struct page *map; + +	map = pfn_to_page(pnum * PAGES_PER_SECTION); +	start = (unsigned long)map; +	end = (unsigned long)(map + PAGES_PER_SECTION); + +	if (vmemmap_populate(start, end, nid))  		return NULL;  	return map;  |