aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/trace/kprobetrace.txt34
-rw-r--r--kernel/trace/Kconfig19
-rw-r--r--kernel/trace/Makefile2
-rw-r--r--kernel/trace/trace_kprobe.c6
4 files changed, 31 insertions, 30 deletions
diff --git a/Documentation/trace/kprobetrace.txt b/Documentation/trace/kprobetrace.txt
index 15415243a9a3..47aabeebbdf6 100644
--- a/Documentation/trace/kprobetrace.txt
+++ b/Documentation/trace/kprobetrace.txt
@@ -1,26 +1,23 @@
1 Kprobe-based Event Tracer 1 Kprobe-based Event Tracing
2 ========================= 2 ==========================
3 3
4 Documentation is written by Masami Hiramatsu 4 Documentation is written by Masami Hiramatsu
5 5
6 6
7Overview 7Overview
8-------- 8--------
9This tracer is similar to the events tracer which is based on Tracepoint 9These events are similar to tracepoint based events. Instead of Tracepoint,
10infrastructure. Instead of Tracepoint, this tracer is based on kprobes(kprobe 10this is based on kprobes (kprobe and kretprobe). So it can probe wherever
11and kretprobe). It probes anywhere where kprobes can probe(this means, all 11kprobes can probe (this means, all functions body except for __kprobes
12functions body except for __kprobes functions). 12functions). Unlike the Tracepoint based event, this can be added and removed
13dynamically, on the fly.
13 14
14Unlike the function tracer, this tracer can probe instructions inside of 15To enable this feature, build your kernel with CONFIG_KPROBE_TRACING=y.
15kernel functions. It allows you to check which instruction has been executed.
16 16
17Unlike the Tracepoint based events tracer, this tracer can add and remove 17Similar to the events tracer, this doesn't need to be activated via
18probe points on the fly. 18current_tracer. Instead of that, add probe points via
19 19/sys/kernel/debug/tracing/kprobe_events, and enable it via
20Similar to the events tracer, this tracer doesn't need to be activated via 20/sys/kernel/debug/tracing/events/kprobes/<EVENT>/enabled.
21current_tracer, instead of that, just set probe points via
22/sys/kernel/debug/tracing/kprobe_events. And you can set filters on each
23probe events via /sys/kernel/debug/tracing/events/kprobes/<EVENT>/filter.
24 21
25 22
26Synopsis of kprobe_events 23Synopsis of kprobe_events
@@ -55,9 +52,9 @@ Per-Probe Event Filtering
55------------------------- 52-------------------------
56 Per-probe event filtering feature allows you to set different filter on each 53 Per-probe event filtering feature allows you to set different filter on each
57probe and gives you what arguments will be shown in trace buffer. If an event 54probe and gives you what arguments will be shown in trace buffer. If an event
58name is specified right after 'p:' or 'r:' in kprobe_events, the tracer adds 55name is specified right after 'p:' or 'r:' in kprobe_events, it adds an event
59an event under tracing/events/kprobes/<EVENT>, at the directory you can see 56under tracing/events/kprobes/<EVENT>, at the directory you can see 'id',
60'id', 'enabled', 'format' and 'filter'. 57'enabled', 'format' and 'filter'.
61 58
62enabled: 59enabled:
63 You can enable/disable the probe by writing 1 or 0 on it. 60 You can enable/disable the probe by writing 1 or 0 on it.
@@ -71,6 +68,7 @@ filter:
71id: 68id:
72 This shows the id of this probe event. 69 This shows the id of this probe event.
73 70
71
74Event Profiling 72Event Profiling
75--------------- 73---------------
76 You can check the total number of probe hits and probe miss-hits via 74 You can check the total number of probe hits and probe miss-hits via
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 15372a9f2399..f05671609a89 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -428,17 +428,22 @@ config BLK_DEV_IO_TRACE
428 428
429 If unsure, say N. 429 If unsure, say N.
430 430
431config KPROBE_TRACER 431config KPROBE_EVENT
432 depends on KPROBES 432 depends on KPROBES
433 depends on X86 433 depends on X86
434 bool "Trace kprobes" 434 bool "Enable kprobes-based dynamic events"
435 select TRACING 435 select TRACING
436 select GENERIC_TRACER 436 default y
437 help 437 help
438 This tracer probes everywhere where kprobes can probe it, and 438 This allows the user to add tracing events (similar to tracepoints) on the fly
439 records various registers and memories specified by user. 439 via the ftrace interface. See Documentation/trace/kprobetrace.txt
440 This also allows you to trace kprobe probe points as a dynamic 440 for more details.
441 defined events. It provides per-probe event filtering interface. 441
442 Those events can be inserted wherever kprobes can probe, and record
443 various register and memory values.
444
445 This option is also required by perf-probe subcommand of perf tools. If
446 you want to use perf tools, this option is strongly recommended.
442 447
443config DYNAMIC_FTRACE 448config DYNAMIC_FTRACE
444 bool "enable/disable ftrace tracepoints dynamically" 449 bool "enable/disable ftrace tracepoints dynamically"
diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
index c8cb75d7f280..edc3a3cca1a1 100644
--- a/kernel/trace/Makefile
+++ b/kernel/trace/Makefile
@@ -53,7 +53,7 @@ obj-$(CONFIG_EVENT_TRACING) += trace_export.o
53obj-$(CONFIG_FTRACE_SYSCALLS) += trace_syscalls.o 53obj-$(CONFIG_FTRACE_SYSCALLS) += trace_syscalls.o
54obj-$(CONFIG_EVENT_PROFILE) += trace_event_profile.o 54obj-$(CONFIG_EVENT_PROFILE) += trace_event_profile.o
55obj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o 55obj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o
56obj-$(CONFIG_KPROBE_TRACER) += trace_kprobe.o 56obj-$(CONFIG_KPROBE_EVENT) += trace_kprobe.o
57obj-$(CONFIG_EVENT_TRACING) += power-traces.o 57obj-$(CONFIG_EVENT_TRACING) += power-traces.o
58 58
59libftrace-y := ftrace.o 59libftrace-y := ftrace.o
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index a86c3ac0df21..cf17a6694f32 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * kprobe based kernel tracer 2 * Kprobes-based tracing events
3 * 3 *
4 * Created by Masami Hiramatsu <mhiramat@redhat.com> 4 * Created by Masami Hiramatsu <mhiramat@redhat.com>
5 * 5 *
@@ -57,8 +57,6 @@ const char *reserved_field_names[] = {
57 FIELD_STRING_FUNC, 57 FIELD_STRING_FUNC,
58}; 58};
59 59
60/* currently, trace_kprobe only supports X86. */
61
62struct fetch_func { 60struct fetch_func {
63 unsigned long (*func)(struct pt_regs *, void *); 61 unsigned long (*func)(struct pt_regs *, void *);
64 void *data; 62 void *data;
@@ -191,7 +189,7 @@ static __kprobes void free_indirect_fetch_data(struct indirect_fetch_data *data)
191} 189}
192 190
193/** 191/**
194 * Kprobe tracer core functions 192 * Kprobe event core functions
195 */ 193 */
196 194
197struct probe_arg { 195struct probe_arg {