Skip to content

Commit a29c0b0

Browse files
committed
Merge tag 'fixes-2026-05-30' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock
Pull memblock fix from Mike Rapoport: "Fix regression from memblock_free_late() refactoring After refactoring of memblock_free_late() and free_init_pages() it became possible to call memblock_free() after memblock init data was discarded. Make sure memblock_free() does not touch memblock.reserved unless it is called early enough or when ARCH_KEEP_MEMBLOCK is enabled" * tag 'fixes-2026-05-30' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock: memblock: don't touch memblock arrays when memblock_free() is called late
2 parents 670b77d + 7c2eee9 commit a29c0b0

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

mm/memblock.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -989,13 +989,15 @@ void __init_memblock memblock_free(void *ptr, size_t size)
989989
int __init_memblock memblock_phys_free(phys_addr_t base, phys_addr_t size)
990990
{
991991
phys_addr_t end = base + size - 1;
992-
int ret;
992+
int ret = 0;
993993

994994
memblock_dbg("%s: [%pa-%pa] %pS\n", __func__,
995995
&base, &end, (void *)_RET_IP_);
996996

997997
kmemleak_free_part_phys(base, size);
998-
ret = memblock_remove_range(&memblock.reserved, base, size);
998+
999+
if (!slab_is_available() || IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK))
1000+
ret = memblock_remove_range(&memblock.reserved, base, size);
9991001

10001002
if (slab_is_available())
10011003
__free_reserved_area(base, base + size, -1);

0 commit comments

Comments
 (0)