aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/init_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/mm/init_64.c')
-rw-r--r--arch/x86/mm/init_64.c54
1 files changed, 0 insertions, 54 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 470cc4704a9a..c8813aa39740 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -606,63 +606,9 @@ kernel_physical_mapping_init(unsigned long start,
606void __init initmem_init(void) 606void __init initmem_init(void)
607{ 607{
608 memblock_x86_register_active_regions(0, 0, max_pfn); 608 memblock_x86_register_active_regions(0, 0, max_pfn);
609 init_memory_mapping_high();
610} 609}
611#endif 610#endif
612 611
613struct mapping_work_data {
614 unsigned long start;
615 unsigned long end;
616 unsigned long pfn_mapped;
617};
618
619static int __init_refok
620mapping_work_fn(unsigned long start_pfn, unsigned long end_pfn, void *datax)
621{
622 struct mapping_work_data *data = datax;
623 unsigned long pfn_mapped;
624 unsigned long final_start, final_end;
625
626 final_start = max_t(unsigned long, start_pfn<<PAGE_SHIFT, data->start);
627 final_end = min_t(unsigned long, end_pfn<<PAGE_SHIFT, data->end);
628
629 if (final_end <= final_start)
630 return 0;
631
632 pfn_mapped = init_memory_mapping(final_start, final_end);
633
634 if (pfn_mapped > data->pfn_mapped)
635 data->pfn_mapped = pfn_mapped;
636
637 return 0;
638}
639
640static unsigned long __init_refok
641init_memory_mapping_active_regions(unsigned long start, unsigned long end)
642{
643 struct mapping_work_data data;
644
645 data.start = start;
646 data.end = end;
647 data.pfn_mapped = 0;
648
649 work_with_active_regions(MAX_NUMNODES, mapping_work_fn, &data);
650
651 return data.pfn_mapped;
652}
653
654void __init_refok init_memory_mapping_high(void)
655{
656 if (max_pfn > max_low_pfn) {
657 max_pfn_mapped = init_memory_mapping_active_regions(1UL<<32,
658 max_pfn<<PAGE_SHIFT);
659 /* can we preserve max_low_pfn ? */
660 max_low_pfn = max_pfn;
661
662 memblock.current_limit = get_max_mapped();
663 }
664}
665
666void __init paging_init(void) 612void __init paging_init(void)
667{ 613{
668 unsigned long max_zone_pfns[MAX_NR_ZONES]; 614 unsigned long max_zone_pfns[MAX_NR_ZONES];