|
@@ -737,35 +737,17 @@ core_initcall(e820_mark_nvs_memory);
|
|
|
/*
|
|
|
* pre allocated 4k and reserved it in memblock and e820_saved
|
|
|
*/
|
|
|
-u64 __init early_reserve_e820(u64 startt, u64 sizet, u64 align)
|
|
|
+u64 __init early_reserve_e820(u64 size, u64 align)
|
|
|
{
|
|
|
- u64 size = 0;
|
|
|
u64 addr;
|
|
|
- u64 start;
|
|
|
|
|
|
- for (start = startt; ; start += size) {
|
|
|
- start = memblock_x86_find_in_range_size(start, &size, align);
|
|
|
- if (!start)
|
|
|
- return 0;
|
|
|
- if (size >= sizet)
|
|
|
- break;
|
|
|
+ addr = __memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE);
|
|
|
+ if (addr) {
|
|
|
+ e820_update_range_saved(addr, size, E820_RAM, E820_RESERVED);
|
|
|
+ printk(KERN_INFO "update e820_saved for early_reserve_e820\n");
|
|
|
+ update_e820_saved();
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_X86_32
|
|
|
- if (start >= MAXMEM)
|
|
|
- return 0;
|
|
|
- if (start + size > MAXMEM)
|
|
|
- size = MAXMEM - start;
|
|
|
-#endif
|
|
|
-
|
|
|
- addr = round_down(start + size - sizet, align);
|
|
|
- if (addr < start)
|
|
|
- return 0;
|
|
|
- memblock_x86_reserve_range(addr, addr + sizet, "new next");
|
|
|
- e820_update_range_saved(addr, sizet, E820_RAM, E820_RESERVED);
|
|
|
- printk(KERN_INFO "update e820_saved for early_reserve_e820\n");
|
|
|
- update_e820_saved();
|
|
|
-
|
|
|
return addr;
|
|
|
}
|
|
|
|