diff options
-rw-r--r-- | arch/x86/mm/init_64.c | 28 | ||||
-rw-r--r-- | include/linux/mm.h | 1 | ||||
-rw-r--r-- | mm/sparse.c | 5 |
3 files changed, 32 insertions, 2 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 7dc4fbc2d6b0..5fbb8652cf59 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -932,6 +932,10 @@ const char *arch_vma_name(struct vm_area_struct *vma) | |||
932 | /* | 932 | /* |
933 | * Initialise the sparsemem vmemmap using huge-pages at the PMD level. | 933 | * Initialise the sparsemem vmemmap using huge-pages at the PMD level. |
934 | */ | 934 | */ |
935 | static long __meminitdata addr_start, addr_end; | ||
936 | static void __meminitdata *p_start, *p_end; | ||
937 | static int __meminitdata node_start; | ||
938 | |||
935 | int __meminit | 939 | int __meminit |
936 | vmemmap_populate(struct page *start_page, unsigned long size, int node) | 940 | vmemmap_populate(struct page *start_page, unsigned long size, int node) |
937 | { | 941 | { |
@@ -966,12 +970,32 @@ vmemmap_populate(struct page *start_page, unsigned long size, int node) | |||
966 | PAGE_KERNEL_LARGE); | 970 | PAGE_KERNEL_LARGE); |
967 | set_pmd(pmd, __pmd(pte_val(entry))); | 971 | set_pmd(pmd, __pmd(pte_val(entry))); |
968 | 972 | ||
969 | printk(KERN_DEBUG " [%lx-%lx] PMD ->%p on node %d\n", | 973 | /* check to see if we have contiguous blocks */ |
970 | addr, addr + PMD_SIZE - 1, p, node); | 974 | if (p_end != p || node_start != node) { |
975 | if (p_start) | ||
976 | printk(KERN_DEBUG " [%lx-%lx] PMD -> [%p-%p] on node %d\n", | ||
977 | addr_start, addr_end-1, p_start, p_end-1, node_start); | ||
978 | addr_start = addr; | ||
979 | node_start = node; | ||
980 | p_start = p; | ||
981 | } | ||
982 | addr_end = addr + PMD_SIZE; | ||
983 | p_end = p + PMD_SIZE; | ||
971 | } else { | 984 | } else { |
972 | vmemmap_verify((pte_t *)pmd, node, addr, next); | 985 | vmemmap_verify((pte_t *)pmd, node, addr, next); |
973 | } | 986 | } |
974 | } | 987 | } |
975 | return 0; | 988 | return 0; |
976 | } | 989 | } |
990 | |||
991 | void __meminit vmemmap_populate_print_last(void) | ||
992 | { | ||
993 | if (p_start) { | ||
994 | printk(KERN_DEBUG " [%lx-%lx] PMD -> [%p-%p] on node %d\n", | ||
995 | addr_start, addr_end-1, p_start, p_end-1, node_start); | ||
996 | p_start = NULL; | ||
997 | p_end = NULL; | ||
998 | node_start = 0; | ||
999 | } | ||
1000 | } | ||
977 | #endif | 1001 | #endif |
diff --git a/include/linux/mm.h b/include/linux/mm.h index b695875d63e3..286d31521605 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1229,6 +1229,7 @@ void vmemmap_verify(pte_t *, int, unsigned long, unsigned long); | |||
1229 | int vmemmap_populate_basepages(struct page *start_page, | 1229 | int vmemmap_populate_basepages(struct page *start_page, |
1230 | unsigned long pages, int node); | 1230 | unsigned long pages, int node); |
1231 | int vmemmap_populate(struct page *start_page, unsigned long pages, int node); | 1231 | int vmemmap_populate(struct page *start_page, unsigned long pages, int node); |
1232 | void vmemmap_populate_print_last(void); | ||
1232 | 1233 | ||
1233 | #endif /* __KERNEL__ */ | 1234 | #endif /* __KERNEL__ */ |
1234 | #endif /* _LINUX_MM_H */ | 1235 | #endif /* _LINUX_MM_H */ |
diff --git a/mm/sparse.c b/mm/sparse.c index 458109b99e61..7e9191381f86 100644 --- a/mm/sparse.c +++ b/mm/sparse.c | |||
@@ -295,6 +295,9 @@ struct page __init *sparse_early_mem_map_alloc(unsigned long pnum) | |||
295 | return NULL; | 295 | return NULL; |
296 | } | 296 | } |
297 | 297 | ||
298 | void __attribute__((weak)) __meminit vmemmap_populate_print_last(void) | ||
299 | { | ||
300 | } | ||
298 | /* | 301 | /* |
299 | * Allocate the accumulated non-linear sections, allocate a mem_map | 302 | * Allocate the accumulated non-linear sections, allocate a mem_map |
300 | * for each and record the physical to section mapping. | 303 | * for each and record the physical to section mapping. |
@@ -345,6 +348,8 @@ void __init sparse_init(void) | |||
345 | usemap); | 348 | usemap); |
346 | } | 349 | } |
347 | 350 | ||
351 | vmemmap_populate_print_last(); | ||
352 | |||
348 | free_bootmem(__pa(usemap_map), size); | 353 | free_bootmem(__pa(usemap_map), size); |
349 | } | 354 | } |
350 | 355 | ||