[PATCH 0/2] tracing: Fix early boot trace buffer allocation and tracefs init crash
flat view
HOTtoday
From: Amit Machhiwal <hidden>
Date: 2026-10-09 16:36:42
Also in:
kvm, linuxppc-dev, lkml, stable
This series addresses an early boot crash and trace buffer allocation failure reported on ppc64le KVM guests [1] (and reproducible under CONFIG_DEFERRED_STRUCT_PAGE_INIT=y with large static kernel footprints). Patch 1 fixes the crash (NULL pointer dereference in __find_event_file()): When trace buffer allocation fails during early boot, tracing is left disabled. However, tracer_init_tracefs_work_func() runs asynchronously via fs_initcall and traverses uninitialized event lists without checking tracing_disabled. Checking tracing_disabled early averts the crash. Patch 2 fixes the root cause of the early allocation failure: During early_trace_init(), __rb_allocate_pages() performs a heuristic check using si_mem_available(). Under CONFIG_DEFERRED_STRUCT_PAGE_INIT=y, NR_FREE_PAGES only reflects the initial non-deferred pool (e.g. 1 section per node) because the remaining memory has not yet been initialized. On kernels with large static binary footprints (debug configs, early SLUB/vmalloc/ftrace records), this pool is quickly consumed, causing si_mem_available() to return 0 and trigger a false -ENOMEM before the buddy allocator has the opportunity to grow the zone on demand via deferred_grow_zone(). Skipping the check during SYSTEM_BOOTING allows the allocation to succeed. Both fixes have been verified by Michal Suchánek. [1] https://lore.kernel.org/all/arYskzbiaNzBR9MD@kunlun.suse.cz/ (local) Amit Machhiwal (2): tracing: Do not initialize tracefs work if tracing is disabled ring-buffer: Do not check si_mem_available() during SYSTEM_BOOTING kernel/trace/ring_buffer.c | 8 +++++++- kernel/trace/trace.c | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) base-commit: af32da41b0327b9c6a37856ba82b6760d6c8d10e -- 2.54.0 (Apple Git-157)