Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81444a79 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge branch 'tracing/fastboot' into cpus4096

parents a64d31ba da485e0c
Loading
Loading
Loading
Loading
+85 −2
Original line number Diff line number Diff line
@@ -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
@@ -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
--------------

@@ -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:

@@ -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
+10 −5
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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) :
@@ -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
+3 −2
Original line number Diff line number Diff line
@@ -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

@@ -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

@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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