kernel/trace/trace_kdb.c
Source file repositories/reference/linux-study-clean/kernel/trace/trace_kdb.c
File Facts
- System
- Linux kernel
- Corpus path
kernel/trace/trace_kdb.c- Extension
.c- Size
- 3348 bytes
- Lines
- 155
- Domain
- Core OS
- Bucket
- Scheduler, Processes, Timers, Sync, And Syscalls
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/init.hlinux/kgdb.hlinux/kdb.hlinux/ftrace.htrace.htrace_output.h
Detected Declarations
function ftrace_dump_buffunction for_each_tracing_cpufunction kdb_ftdumpfunction kdb_ftrace_register
Annotated Snippet
for_each_tracing_cpu(cpu) {
iter.buffer_iter[cpu] =
ring_buffer_read_start(iter.array_buffer->buffer,
cpu, GFP_ATOMIC);
tracing_iter_reset(&iter, cpu);
}
} else {
iter.cpu_file = cpu_file;
iter.buffer_iter[cpu_file] =
ring_buffer_read_start(iter.array_buffer->buffer,
cpu_file, GFP_ATOMIC);
tracing_iter_reset(&iter, cpu_file);
}
while (trace_find_next_entry_inc(&iter)) {
if (!cnt)
kdb_printf("---------------------------------\n");
cnt++;
if (!skip_entries) {
print_trace_line(&iter);
trace_printk_seq(&iter.seq);
} else {
skip_entries--;
}
if (KDB_FLAG(CMD_INTERRUPT))
goto out;
}
if (!cnt)
kdb_printf(" (ftrace buffer empty)\n");
else
kdb_printf("---------------------------------\n");
out:
tr->trace_flags = old_userobj;
for_each_tracing_cpu(cpu) {
if (iter.buffer_iter[cpu]) {
ring_buffer_read_finish(iter.buffer_iter[cpu]);
iter.buffer_iter[cpu] = NULL;
}
}
}
/*
* kdb_ftdump - Dump the ftrace log buffer
*/
static int kdb_ftdump(int argc, const char **argv)
{
int skip_entries = 0;
long cpu_file;
int err;
int cnt;
if (argc > 2)
return KDB_ARGCOUNT;
if (argc && kstrtoint(argv[1], 0, &skip_entries))
return KDB_BADINT;
if (argc == 2) {
err = kstrtol(argv[2], 0, &cpu_file);
if (err || cpu_file >= NR_CPUS || cpu_file < 0 ||
!cpu_online(cpu_file))
return KDB_BADINT;
} else {
cpu_file = RING_BUFFER_ALL_CPUS;
}
kdb_trap_printk++;
trace_init_global_iter(&iter);
iter.buffer_iter = buffer_iter;
tracer_tracing_disable(iter.tr);
/* A negative skip_entries means skip all but the last entries */
if (skip_entries < 0) {
if (cpu_file == RING_BUFFER_ALL_CPUS)
cnt = trace_total_entries(NULL);
else
cnt = trace_total_entries_cpu(NULL, cpu_file);
skip_entries = max(cnt + skip_entries, 0);
}
ftrace_dump_buf(skip_entries, cpu_file);
tracer_tracing_enable(iter.tr);
Annotation
- Immediate include surface: `linux/init.h`, `linux/kgdb.h`, `linux/kdb.h`, `linux/ftrace.h`, `trace.h`, `trace_output.h`.
- Detected declarations: `function ftrace_dump_buf`, `function for_each_tracing_cpu`, `function kdb_ftdump`, `function kdb_ftrace_register`.
- Atlas domain: Core OS / Scheduler, Processes, Timers, Sync, And Syscalls.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.