Skip to content

Commit 87ce9e8

Browse files
committed
memblock, treewide: make memblock_free() handle late freeing
It shouldn't be responsibility of memblock users to detect if they free memory allocated from memblock late and should use memblock_free_late(). Make memblock_free() and memblock_phys_free() take care of late memory freeing and drop memblock_free_late(). Link: https://patch.msgid.link/20260323074836.3653702-9-rppt@kernel.org Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
1 parent b2129a3 commit 87ce9e8

11 files changed

Lines changed: 31 additions & 49 deletions

File tree

arch/sparc/kernel/mdesc.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,12 @@ static struct mdesc_handle * __init mdesc_memblock_alloc(unsigned int mdesc_size
183183
static void __init mdesc_memblock_free(struct mdesc_handle *hp)
184184
{
185185
unsigned int alloc_size;
186-
unsigned long start;
187186

188187
BUG_ON(refcount_read(&hp->refcnt) != 0);
189188
BUG_ON(!list_empty(&hp->list));
190189

191190
alloc_size = PAGE_ALIGN(hp->handle_size);
192-
start = __pa(hp);
193-
memblock_free_late(start, alloc_size);
191+
memblock_free(hp, alloc_size);
194192
}
195193

196194
static struct mdesc_mem_ops memblock_mdesc_ops = {

arch/x86/kernel/setup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ int __init ima_free_kexec_buffer(void)
426426
if (!ima_kexec_buffer_size)
427427
return -ENOENT;
428428

429-
memblock_free_late(ima_kexec_buffer_phys,
429+
memblock_phys_free(ima_kexec_buffer_phys,
430430
ima_kexec_buffer_size);
431431

432432
ima_kexec_buffer_phys = 0;

arch/x86/platform/efi/memmap.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ static
3434
void __init __efi_memmap_free(u64 phys, unsigned long size, unsigned long flags)
3535
{
3636
if (flags & EFI_MEMMAP_MEMBLOCK) {
37-
if (slab_is_available())
38-
memblock_free_late(phys, size);
39-
else
40-
memblock_phys_free(phys, size);
37+
memblock_phys_free(phys, size);
4138
} else if (flags & EFI_MEMMAP_SLAB) {
4239
struct page *p = pfn_to_page(PHYS_PFN(phys));
4340
unsigned int order = get_order(size);

arch/x86/platform/efi/quirks.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ void __init efi_reserve_boot_services(void)
372372
* doesn't make sense as far as the firmware is
373373
* concerned, but it does provide us with a way to tag
374374
* those regions that must not be paired with
375-
* memblock_free_late().
375+
* memblock_phys_free().
376376
*/
377377
md->attribute |= EFI_MEMORY_RUNTIME;
378378
}

drivers/firmware/efi/apple-properties.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ static int __init map_properties(void)
226226
*/
227227
data->len = 0;
228228
memunmap(data);
229-
memblock_free_late(pa_data + sizeof(*data), data_len);
229+
memblock_phys_free(pa_data + sizeof(*data), data_len);
230230

231231
return ret;
232232
}

drivers/of/kexec.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ int __init ima_free_kexec_buffer(void)
175175
if (ret)
176176
return ret;
177177

178-
memblock_free_late(addr, size);
178+
memblock_phys_free(addr, size);
179179
return 0;
180180
}
181181
#endif

include/linux/memblock.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,6 @@ void __next_mem_range_rev(u64 *idx, int nid, enum memblock_flags flags,
172172
struct memblock_type *type_b, phys_addr_t *out_start,
173173
phys_addr_t *out_end, int *out_nid);
174174

175-
void memblock_free_late(phys_addr_t base, phys_addr_t size);
176-
177175
#ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP
178176
static inline void __next_physmem_range(u64 *idx, struct memblock_type *type,
179177
phys_addr_t *out_start,

kernel/dma/swiotlb.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -546,10 +546,10 @@ void __init swiotlb_exit(void)
546546
free_pages(tbl_vaddr, get_order(tbl_size));
547547
free_pages((unsigned long)mem->slots, get_order(slots_size));
548548
} else {
549-
memblock_free_late(__pa(mem->areas),
549+
memblock_free(mem->areas,
550550
array_size(sizeof(*mem->areas), mem->nareas));
551-
memblock_free_late(mem->start, tbl_size);
552-
memblock_free_late(__pa(mem->slots), slots_size);
551+
memblock_phys_free(mem->start, tbl_size);
552+
memblock_free(mem->slots, slots_size);
553553
}
554554

555555
memset(mem, 0, sizeof(*mem));

lib/bootconfig.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ static inline void __init xbc_free_mem(void *addr, size_t size, bool early)
6464
if (early)
6565
memblock_free(addr, size);
6666
else if (addr)
67-
memblock_free_late(__pa(addr), size);
67+
memblock_free(addr, size);
6868
}
6969

7070
#else /* !__KERNEL__ */

mm/kfence/core.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -731,10 +731,10 @@ static bool __init kfence_init_pool_early(void)
731731
* fails for the first page, and therefore expect addr==__kfence_pool in
732732
* most failure cases.
733733
*/
734-
memblock_free_late(__pa(addr), KFENCE_POOL_SIZE - (addr - (unsigned long)__kfence_pool));
734+
memblock_free((void *)addr, KFENCE_POOL_SIZE - (addr - (unsigned long)__kfence_pool));
735735
__kfence_pool = NULL;
736736

737-
memblock_free_late(__pa(kfence_metadata_init), KFENCE_METADATA_SIZE);
737+
memblock_free(kfence_metadata_init, KFENCE_METADATA_SIZE);
738738
kfence_metadata_init = NULL;
739739

740740
return false;

0 commit comments

Comments
 (0)