Re: Warning from free_reserved_area() in next-20260325+
From: Mike Rapoport <rppt@kernel.org>
Date: 2026-03-27 17:12:31
Also in:
linux-arm-kernel, linux-efi, linux-fsdevel, linux-iommu, linux-mm, linux-trace-kernel, linuxppc-dev, lkml, sparclinux
Subsystem:
the rest, x86 architecture (32-bit and 64-bit) · Maintainers:
Linus Torvalds, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen
Hi Bert, On Fri, Mar 27, 2026 at 03:01:08PM +0100, Bert Karwatzki wrote:
Starting with linux next-20260325 I see the following warning early in the boot process of a machine running debian stable (trixie) (except for the kernel):
Thanks for the report!
[ 0.027118] [ T0] ------------[ cut here ]------------ [ 0.027118] [ T0] Cannot free reserved memory because of deferred initialization of the memory map [ 0.027119] [ T0] WARNING: mm/memblock.c:904 at __free_reserved_area+0xa9/0xc0, CPU#0: swapper/0/0 [ 0.027122] [ T0] Modules linked in: [ 0.027123] [ T0] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 7.0.0-rc5-next-20260326-master #385 PREEMPT_RT [ 0.027125] [ T0] Hardware name: ASUS System Product Name/ROG STRIX B850-F GAMING WIFI, BIOS 1627 02/05/2026 [ 0.027125] [ T0] RIP: 0010:__free_reserved_area+0xa9/0xc0 [ 0.027126] [ T0] Code: 48 89 df 48 89 ee e8 06 fe ff ff 48 89 c3 48 39 e8 72 a0 5b 4c 89 e8 5d 41 5c 41 5d 41 5e c3 cc cc cc cc 48 8d 3d 97 c2 c6 00 <67> 48 0f b9 3a 45 31 ed eb df 66 66 2e 0f 1f 84 00 00 00 00 00 66 [ 0.027127] [ T0] RSP: 0000:ffffffff9b203e98 EFLAGS: 00010202 [ 0.027128] [ T0] RAX: 0000000e91c00001 RBX: ffffffff9b100c0f RCX: 0000000080000001 [ 0.027128] [ T0] RDX: 00000000000000cc RSI: 0000000e2d42d000 RDI: ffffffff9b32ef60 [ 0.027128] [ T0] RBP: ffff9eeafdd6fbc0 R08: 0000000000000000 R09: 0000000000000001 [ 0.027129] [ T0] R10: 0000000000001000 R11: 8000000000000163 R12: 000000000000006f [ 0.027129] [ T0] R13: 0000000000000000 R14: 0000000000000045 R15: 000000005c8a1000 [ 0.027129] [ T0] FS: 0000000000000000(0000) GS:ffff9eeb21c05000(0000) knlGS:0000000000000000 [ 0.027130] [ T0] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 0.027130] [ T0] CR2: ffff9ee8ad801000 CR3: 0000000e2ce1e000 CR4: 0000000000f50ef0 [ 0.027131] [ T0] PKRU: 55555554 [ 0.027131] [ T0] Call Trace: [ 0.027132] [ T0] <TASK> [ 0.027132] [ T0] free_reserved_area+0x89/0xd0 [ 0.027133] [ T0] alternative_instructions+0xee/0x110 [ 0.027136] [ T0] arch_cpu_finalize_init+0x10f/0x160 [ 0.027138] [ T0] start_kernel+0x686/0x710 [ 0.027140] [ T0] x86_64_start_reservations+0x24/0x30 [ 0.027141] [ T0] x86_64_start_kernel+0xd4/0xe0 [ 0.027142] [ T0] common_startup_64+0x13e/0x141 [ 0.027143] [ T0] </TASK> [ 0.027144] [ T0] ---[ end trace 0000000000000000 ]---
Does this patch fix it for you?
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index e87da25d1236..62936a3bde19 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c@@ -2448,19 +2448,31 @@ void __init alternative_instructions(void) __smp_locks, __smp_locks_end, _text, _etext); } +#endif + restart_nmi(); + alternatives_patched = 1; + + alt_reloc_selftest(); +} + +#ifdef CONFIG_SMP +/* + * With CONFIG_DEFERRED_STRUCT_PAGE_INIT enabled we can free_init_pages() only + * after the deferred initialization of the memory map is complete. + */ +static int __init free_smp_locks(void) +{ if (!uniproc_patched || num_possible_cpus() == 1) { free_init_pages("SMP alternatives", (unsigned long)__smp_locks, (unsigned long)__smp_locks_end); } -#endif - restart_nmi(); - alternatives_patched = 1; - - alt_reloc_selftest(); + return 0; } +arch_initcall(free_smp_locks); +#endif /** * text_poke_early - Update instructions on a live kernel at boot time
Bert Karwatzki
-- Sincerely yours, Mike.