The free_bootmem_late and memblock_free_late do exactly the same thing: they iterate over a range and give pages to the page allocator. Replace calls to free_bootmem_late with calls to memblock_free_late and remove the bootmem variant.
Unified · Split
| @@ -12,6 +12,7 @@ · 11 unmodified lines | ||
| 12 | 12 | #include <linux/mm.h> |
| 13 | 13 | #include <linux/miscdevice.h> |
| 14 | 14 | #include <linux/bootmem.h> |
| 15 | +#include <linux/memblock.h> | |
| 15 | 16 | #include <linux/export.h> |
| 16 | 17 | #include <linux/refcount.h> |
| 17 | 18 | |
| @@ -190,7 +191,7 @@ static void __init mdesc_memblock_free(struct mdesc_handle *hp) · 172 unmodified lines | ||
| 190 | 191 | |
| 191 | 192 | alloc_size = PAGE_ALIGN(hp->handle_size); |
| 192 | 193 | start = __pa(hp); |
| 193 | − free_bootmem_late(start, alloc_size); | |
| 194 | + memblock_free_late(start, alloc_size); | |
| 194 | 195 | } |
| 195 | 196 | |
| 196 | 197 | static struct mdesc_mem_ops memblock_mdesc_ops = { |
| @@ -333,7 +333,7 @@ void __init efi_reserve_boot_services(void) · 332 unmodified lines | ||
| 333 | 333 | |
| 334 | 334 | /* |
| 335 | 335 | * Because the following memblock_reserve() is paired |
| 336 | − * with free_bootmem_late() for this region in | |
| 336 | + * with memblock_free_late() for this region in | |
| 337 | 337 | * efi_free_boot_services(), we must be extremely |
| 338 | 338 | * careful not to reserve, and subsequently free, |
| 339 | 339 | * critical regions of memory (like the kernel image) or |
| @@ -364,7 +364,7 @@ void __init efi_reserve_boot_services(void) · 24 unmodified lines | ||
| 364 | 364 | * doesn't make sense as far as the firmware is |
| 365 | 365 | * concerned, but it does provide us with a way to tag |
| 366 | 366 | * those regions that must not be paired with |
| 367 | − * free_bootmem_late(). | |
| 367 | + * memblock_free_late(). | |
| 368 | 368 | */ |
| 369 | 369 | md->attribute |= EFI_MEMORY_RUNTIME; |
| 370 | 370 | } |
| @@ -414,7 +414,7 @@ void __init efi_free_boot_services(void) · 43 unmodified lines | ||
| 414 | 414 | size -= rm_size; |
| 415 | 415 | } |
| 416 | 416 | |
| 417 | − free_bootmem_late(start, size); | |
| 417 | + memblock_free_late(start, size); | |
| 418 | 418 | } |
| 419 | 419 | |
| 420 | 420 | if (!num_entries) |
| @@ -235,7 +235,7 @@ static int __init map_properties(void) · 234 unmodified lines | ||
| 235 | 235 | */ |
| 236 | 236 | data->len = 0; |
| 237 | 237 | memunmap(data); |
| 238 | − free_bootmem_late(pa_data + sizeof(*data), data_len); | |
| 238 | + memblock_free_late(pa_data + sizeof(*data), data_len); | |
| 239 | 239 | |
| 240 | 240 | return ret; |
| 241 | 241 | } |
| @@ -30,8 +30,6 @@ extern unsigned long free_all_bootmem(void); · 29 unmodified lines | ||
| 30 | 30 | extern void reset_node_managed_pages(pg_data_t *pgdat); |
| 31 | 31 | extern void reset_all_zones_managed_pages(void); |
| 32 | 32 | |
| 33 | −extern void free_bootmem_late(unsigned long physaddr, unsigned long size); | |
| 34 | − | |
| 35 | 33 | /* We are using top down, so it is safe to use 0 here */ |
| 36 | 34 | #define BOOTMEM_LOW_LIMIT 0 |
| 37 | 35 | |
| @@ -33,30 +33,6 @@ unsigned long min_low_pfn; · 32 unmodified lines | ||
| 33 | 33 | unsigned long max_pfn; |
| 34 | 34 | unsigned long long max_possible_pfn; |
| 35 | 35 | |
| 36 | −/** | |
| 37 | − * free_bootmem_late - free bootmem pages directly to page allocator | |
| 38 | − * @addr: starting address of the range | |
| 39 | − * @size: size of the range in bytes | |
| 40 | − * | |
| 41 | − * This is only useful when the bootmem allocator has already been torn | |
| 42 | − * down, but we are still initializing the system. Pages are given directly | |
| 43 | − * to the page allocator, no bootmem metadata is updated because it is gone. | |
| 44 | − */ | |
| 45 | −void __init free_bootmem_late(unsigned long addr, unsigned long size) | |
| 46 | −{ | |
| 47 | − unsigned long cursor, end; | |
| 48 | − | |
| 49 | − kmemleak_free_part_phys(addr, size); | |
| 50 | − | |
| 51 | − cursor = PFN_UP(addr); | |
| 52 | − end = PFN_DOWN(addr + size); | |
| 53 | − | |
| 54 | − for (; cursor < end; cursor++) { | |
| 55 | − __free_pages_bootmem(pfn_to_page(cursor), cursor, 0); | |
| 56 | − totalram_pages++; | |
| 57 | − } | |
| 58 | −} | |
| 59 | − | |
| 60 | 36 | static void __init __free_pages_memory(unsigned long start, unsigned long end) |
| 61 | 37 | { |
| 62 | 38 | int order; |