Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar: "Misc minor fixes mostly related to tracing" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: s390: Fix a header dependencies related build error tracing: update documentation of snapshot utility tracing: Do not return EINVAL in snapshot when not allocated tracing: Add help of snapshot feature when snapshot is empty ftrace: Update the kconfig for DYNAMIC_FTRACE
This commit is contained in:
commit
7c6baa304b
4 changed files with 40 additions and 14 deletions
|
@ -1873,7 +1873,7 @@ feature:
|
||||||
|
|
||||||
status\input | 0 | 1 | else |
|
status\input | 0 | 1 | else |
|
||||||
--------------+------------+------------+------------+
|
--------------+------------+------------+------------+
|
||||||
not allocated |(do nothing)| alloc+swap | EINVAL |
|
not allocated |(do nothing)| alloc+swap |(do nothing)|
|
||||||
--------------+------------+------------+------------+
|
--------------+------------+------------+------------+
|
||||||
allocated | free | swap | clear |
|
allocated | free | swap | clear |
|
||||||
--------------+------------+------------+------------+
|
--------------+------------+------------+------------+
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#ifndef _ASM_S390_CPU_MF_H
|
#ifndef _ASM_S390_CPU_MF_H
|
||||||
#define _ASM_S390_CPU_MF_H
|
#define _ASM_S390_CPU_MF_H
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
#include <asm/facility.h>
|
#include <asm/facility.h>
|
||||||
|
|
||||||
#define CPU_MF_INT_SF_IAE (1 << 31) /* invalid entry address */
|
#define CPU_MF_INT_SF_IAE (1 << 31) /* invalid entry address */
|
||||||
|
|
|
@ -414,24 +414,28 @@ config PROBE_EVENTS
|
||||||
def_bool n
|
def_bool n
|
||||||
|
|
||||||
config DYNAMIC_FTRACE
|
config DYNAMIC_FTRACE
|
||||||
bool "enable/disable ftrace tracepoints dynamically"
|
bool "enable/disable function tracing dynamically"
|
||||||
depends on FUNCTION_TRACER
|
depends on FUNCTION_TRACER
|
||||||
depends on HAVE_DYNAMIC_FTRACE
|
depends on HAVE_DYNAMIC_FTRACE
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This option will modify all the calls to ftrace dynamically
|
This option will modify all the calls to function tracing
|
||||||
(will patch them out of the binary image and replace them
|
dynamically (will patch them out of the binary image and
|
||||||
with a No-Op instruction) as they are called. A table is
|
replace them with a No-Op instruction) on boot up. During
|
||||||
created to dynamically enable them again.
|
compile time, a table is made of all the locations that ftrace
|
||||||
|
can function trace, and this table is linked into the kernel
|
||||||
|
image. When this is enabled, functions can be individually
|
||||||
|
enabled, and the functions not enabled will not affect
|
||||||
|
performance of the system.
|
||||||
|
|
||||||
|
See the files in /sys/kernel/debug/tracing:
|
||||||
|
available_filter_functions
|
||||||
|
set_ftrace_filter
|
||||||
|
set_ftrace_notrace
|
||||||
|
|
||||||
This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
|
This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
|
||||||
otherwise has native performance as long as no tracing is active.
|
otherwise has native performance as long as no tracing is active.
|
||||||
|
|
||||||
The changes to the code are done by a kernel thread that
|
|
||||||
wakes up once a second and checks to see if any ftrace calls
|
|
||||||
were made. If so, it runs stop_machine (stops all CPUS)
|
|
||||||
and modifies the code to jump over the call to ftrace.
|
|
||||||
|
|
||||||
config DYNAMIC_FTRACE_WITH_REGS
|
config DYNAMIC_FTRACE_WITH_REGS
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on DYNAMIC_FTRACE
|
depends on DYNAMIC_FTRACE
|
||||||
|
|
|
@ -2400,6 +2400,27 @@ static void test_ftrace_alive(struct seq_file *m)
|
||||||
seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n");
|
seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_TRACER_MAX_TRACE
|
||||||
|
static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
|
||||||
|
{
|
||||||
|
if (iter->trace->allocated_snapshot)
|
||||||
|
seq_printf(m, "#\n# * Snapshot is allocated *\n#\n");
|
||||||
|
else
|
||||||
|
seq_printf(m, "#\n# * Snapshot is freed *\n#\n");
|
||||||
|
|
||||||
|
seq_printf(m, "# Snapshot commands:\n");
|
||||||
|
seq_printf(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n");
|
||||||
|
seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n");
|
||||||
|
seq_printf(m, "# Takes a snapshot of the main buffer.\n");
|
||||||
|
seq_printf(m, "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate)\n");
|
||||||
|
seq_printf(m, "# (Doesn't have to be '2' works with any number that\n");
|
||||||
|
seq_printf(m, "# is not a '0' or '1')\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* Should never be called */
|
||||||
|
static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static int s_show(struct seq_file *m, void *v)
|
static int s_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
struct trace_iterator *iter = v;
|
struct trace_iterator *iter = v;
|
||||||
|
@ -2411,7 +2432,9 @@ static int s_show(struct seq_file *m, void *v)
|
||||||
seq_puts(m, "#\n");
|
seq_puts(m, "#\n");
|
||||||
test_ftrace_alive(m);
|
test_ftrace_alive(m);
|
||||||
}
|
}
|
||||||
if (iter->trace && iter->trace->print_header)
|
if (iter->snapshot && trace_empty(iter))
|
||||||
|
print_snapshot_help(m, iter);
|
||||||
|
else if (iter->trace && iter->trace->print_header)
|
||||||
iter->trace->print_header(m);
|
iter->trace->print_header(m);
|
||||||
else
|
else
|
||||||
trace_default_header(m);
|
trace_default_header(m);
|
||||||
|
@ -4144,8 +4167,6 @@ tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
|
||||||
default:
|
default:
|
||||||
if (current_trace->allocated_snapshot)
|
if (current_trace->allocated_snapshot)
|
||||||
tracing_reset_online_cpus(&max_tr);
|
tracing_reset_online_cpus(&max_tr);
|
||||||
else
|
|
||||||
ret = -EINVAL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue