diff options
-rw-r--r-- | include/linux/mm.h | 2 | ||||
-rw-r--r-- | mm/nobootmem.c | 25 | ||||
-rw-r--r-- | mm/page_alloc.c | 28 |
3 files changed, 25 insertions, 30 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index f6385fc17ad4..679300c050f5 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1309,8 +1309,6 @@ int add_from_early_node_map(struct range *range, int az, | |||
1309 | int nr_range, int nid); | 1309 | int nr_range, int nid); |
1310 | u64 __init find_memory_core_early(int nid, u64 size, u64 align, | 1310 | u64 __init find_memory_core_early(int nid, u64 size, u64 align, |
1311 | u64 goal, u64 limit); | 1311 | u64 goal, u64 limit); |
1312 | void *__alloc_memory_core_early(int nodeid, u64 size, u64 align, | ||
1313 | u64 goal, u64 limit); | ||
1314 | typedef int (*work_fn_t)(unsigned long, unsigned long, void *); | 1312 | typedef int (*work_fn_t)(unsigned long, unsigned long, void *); |
1315 | extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data); | 1313 | extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data); |
1316 | extern void sparse_memory_present_with_active_regions(int nid); | 1314 | extern void sparse_memory_present_with_active_regions(int nid); |
diff --git a/mm/nobootmem.c b/mm/nobootmem.c index 6a018e49b7be..e2bdb07079ce 100644 --- a/mm/nobootmem.c +++ b/mm/nobootmem.c | |||
@@ -40,6 +40,31 @@ unsigned long max_pfn; | |||
40 | unsigned long saved_max_pfn; | 40 | unsigned long saved_max_pfn; |
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | static void * __init __alloc_memory_core_early(int nid, u64 size, u64 align, | ||
44 | u64 goal, u64 limit) | ||
45 | { | ||
46 | void *ptr; | ||
47 | u64 addr; | ||
48 | |||
49 | if (limit > memblock.current_limit) | ||
50 | limit = memblock.current_limit; | ||
51 | |||
52 | addr = find_memory_core_early(nid, size, align, goal, limit); | ||
53 | |||
54 | if (addr == MEMBLOCK_ERROR) | ||
55 | return NULL; | ||
56 | |||
57 | ptr = phys_to_virt(addr); | ||
58 | memset(ptr, 0, size); | ||
59 | memblock_x86_reserve_range(addr, addr + size, "BOOTMEM"); | ||
60 | /* | ||
61 | * The min_count is set to 0 so that bootmem allocated blocks | ||
62 | * are never reported as leaks. | ||
63 | */ | ||
64 | kmemleak_alloc(ptr, size, 0, 0); | ||
65 | return ptr; | ||
66 | } | ||
67 | |||
43 | /* | 68 | /* |
44 | * free_bootmem_late - free bootmem pages directly to page allocator | 69 | * free_bootmem_late - free bootmem pages directly to page allocator |
45 | * @addr: starting address of the range | 70 | * @addr: starting address of the range |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a243a7fd6922..603513609ba5 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -3780,34 +3780,6 @@ int __init add_from_early_node_map(struct range *range, int az, | |||
3780 | return nr_range; | 3780 | return nr_range; |
3781 | } | 3781 | } |
3782 | 3782 | ||
3783 | #ifdef CONFIG_NO_BOOTMEM | ||
3784 | void * __init __alloc_memory_core_early(int nid, u64 size, u64 align, | ||
3785 | u64 goal, u64 limit) | ||
3786 | { | ||
3787 | void *ptr; | ||
3788 | u64 addr; | ||
3789 | |||
3790 | if (limit > memblock.current_limit) | ||
3791 | limit = memblock.current_limit; | ||
3792 | |||
3793 | addr = find_memory_core_early(nid, size, align, goal, limit); | ||
3794 | |||
3795 | if (addr == MEMBLOCK_ERROR) | ||
3796 | return NULL; | ||
3797 | |||
3798 | ptr = phys_to_virt(addr); | ||
3799 | memset(ptr, 0, size); | ||
3800 | memblock_x86_reserve_range(addr, addr + size, "BOOTMEM"); | ||
3801 | /* | ||
3802 | * The min_count is set to 0 so that bootmem allocated blocks | ||
3803 | * are never reported as leaks. | ||
3804 | */ | ||
3805 | kmemleak_alloc(ptr, size, 0, 0); | ||
3806 | return ptr; | ||
3807 | } | ||
3808 | #endif | ||
3809 | |||
3810 | |||
3811 | void __init work_with_active_regions(int nid, work_fn_t work_fn, void *data) | 3783 | void __init work_with_active_regions(int nid, work_fn_t work_fn, void *data) |
3812 | { | 3784 | { |
3813 | int i; | 3785 | int i; |