mirror-linux/kernel/trace
Guenter Roeck be55257fab ftrace: Do not over-allocate ftrace memory
The pg_remaining calculation in ftrace_process_locs() assumes that
ENTRIES_PER_PAGE multiplied by 2^order equals the actual capacity of the
allocated page group. However, ENTRIES_PER_PAGE is PAGE_SIZE / ENTRY_SIZE
(integer division). When PAGE_SIZE is not a multiple of ENTRY_SIZE (e.g.
4096 / 24 = 170 with remainder 16), high-order allocations (like 256 pages)
have significantly more capacity than 256 * 170. This leads to pg_remaining
being underestimated, which in turn makes skip (derived from skipped -
pg_remaining) larger than expected, causing the WARN(skip != remaining)
to trigger.

Extra allocated pages for ftrace: 2 with 654 skipped
WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:7295 ftrace_process_locs+0x5bf/0x5e0

A similar problem in ftrace_allocate_records() can result in allocating
too many pages. This can trigger the second warning in
ftrace_process_locs().

Extra allocated pages for ftrace
WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:7276 ftrace_process_locs+0x548/0x580

Use the actual capacity of a page group to determine the number of pages
to allocate. Have ftrace_allocate_pages() return the number of allocated
pages to avoid having to calculate it. Use the actual page group capacity
when validating the number of unused pages due to skipped entries.
Drop the definition of ENTRIES_PER_PAGE since it is no longer used.

Cc: stable@vger.kernel.org
Fixes: 4a3efc6baf ("ftrace: Update the mcount_loc check of skipped entries")
Link: https://patch.msgid.link/20260113152243.3557219-1-linux@roeck-us.net
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
2026-01-15 10:17:53 -05:00
..
rv rv: Convert to use __free 2025-12-02 07:28:32 +01:00
Kconfig tracing updates for v6.19: 2025-12-05 09:51:37 -08:00
Makefile ftrace: Allow tracing of some of the tracing code 2025-11-26 15:13:30 -05:00
blktrace.c tracing updates for v6.19: 2025-12-05 09:51:37 -08:00
bpf_trace.c bpf: Fix verifier assumptions of bpf_d_path's output buffer 2025-12-10 01:34:04 -08:00
bpf_trace.h
error_report-traces.c
fgraph.c tracing: Fix typo in fpgraph.c 2025-12-05 15:43:39 -05:00
fprobe.c tracing fixes for v6.19: 2025-12-06 13:49:40 -08:00
ftrace.c ftrace: Do not over-allocate ftrace memory 2026-01-15 10:17:53 -05:00
ftrace_internal.h
kprobe_event_gen_test.c
pid_list.c trace/pid_list: optimize pid_list->lock contention 2025-11-13 15:15:54 -05:00
pid_list.h trace/pid_list: optimize pid_list->lock contention 2025-11-13 15:15:54 -05:00
power-traces.c PM: cpufreq: powernv/tracing: Move powernv_throttle trace event 2025-07-21 16:40:56 -04:00
preemptirq_delay_test.c kernel: trace: preemptirq_delay_test: use offstack cpu mask 2025-07-08 18:17:38 -04:00
rethook.c
ring_buffer.c ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free 2026-01-07 14:52:22 -05:00
ring_buffer_benchmark.c tracing: Fix typo in ring_buffer_benchmark.c 2025-12-05 15:43:40 -05:00
rpm-traces.c
synth_event_gen_test.c
trace.c trace: ftrace_dump_on_oops[] is not exported, make it static 2026-01-07 14:52:22 -05:00
trace.h ftrace fixes for v6.19: 2025-12-05 10:13:04 -08:00
trace_benchmark.c
trace_benchmark.h
trace_boot.c
trace_branch.c tracing: branch: Use trace_tracing_is_on_cpu() instead of "disabled" field 2025-05-09 15:19:10 -04:00
trace_btf.c
trace_btf.h
trace_clock.c tracing: Use atomic64_inc_return() in trace_clock_counter() 2024-10-09 19:59:49 -04:00
trace_dynevent.c tracing: Report wrong dynamic event command 2025-11-10 19:26:14 -05:00
trace_dynevent.h tracing: probes: Fix a possible race in trace_probe_log APIs 2025-05-13 22:23:34 +09:00
trace_entries.h function_graph: Enable funcgraph-args and funcgraph-retaddr to work simultaneously 2025-11-26 15:13:30 -05:00
trace_eprobe.c Probes for v6.19 2025-12-05 10:55:47 -08:00
trace_event_perf.c perf: Remove unnecessary parameter of security check 2025-02-26 14:13:58 -05:00
trace_events.c tracing: Drop unneeded assignment to soft_mode 2026-01-07 14:52:22 -05:00
trace_events_filter.c tracing: Fix typo in trace_events_filter.c 2025-12-05 15:43:40 -05:00
trace_events_filter_test.h
trace_events_hist.c tracing: Fix typo in trace_events_hist.c 2025-12-05 15:43:40 -05:00
trace_events_inject.c
trace_events_synth.c tracing: Fix fixed array of synthetic event 2025-12-05 15:38:10 -05:00
trace_events_trigger.c tracing: Fix typo in trace_events_trigger.c 2025-12-05 15:43:41 -05:00
trace_events_user.c tracing: Fix multiple typos in trace_events_user.c 2025-12-05 15:43:41 -05:00
trace_export.c
trace_fprobe.c tracing updates for v6.19: 2025-12-05 09:51:37 -08:00
trace_functions.c tracing: Have function tracer define options per instance 2025-11-12 09:59:54 -05:00
trace_functions_graph.c ftrace fixes for v6.19: 2025-12-05 10:13:04 -08:00
trace_hwlat.c tracing: Replace opencoded cpumask_next_wrap() in move_to_next_cpu() 2025-07-08 18:17:29 -04:00
trace_irqsoff.c tracing: Allow tracer to add more than 32 options 2025-11-04 21:44:00 +09:00
trace_kdb.c tracing: Allow tracer to add more than 32 options 2025-11-04 21:44:00 +09:00
trace_kprobe.c tracing: Allow tracer to add more than 32 options 2025-11-04 21:44:00 +09:00
trace_kprobe_selftest.c
trace_kprobe_selftest.h
trace_mmiotrace.c tracing/mmiotrace: Remove reference to unused per CPU data pointer 2025-05-08 09:36:09 -04:00
trace_nop.c
trace_osnoise.c tracing: Fix multiple typos in trace_osnoise.c 2025-12-05 15:43:41 -05:00
trace_output.c tracing updates for v6.19: 2025-12-05 09:51:37 -08:00
trace_output.h tracing: Allow tracer to add more than 32 options 2025-11-04 21:44:00 +09:00
trace_preemptirq.c tracing: Fix archs that still call tracepoints without RCU watching 2024-12-05 09:28:58 -05:00
trace_printk.c
trace_probe.c tracing fixes for v6.19: 2025-12-06 13:49:40 -08:00
trace_probe.h tracing: probes: Use __free() for trace_probe_log 2025-11-01 01:10:28 +09:00
trace_probe_kernel.h
trace_probe_tmpl.h tracing/fprobe: Enable fprobe events with CONFIG_DYNAMIC_FTRACE_WITH_ARGS 2024-12-26 10:50:04 -05:00
trace_recursion_record.c
trace_sched_switch.c tracing: Ensure optimized hashing works 2025-09-30 17:27:58 -04:00
trace_sched_wakeup.c tracing: Allow tracer to add more than 32 options 2025-11-04 21:44:00 +09:00
trace_selftest.c fgraph: Pass ftrace_regs to retfunc 2024-12-26 10:50:03 -05:00
trace_selftest_dynamic.c
trace_seq.c tracing: Fix typo in trace_seq.c 2025-12-05 15:43:41 -05:00
trace_stack.c tracing updates for v6.16: 2025-05-29 21:04:36 -07:00
trace_stat.c tracing: Switch trace_stat.c code over to use guard() 2024-12-26 10:38:37 -05:00
trace_stat.h
trace_synth.h
trace_syscalls.c tracing: Hide __NR_utimensat and _NR_mq_timedsend when not defined 2025-11-10 14:23:53 -05:00
trace_uprobe.c tracing: uprobe: eprobes: Allocate traceprobe_parse_context per probe 2025-11-01 01:10:29 +09:00
tracing_map.c tracing: Use vmalloc_array() to improve code 2025-09-23 09:31:58 -04:00
tracing_map.h