diff options
author | Yinghai Lu <yinghai@kernel.org> | 2010-08-25 16:39:17 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2010-08-27 14:12:29 -0400 |
commit | 72d7c3b33c980843e756681fb4867dc1efd62a76 (patch) | |
tree | 9607345d9fa055dd501aacf0772258fb72897035 /arch/x86/include/asm/e820.h | |
parent | 301ff3e88ef9ff4bdb92f36a3e6170fce4c9dd34 (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.h | 14 |
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; | |||
117 | extern u64 find_e820_area(u64 start, u64 end, u64 size, u64 align); | 117 | extern u64 find_e820_area(u64 start, u64 end, u64 size, u64 align); |
118 | extern u64 find_e820_area_size(u64 start, u64 *sizep, u64 align); | 118 | extern u64 find_e820_area_size(u64 start, u64 *sizep, u64 align); |
119 | extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align); | 119 | extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align); |
120 | #include <linux/early_res.h> | ||
121 | 120 | ||
122 | extern unsigned long e820_end_of_ram_pfn(void); | 121 | extern unsigned long e820_end_of_ram_pfn(void); |
123 | extern unsigned long e820_end_of_low_ram_pfn(void); | 122 | extern unsigned long e820_end_of_low_ram_pfn(void); |
124 | extern 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); | ||
129 | extern void e820_register_active_regions(int nid, unsigned long start_pfn, | 123 | extern void e820_register_active_regions(int nid, unsigned long start_pfn, |
130 | unsigned long end_pfn); | 124 | unsigned long end_pfn); |
131 | extern u64 e820_hole_size(u64 start, u64 end); | 125 | extern u64 e820_hole_size(u64 start, u64 end); |
126 | |||
127 | extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align); | ||
128 | |||
129 | void memblock_x86_fill(void); | ||
130 | |||
132 | extern void finish_e820_parsing(void); | 131 | extern void finish_e820_parsing(void); |
133 | extern void e820_reserve_resources(void); | 132 | extern void e820_reserve_resources(void); |
134 | extern void e820_reserve_resources_late(void); | 133 | extern void e820_reserve_resources_late(void); |
135 | extern void setup_memory_map(void); | 134 | extern void setup_memory_map(void); |
136 | extern char *default_machine_specific_memory_setup(void); | 135 | extern char *default_machine_specific_memory_setup(void); |
137 | 136 | ||
137 | void reserve_early(u64 start, u64 end, char *name); | ||
138 | void 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. |