Loading Documentation/ftrace.txt +85 −2 Original line number Diff line number Diff line Loading @@ -127,6 +127,8 @@ of ftrace. Here is a list of some of the key files: be traced. If a function exists in both set_ftrace_filter and set_ftrace_notrace, the function will _not_ be traced. set_ftrace_pid: Have the function tracer only trace a single thread. available_filter_functions: This lists the functions that ftrace has processed and can trace. These are the function names that you can pass to "set_ftrace_filter" or Loading Loading @@ -1073,6 +1075,83 @@ For simple one time traces, the above is sufficent. For anything else, a search through /proc/mounts may be needed to find where the debugfs file-system is mounted. Single thread tracing --------------------- By writing into /debug/tracing/set_ftrace_pid you can trace a single thread. For example: # cat /debug/tracing/set_ftrace_pid no pid # echo 3111 > /debug/tracing/set_ftrace_pid # cat /debug/tracing/set_ftrace_pid 3111 # echo function > /debug/tracing/current_tracer # cat /debug/tracing/trace | head # tracer: function # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | yum-updatesd-3111 [003] 1637.254676: finish_task_switch <-thread_return yum-updatesd-3111 [003] 1637.254681: hrtimer_cancel <-schedule_hrtimeout_range yum-updatesd-3111 [003] 1637.254682: hrtimer_try_to_cancel <-hrtimer_cancel yum-updatesd-3111 [003] 1637.254683: lock_hrtimer_base <-hrtimer_try_to_cancel yum-updatesd-3111 [003] 1637.254685: fget_light <-do_sys_poll yum-updatesd-3111 [003] 1637.254686: pipe_poll <-do_sys_poll # echo -1 > /debug/tracing/set_ftrace_pid # cat /debug/tracing/trace |head # tracer: function # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | ##### CPU 3 buffer started #### yum-updatesd-3111 [003] 1701.957688: free_poll_entry <-poll_freewait yum-updatesd-3111 [003] 1701.957689: remove_wait_queue <-free_poll_entry yum-updatesd-3111 [003] 1701.957691: fput <-free_poll_entry yum-updatesd-3111 [003] 1701.957692: audit_syscall_exit <-sysret_audit yum-updatesd-3111 [003] 1701.957693: path_put <-audit_syscall_exit If you want to trace a function when executing, you could use something like this simple program: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main (int argc, char **argv) { if (argc < 1) exit(-1); if (fork() > 0) { int fd, ffd; char line[64]; int s; ffd = open("/debug/tracing/current_tracer", O_WRONLY); if (ffd < 0) exit(-1); write(ffd, "nop", 3); fd = open("/debug/tracing/set_ftrace_pid", O_WRONLY); s = sprintf(line, "%d\n", getpid()); write(fd, line, s); write(ffd, "function", 8); close(fd); close(ffd); execvp(argv[1], argv+1); } return 0; } dynamic ftrace -------------- Loading Loading @@ -1172,7 +1251,11 @@ These are the only wild cards which are supported. <match>*<match> will not work. # echo hrtimer_* > /debug/tracing/set_ftrace_filter Note: It is better to use quotes to enclose the wild cards, otherwise the shell may expand the parameters into names of files in the local directory. # echo 'hrtimer_*' > /debug/tracing/set_ftrace_filter Produces: Loading Loading @@ -1227,7 +1310,7 @@ Again, now we want to append. # echo sys_nanosleep > /debug/tracing/set_ftrace_filter # cat /debug/tracing/set_ftrace_filter sys_nanosleep # echo hrtimer_* >> /debug/tracing/set_ftrace_filter # echo 'hrtimer_*' >> /debug/tracing/set_ftrace_filter # cat /debug/tracing/set_ftrace_filter hrtimer_run_queues hrtimer_run_pending Loading Documentation/markers.txt +10 −5 Original line number Diff line number Diff line Loading @@ -51,11 +51,16 @@ to call) for the specific marker through marker_probe_register() and can be activated by calling marker_arm(). Marker deactivation can be done by calling marker_disarm() as many times as marker_arm() has been called. Removing a probe is done through marker_probe_unregister(); it will disarm the probe. marker_synchronize_unregister() must be called before the end of the module exit function to make sure there is no caller left using the probe. This, and the fact that preemption is disabled around the probe call, make sure that probe removal and module unload are safe. See the "Probe example" section below for a sample probe module. marker_synchronize_unregister() must be called between probe unregistration and the first occurrence of - the end of module exit function, to make sure there is no caller left using the probe; - the free of any resource used by the probes, to make sure the probes wont be accessing invalid data. This, and the fact that preemption is disabled around the probe call, make sure that probe removal and module unload are safe. See the "Probe example" section below for a sample probe module. The marker mechanism supports inserting multiple instances of the same marker. Markers can be put in inline functions, inlined static functions, and Loading Documentation/tracepoints.txt +2 −2 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ In include/trace/subsys.h : #include <linux/tracepoint.h> DECLARE_TRACE(subsys_eventname, TPPTOTO(int firstarg, struct task_struct *p), TPPROTO(int firstarg, struct task_struct *p), TPARGS(firstarg, p)); In subsys/file.c (where the tracing statement must be added) : Loading @@ -66,7 +66,7 @@ Where : - subsys is the name of your subsystem. - eventname is the name of the event to trace. - TPPTOTO(int firstarg, struct task_struct *p) is the prototype of the - TPPROTO(int firstarg, struct task_struct *p) is the prototype of the function called by this tracepoint. - TPARGS(firstarg, p) are the parameters names, same as found in the Loading MAINTAINERS +3 −2 Original line number Diff line number Diff line Loading @@ -779,6 +779,7 @@ ATM P: Chas Williams M: chas@cmf.nrl.navy.mil L: linux-atm-general@lists.sourceforge.net (subscribers-only) L: netdev@vger.kernel.org W: http://linux-atm.sourceforge.net S: Maintained Loading Loading @@ -4235,7 +4236,7 @@ M: dedekind@infradead.org P: Adrian Hunter M: ext-adrian.hunter@nokia.com L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/~dedekind/ubifs-2.6.git T: git git://git.infradead.org/ubifs-2.6.git W: http://www.linux-mtd.infradead.org/doc/ubifs.html S: Maintained Loading Loading @@ -4289,7 +4290,7 @@ P: Artem Bityutskiy M: dedekind@infradead.org W: http://www.linux-mtd.infradead.org/ L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/~dedekind/ubi-2.6.git T: git git://git.infradead.org/ubi-2.6.git S: Maintained USB ACM DRIVER Loading arch/ia64/kvm/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ endif kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o obj-$(CONFIG_KVM) += kvm.o EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ vtlb.o process.o #Add link memcpy and memset to avoid possible structure assignment error Loading Loading
Documentation/ftrace.txt +85 −2 Original line number Diff line number Diff line Loading @@ -127,6 +127,8 @@ of ftrace. Here is a list of some of the key files: be traced. If a function exists in both set_ftrace_filter and set_ftrace_notrace, the function will _not_ be traced. set_ftrace_pid: Have the function tracer only trace a single thread. available_filter_functions: This lists the functions that ftrace has processed and can trace. These are the function names that you can pass to "set_ftrace_filter" or Loading Loading @@ -1073,6 +1075,83 @@ For simple one time traces, the above is sufficent. For anything else, a search through /proc/mounts may be needed to find where the debugfs file-system is mounted. Single thread tracing --------------------- By writing into /debug/tracing/set_ftrace_pid you can trace a single thread. For example: # cat /debug/tracing/set_ftrace_pid no pid # echo 3111 > /debug/tracing/set_ftrace_pid # cat /debug/tracing/set_ftrace_pid 3111 # echo function > /debug/tracing/current_tracer # cat /debug/tracing/trace | head # tracer: function # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | yum-updatesd-3111 [003] 1637.254676: finish_task_switch <-thread_return yum-updatesd-3111 [003] 1637.254681: hrtimer_cancel <-schedule_hrtimeout_range yum-updatesd-3111 [003] 1637.254682: hrtimer_try_to_cancel <-hrtimer_cancel yum-updatesd-3111 [003] 1637.254683: lock_hrtimer_base <-hrtimer_try_to_cancel yum-updatesd-3111 [003] 1637.254685: fget_light <-do_sys_poll yum-updatesd-3111 [003] 1637.254686: pipe_poll <-do_sys_poll # echo -1 > /debug/tracing/set_ftrace_pid # cat /debug/tracing/trace |head # tracer: function # # TASK-PID CPU# TIMESTAMP FUNCTION # | | | | | ##### CPU 3 buffer started #### yum-updatesd-3111 [003] 1701.957688: free_poll_entry <-poll_freewait yum-updatesd-3111 [003] 1701.957689: remove_wait_queue <-free_poll_entry yum-updatesd-3111 [003] 1701.957691: fput <-free_poll_entry yum-updatesd-3111 [003] 1701.957692: audit_syscall_exit <-sysret_audit yum-updatesd-3111 [003] 1701.957693: path_put <-audit_syscall_exit If you want to trace a function when executing, you could use something like this simple program: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main (int argc, char **argv) { if (argc < 1) exit(-1); if (fork() > 0) { int fd, ffd; char line[64]; int s; ffd = open("/debug/tracing/current_tracer", O_WRONLY); if (ffd < 0) exit(-1); write(ffd, "nop", 3); fd = open("/debug/tracing/set_ftrace_pid", O_WRONLY); s = sprintf(line, "%d\n", getpid()); write(fd, line, s); write(ffd, "function", 8); close(fd); close(ffd); execvp(argv[1], argv+1); } return 0; } dynamic ftrace -------------- Loading Loading @@ -1172,7 +1251,11 @@ These are the only wild cards which are supported. <match>*<match> will not work. # echo hrtimer_* > /debug/tracing/set_ftrace_filter Note: It is better to use quotes to enclose the wild cards, otherwise the shell may expand the parameters into names of files in the local directory. # echo 'hrtimer_*' > /debug/tracing/set_ftrace_filter Produces: Loading Loading @@ -1227,7 +1310,7 @@ Again, now we want to append. # echo sys_nanosleep > /debug/tracing/set_ftrace_filter # cat /debug/tracing/set_ftrace_filter sys_nanosleep # echo hrtimer_* >> /debug/tracing/set_ftrace_filter # echo 'hrtimer_*' >> /debug/tracing/set_ftrace_filter # cat /debug/tracing/set_ftrace_filter hrtimer_run_queues hrtimer_run_pending Loading
Documentation/markers.txt +10 −5 Original line number Diff line number Diff line Loading @@ -51,11 +51,16 @@ to call) for the specific marker through marker_probe_register() and can be activated by calling marker_arm(). Marker deactivation can be done by calling marker_disarm() as many times as marker_arm() has been called. Removing a probe is done through marker_probe_unregister(); it will disarm the probe. marker_synchronize_unregister() must be called before the end of the module exit function to make sure there is no caller left using the probe. This, and the fact that preemption is disabled around the probe call, make sure that probe removal and module unload are safe. See the "Probe example" section below for a sample probe module. marker_synchronize_unregister() must be called between probe unregistration and the first occurrence of - the end of module exit function, to make sure there is no caller left using the probe; - the free of any resource used by the probes, to make sure the probes wont be accessing invalid data. This, and the fact that preemption is disabled around the probe call, make sure that probe removal and module unload are safe. See the "Probe example" section below for a sample probe module. The marker mechanism supports inserting multiple instances of the same marker. Markers can be put in inline functions, inlined static functions, and Loading
Documentation/tracepoints.txt +2 −2 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ In include/trace/subsys.h : #include <linux/tracepoint.h> DECLARE_TRACE(subsys_eventname, TPPTOTO(int firstarg, struct task_struct *p), TPPROTO(int firstarg, struct task_struct *p), TPARGS(firstarg, p)); In subsys/file.c (where the tracing statement must be added) : Loading @@ -66,7 +66,7 @@ Where : - subsys is the name of your subsystem. - eventname is the name of the event to trace. - TPPTOTO(int firstarg, struct task_struct *p) is the prototype of the - TPPROTO(int firstarg, struct task_struct *p) is the prototype of the function called by this tracepoint. - TPARGS(firstarg, p) are the parameters names, same as found in the Loading
MAINTAINERS +3 −2 Original line number Diff line number Diff line Loading @@ -779,6 +779,7 @@ ATM P: Chas Williams M: chas@cmf.nrl.navy.mil L: linux-atm-general@lists.sourceforge.net (subscribers-only) L: netdev@vger.kernel.org W: http://linux-atm.sourceforge.net S: Maintained Loading Loading @@ -4235,7 +4236,7 @@ M: dedekind@infradead.org P: Adrian Hunter M: ext-adrian.hunter@nokia.com L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/~dedekind/ubifs-2.6.git T: git git://git.infradead.org/ubifs-2.6.git W: http://www.linux-mtd.infradead.org/doc/ubifs.html S: Maintained Loading Loading @@ -4289,7 +4290,7 @@ P: Artem Bityutskiy M: dedekind@infradead.org W: http://www.linux-mtd.infradead.org/ L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/~dedekind/ubi-2.6.git T: git git://git.infradead.org/ubi-2.6.git S: Maintained USB ACM DRIVER Loading
arch/ia64/kvm/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ endif kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o obj-$(CONFIG_KVM) += kvm.o EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ vtlb.o process.o #Add link memcpy and memset to avoid possible structure assignment error Loading