Merge branch 'tip/tracing/core' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into tracing/urgent
This commit is contained in:
commit
915a0b575f
4 changed files with 48 additions and 12 deletions
|
@ -84,10 +84,6 @@ ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub;
|
||||||
ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub;
|
ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub;
|
||||||
ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub;
|
ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub;
|
||||||
|
|
||||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
|
||||||
static int ftrace_set_func(unsigned long *array, int *idx, char *buffer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void ftrace_list_func(unsigned long ip, unsigned long parent_ip)
|
static void ftrace_list_func(unsigned long ip, unsigned long parent_ip)
|
||||||
{
|
{
|
||||||
struct ftrace_ops *op = ftrace_list;
|
struct ftrace_ops *op = ftrace_list;
|
||||||
|
@ -2276,6 +2272,8 @@ __setup("ftrace_filter=", set_ftrace_filter);
|
||||||
|
|
||||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||||
static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata;
|
static char ftrace_graph_buf[FTRACE_FILTER_SIZE] __initdata;
|
||||||
|
static int ftrace_set_func(unsigned long *array, int *idx, char *buffer);
|
||||||
|
|
||||||
static int __init set_graph_function(char *str)
|
static int __init set_graph_function(char *str)
|
||||||
{
|
{
|
||||||
strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE);
|
strlcpy(ftrace_graph_buf, str, FTRACE_FILTER_SIZE);
|
||||||
|
|
|
@ -374,6 +374,21 @@ static int __init set_buf_size(char *str)
|
||||||
}
|
}
|
||||||
__setup("trace_buf_size=", set_buf_size);
|
__setup("trace_buf_size=", set_buf_size);
|
||||||
|
|
||||||
|
static int __init set_tracing_thresh(char *str)
|
||||||
|
{
|
||||||
|
unsigned long threshhold;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!str)
|
||||||
|
return 0;
|
||||||
|
ret = strict_strtoul(str, 0, &threshhold);
|
||||||
|
if (ret < 0)
|
||||||
|
return 0;
|
||||||
|
tracing_thresh = threshhold * 1000;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
__setup("tracing_thresh=", set_tracing_thresh);
|
||||||
|
|
||||||
unsigned long nsecs_to_usecs(unsigned long nsecs)
|
unsigned long nsecs_to_usecs(unsigned long nsecs)
|
||||||
{
|
{
|
||||||
return nsecs / 1000;
|
return nsecs / 1000;
|
||||||
|
@ -579,9 +594,10 @@ static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
|
||||||
static arch_spinlock_t ftrace_max_lock =
|
static arch_spinlock_t ftrace_max_lock =
|
||||||
(arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
|
(arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
|
||||||
|
|
||||||
|
unsigned long __read_mostly tracing_thresh;
|
||||||
|
|
||||||
#ifdef CONFIG_TRACER_MAX_TRACE
|
#ifdef CONFIG_TRACER_MAX_TRACE
|
||||||
unsigned long __read_mostly tracing_max_latency;
|
unsigned long __read_mostly tracing_max_latency;
|
||||||
unsigned long __read_mostly tracing_thresh;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the new maximum trace into the separate maximum-trace
|
* Copy the new maximum trace into the separate maximum-trace
|
||||||
|
@ -592,7 +608,7 @@ static void
|
||||||
__update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
|
__update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
|
||||||
{
|
{
|
||||||
struct trace_array_cpu *data = tr->data[cpu];
|
struct trace_array_cpu *data = tr->data[cpu];
|
||||||
struct trace_array_cpu *max_data = tr->data[cpu];
|
struct trace_array_cpu *max_data;
|
||||||
|
|
||||||
max_tr.cpu = cpu;
|
max_tr.cpu = cpu;
|
||||||
max_tr.time_start = data->preempt_timestamp;
|
max_tr.time_start = data->preempt_timestamp;
|
||||||
|
@ -602,7 +618,7 @@ __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
|
||||||
max_data->critical_start = data->critical_start;
|
max_data->critical_start = data->critical_start;
|
||||||
max_data->critical_end = data->critical_end;
|
max_data->critical_end = data->critical_end;
|
||||||
|
|
||||||
memcpy(data->comm, tsk->comm, TASK_COMM_LEN);
|
memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
|
||||||
max_data->pid = tsk->pid;
|
max_data->pid = tsk->pid;
|
||||||
max_data->uid = task_uid(tsk);
|
max_data->uid = task_uid(tsk);
|
||||||
max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
|
max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
|
||||||
|
@ -4249,10 +4265,10 @@ static __init int tracer_init_debugfs(void)
|
||||||
#ifdef CONFIG_TRACER_MAX_TRACE
|
#ifdef CONFIG_TRACER_MAX_TRACE
|
||||||
trace_create_file("tracing_max_latency", 0644, d_tracer,
|
trace_create_file("tracing_max_latency", 0644, d_tracer,
|
||||||
&tracing_max_latency, &tracing_max_lat_fops);
|
&tracing_max_latency, &tracing_max_lat_fops);
|
||||||
|
#endif
|
||||||
|
|
||||||
trace_create_file("tracing_thresh", 0644, d_tracer,
|
trace_create_file("tracing_thresh", 0644, d_tracer,
|
||||||
&tracing_thresh, &tracing_max_lat_fops);
|
&tracing_thresh, &tracing_max_lat_fops);
|
||||||
#endif
|
|
||||||
|
|
||||||
trace_create_file("README", 0444, d_tracer,
|
trace_create_file("README", 0444, d_tracer,
|
||||||
NULL, &tracing_readme_fops);
|
NULL, &tracing_readme_fops);
|
||||||
|
|
|
@ -396,9 +396,10 @@ extern int process_new_ksym_entry(char *ksymname, int op, unsigned long addr);
|
||||||
|
|
||||||
extern unsigned long nsecs_to_usecs(unsigned long nsecs);
|
extern unsigned long nsecs_to_usecs(unsigned long nsecs);
|
||||||
|
|
||||||
|
extern unsigned long tracing_thresh;
|
||||||
|
|
||||||
#ifdef CONFIG_TRACER_MAX_TRACE
|
#ifdef CONFIG_TRACER_MAX_TRACE
|
||||||
extern unsigned long tracing_max_latency;
|
extern unsigned long tracing_max_latency;
|
||||||
extern unsigned long tracing_thresh;
|
|
||||||
|
|
||||||
void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
|
void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
|
||||||
void update_max_tr_single(struct trace_array *tr,
|
void update_max_tr_single(struct trace_array *tr,
|
||||||
|
|
|
@ -237,6 +237,14 @@ int trace_graph_entry(struct ftrace_graph_ent *trace)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int trace_graph_thresh_entry(struct ftrace_graph_ent *trace)
|
||||||
|
{
|
||||||
|
if (tracing_thresh)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return trace_graph_entry(trace);
|
||||||
|
}
|
||||||
|
|
||||||
static void __trace_graph_return(struct trace_array *tr,
|
static void __trace_graph_return(struct trace_array *tr,
|
||||||
struct ftrace_graph_ret *trace,
|
struct ftrace_graph_ret *trace,
|
||||||
unsigned long flags,
|
unsigned long flags,
|
||||||
|
@ -290,13 +298,26 @@ void set_graph_array(struct trace_array *tr)
|
||||||
smp_mb();
|
smp_mb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void trace_graph_thresh_return(struct ftrace_graph_ret *trace)
|
||||||
|
{
|
||||||
|
if (tracing_thresh &&
|
||||||
|
(trace->rettime - trace->calltime < tracing_thresh))
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
trace_graph_return(trace);
|
||||||
|
}
|
||||||
|
|
||||||
static int graph_trace_init(struct trace_array *tr)
|
static int graph_trace_init(struct trace_array *tr)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
set_graph_array(tr);
|
set_graph_array(tr);
|
||||||
ret = register_ftrace_graph(&trace_graph_return,
|
if (tracing_thresh)
|
||||||
&trace_graph_entry);
|
ret = register_ftrace_graph(&trace_graph_thresh_return,
|
||||||
|
&trace_graph_thresh_entry);
|
||||||
|
else
|
||||||
|
ret = register_ftrace_graph(&trace_graph_return,
|
||||||
|
&trace_graph_entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
tracing_start_cmdline_record();
|
tracing_start_cmdline_record();
|
||||||
|
@ -920,7 +941,7 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return TRACE_TYPE_PARTIAL_LINE;
|
return TRACE_TYPE_PARTIAL_LINE;
|
||||||
} else {
|
} else {
|
||||||
ret = trace_seq_printf(s, "} (%ps)\n", (void *)trace->func);
|
ret = trace_seq_printf(s, "} /* %ps */\n", (void *)trace->func);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return TRACE_TYPE_PARTIAL_LINE;
|
return TRACE_TYPE_PARTIAL_LINE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue