summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/include/asm/page_types.h2
-rw-r--r--arch/x86/kernel/setup.c8
-rw-r--r--arch/x86/mm/init_64.c54
-rw-r--r--arch/x86/mm/numa_64.c2
4 files changed, 8 insertions, 58 deletions
diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 97e6007..bce688d 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -54,8 +54,6 @@ static inline phys_addr_t get_max_mapped(void)
extern unsigned long init_memory_mapping(unsigned long start,
unsigned long end);
-void init_memory_mapping_high(void);
-
extern void initmem_init(void);
extern void free_initmem(void);
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 46e684f..c3a606c 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -963,6 +963,14 @@ void __init setup_arch(char **cmdline_p)
max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
max_pfn_mapped = max_low_pfn_mapped;
+#ifdef CONFIG_X86_64
+ if (max_pfn > max_low_pfn) {
+ max_pfn_mapped = init_memory_mapping(1UL<<32,
+ max_pfn<<PAGE_SHIFT);
+ /* can we preseve max_low_pfn ?*/
+ max_low_pfn = max_pfn;
+ }
+#endif
memblock.current_limit = get_max_mapped();
/*
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 470cc47..c8813aa 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,
void __init initmem_init(void)
{
memblock_x86_register_active_regions(0, 0, max_pfn);
- init_memory_mapping_high();
}
#endif
-struct mapping_work_data {
- unsigned long start;
- unsigned long end;
- unsigned long pfn_mapped;
-};
-
-static int __init_refok
-mapping_work_fn(unsigned long start_pfn, unsigned long end_pfn, void *datax)
-{
- struct mapping_work_data *data = datax;
- unsigned long pfn_mapped;
- unsigned long final_start, final_end;
-
- final_start = max_t(unsigned long, start_pfn<<PAGE_SHIFT, data->start);
- final_end = min_t(unsigned long, end_pfn<<PAGE_SHIFT, data->end);
-
- if (final_end <= final_start)
- return 0;
-
- pfn_mapped = init_memory_mapping(final_start, final_end);
-
- if (pfn_mapped > data->pfn_mapped)
- data->pfn_mapped = pfn_mapped;
-
- return 0;
-}
-
-static unsigned long __init_refok
-init_memory_mapping_active_regions(unsigned long start, unsigned long end)
-{
- struct mapping_work_data data;
-
- data.start = start;
- data.end = end;
- data.pfn_mapped = 0;
-
- work_with_active_regions(MAX_NUMNODES, mapping_work_fn, &data);
-
- return data.pfn_mapped;
-}
-
-void __init_refok init_memory_mapping_high(void)
-{
- if (max_pfn > max_low_pfn) {
- max_pfn_mapped = init_memory_mapping_active_regions(1UL<<32,
- max_pfn<<PAGE_SHIFT);
- /* can we preserve max_low_pfn ? */
- max_low_pfn = max_pfn;
-
- memblock.current_limit = get_max_mapped();
- }
-}
-
void __init paging_init(void)
{
unsigned long max_zone_pfns[MAX_NR_ZONES];
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
index 74064e8..86491ba 100644
--- a/arch/x86/mm/numa_64.c
+++ b/arch/x86/mm/numa_64.c
@@ -543,8 +543,6 @@ static int __init numa_register_memblks(struct numa_meminfo *mi)
if (!numa_meminfo_cover_memory(mi))
return -EINVAL;
- init_memory_mapping_high();
-
/* Finally register nodes. */
for_each_node_mask(nid, node_possible_map) {
u64 start = (u64)max_pfn << PAGE_SHIFT;