aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/e820.h
diff options
context:
space:
mode:
authorYinghai Lu <yinghai@kernel.org>2010-08-25 16:39:17 -0400
committerH. Peter Anvin <hpa@zytor.com>2010-08-27 14:12:29 -0400
commit72d7c3b33c980843e756681fb4867dc1efd62a76 (patch)
tree9607345d9fa055dd501aacf0772258fb72897035 /arch/x86/include/asm/e820.h
parent301ff3e88ef9ff4bdb92f36a3e6170fce4c9dd34 (diff)
x86: Use memblock to replace early_res
1. replace find_e820_area with memblock_find_in_range 2. replace reserve_early with memblock_x86_reserve_range 3. replace free_early with memblock_x86_free_range. 4. NO_BOOTMEM will switch to use memblock too. 5. use _e820, _early wrap in the patch, in following patch, will replace them all 6. because memblock_x86_free_range support partial free, we can remove some special care 7. Need to make sure that memblock_find_in_range() is called after memblock_x86_fill() so adjust some calling later in setup.c::setup_arch() -- corruption_check and mptable_update -v2: Move reserve_brk() early Before fill_memblock_area, to avoid overlap between brk and memblock_find_in_range() that could happen We have more then 128 RAM entry in E820 tables, and memblock_x86_fill() could use memblock_find_in_range() to find a new place for memblock.memory.region array. and We don't need to use extend_brk() after fill_memblock_area() So move reserve_brk() early before fill_memblock_area(). -v3: Move find_smp_config early To make sure memblock_find_in_range not find wrong place, if BIOS doesn't put mptable in right place. -v4: Treat RESERVED_KERN as RAM in memblock.memory. and they are already in memblock.reserved already.. use __NOT_KEEP_MEMBLOCK to make sure memblock related code could be freed later. -v5: Generic version __memblock_find_in_range() is going from high to low, and for 32bit active_region for 32bit does include high pages need to replace the limit with memblock.default_alloc_limit, aka get_max_mapped() -v6: Use current_limit instead -v7: check with MEMBLOCK_ERROR instead of -1ULL or -1L -v8: Set memblock_can_resize early to handle EFI with more RAM entries -v9: update after kmemleak changes in mainline Suggested-by: David S. Miller <davem@davemloft.net> Suggested-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Suggested-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/include/asm/e820.h')
-rw-r--r--arch/x86/include/asm/e820.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/x86/include/asm/e820.h b/arch/x86/include/asm/e820.h
index ec8a52d14ab1..388fed291467 100644
--- a/arch/x86/include/asm/e820.h
+++ b/arch/x86/include/asm/e820.h
@@ -117,24 +117,26 @@ extern unsigned long end_user_pfn;
117extern u64 find_e820_area(u64 start, u64 end, u64 size, u64 align); 117extern u64 find_e820_area(u64 start, u64 end, u64 size, u64 align);
118extern u64 find_e820_area_size(u64 start, u64 *sizep, u64 align); 118extern u64 find_e820_area_size(u64 start, u64 *sizep, u64 align);
119extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align); 119extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align);
120#include <linux/early_res.h>
121 120
122extern unsigned long e820_end_of_ram_pfn(void); 121extern unsigned long e820_end_of_ram_pfn(void);
123extern unsigned long e820_end_of_low_ram_pfn(void); 122extern unsigned long e820_end_of_low_ram_pfn(void);
124extern int e820_find_active_region(const struct e820entry *ei,
125 unsigned long start_pfn,
126 unsigned long last_pfn,
127 unsigned long *ei_startpfn,
128 unsigned long *ei_endpfn);
129extern void e820_register_active_regions(int nid, unsigned long start_pfn, 123extern void e820_register_active_regions(int nid, unsigned long start_pfn,
130 unsigned long end_pfn); 124 unsigned long end_pfn);
131extern u64 e820_hole_size(u64 start, u64 end); 125extern u64 e820_hole_size(u64 start, u64 end);
126
127extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align);
128
129void memblock_x86_fill(void);
130
132extern void finish_e820_parsing(void); 131extern void finish_e820_parsing(void);
133extern void e820_reserve_resources(void); 132extern void e820_reserve_resources(void);
134extern void e820_reserve_resources_late(void); 133extern void e820_reserve_resources_late(void);
135extern void setup_memory_map(void); 134extern void setup_memory_map(void);
136extern char *default_machine_specific_memory_setup(void); 135extern char *default_machine_specific_memory_setup(void);
137 136
137void reserve_early(u64 start, u64 end, char *name);
138void free_early(u64 start, u64 end);
139
138/* 140/*
139 * Returns true iff the specified range [s,e) is completely contained inside 141 * Returns true iff the specified range [s,e) is completely contained inside
140 * the ISA region. 142 * the ISA region.