aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2013-04-29 18:07:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-29 18:54:35 -0400
commit0aad818b2de455f1bfd7ef87c28cdbbaaed9a699 (patch)
treea86fe62f7c740d431f76bd2262abae5825e1a21e /include
parent055e4fd96e95b0eee0d92fd54a26be7f0d3bcad0 (diff)
sparse-vmemmap: specify vmemmap population range in bytes
The sparse code, when asking the architecture to populate the vmemmap, specifies the section range as a starting page and a number of pages. This is an awkward interface, because none of the arch-specific code actually thinks of the range in terms of 'struct page' units and always translates it to bytes first. In addition, later patches mix huge page and regular page backing for the vmemmap. For this, they need to call vmemmap_populate_basepages() on sub-section ranges with PAGE_SIZE and PMD_SIZE in mind. But these are not necessarily multiples of the 'struct page' size and so this unit is too coarse. Just translate the section range into bytes once in the generic sparse code, then pass byte ranges down the stack. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Ben Hutchings <ben@decadent.org.uk> Cc: Bernhard Schmidt <Bernhard.Schmidt@lrz.de> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Acked-by: David S. Miller <davem@davemloft.net> Tested-by: David S. Miller <davem@davemloft.net> Cc: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/mm.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 98a44376e4f3..6d7266842abd 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1764,12 +1764,12 @@ pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node);
1764void *vmemmap_alloc_block(unsigned long size, int node); 1764void *vmemmap_alloc_block(unsigned long size, int node);
1765void *vmemmap_alloc_block_buf(unsigned long size, int node); 1765void *vmemmap_alloc_block_buf(unsigned long size, int node);
1766void vmemmap_verify(pte_t *, int, unsigned long, unsigned long); 1766void vmemmap_verify(pte_t *, int, unsigned long, unsigned long);
1767int vmemmap_populate_basepages(struct page *start_page, 1767int vmemmap_populate_basepages(unsigned long start, unsigned long end,
1768 unsigned long pages, int node); 1768 int node);
1769int vmemmap_populate(struct page *start_page, unsigned long pages, int node); 1769int vmemmap_populate(unsigned long start, unsigned long end, int node);
1770void vmemmap_populate_print_last(void); 1770void vmemmap_populate_print_last(void);
1771#ifdef CONFIG_MEMORY_HOTPLUG 1771#ifdef CONFIG_MEMORY_HOTPLUG
1772void vmemmap_free(struct page *memmap, unsigned long nr_pages); 1772void vmemmap_free(unsigned long start, unsigned long end);
1773#endif 1773#endif
1774void register_page_bootmem_memmap(unsigned long section_nr, struct page *map, 1774void register_page_bootmem_memmap(unsigned long section_nr, struct page *map,
1775 unsigned long size); 1775 unsigned long size);