Merge branch 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: tracing: Fix missing function_graph events when we splice_read from trace_pipe tracing: Fix invalid function_graph entry trace: stop tracer in oops_enter() ftrace: Only update $offset when we update $ref_func ftrace: Fix the conditional that updates $ref_func tracing: only truncate ftrace files when O_TRUNC is set tracing: show proper address for trace-printk format
This commit is contained in:
commit
9c66812b6b
|
@ -301,6 +301,7 @@ int oops_may_print(void)
|
||||||
*/
|
*/
|
||||||
void oops_enter(void)
|
void oops_enter(void)
|
||||||
{
|
{
|
||||||
|
tracing_off();
|
||||||
/* can't trust the integrity of the kernel anymore: */
|
/* can't trust the integrity of the kernel anymore: */
|
||||||
debug_locks_off();
|
debug_locks_off();
|
||||||
do_oops_enter_exit();
|
do_oops_enter_exit();
|
||||||
|
|
|
@ -1662,7 +1662,7 @@ ftrace_regex_open(struct inode *inode, struct file *file, int enable)
|
||||||
|
|
||||||
mutex_lock(&ftrace_regex_lock);
|
mutex_lock(&ftrace_regex_lock);
|
||||||
if ((file->f_mode & FMODE_WRITE) &&
|
if ((file->f_mode & FMODE_WRITE) &&
|
||||||
!(file->f_flags & O_APPEND))
|
(file->f_flags & O_TRUNC))
|
||||||
ftrace_filter_reset(enable);
|
ftrace_filter_reset(enable);
|
||||||
|
|
||||||
if (file->f_mode & FMODE_READ) {
|
if (file->f_mode & FMODE_READ) {
|
||||||
|
@ -2577,7 +2577,7 @@ ftrace_graph_open(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
mutex_lock(&graph_lock);
|
mutex_lock(&graph_lock);
|
||||||
if ((file->f_mode & FMODE_WRITE) &&
|
if ((file->f_mode & FMODE_WRITE) &&
|
||||||
!(file->f_flags & O_APPEND)) {
|
(file->f_flags & O_TRUNC)) {
|
||||||
ftrace_graph_count = 0;
|
ftrace_graph_count = 0;
|
||||||
memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs));
|
memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2031,7 +2031,7 @@ static int tracing_open(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
/* If this file was open for write, then erase contents */
|
/* If this file was open for write, then erase contents */
|
||||||
if ((file->f_mode & FMODE_WRITE) &&
|
if ((file->f_mode & FMODE_WRITE) &&
|
||||||
!(file->f_flags & O_APPEND)) {
|
(file->f_flags & O_TRUNC)) {
|
||||||
long cpu = (long) inode->i_private;
|
long cpu = (long) inode->i_private;
|
||||||
|
|
||||||
if (cpu == TRACE_PIPE_ALL_CPU)
|
if (cpu == TRACE_PIPE_ALL_CPU)
|
||||||
|
@ -3085,7 +3085,8 @@ tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_consume(iter);
|
if (ret != TRACE_TYPE_NO_CONSUME)
|
||||||
|
trace_consume(iter);
|
||||||
rem -= count;
|
rem -= count;
|
||||||
if (!find_next_entry_inc(iter)) {
|
if (!find_next_entry_inc(iter)) {
|
||||||
rem = 0;
|
rem = 0;
|
||||||
|
@ -4233,8 +4234,11 @@ static void __ftrace_dump(bool disable_tracing)
|
||||||
iter.pos = -1;
|
iter.pos = -1;
|
||||||
|
|
||||||
if (find_next_entry_inc(&iter) != NULL) {
|
if (find_next_entry_inc(&iter) != NULL) {
|
||||||
print_trace_line(&iter);
|
int ret;
|
||||||
trace_consume(&iter);
|
|
||||||
|
ret = print_trace_line(&iter);
|
||||||
|
if (ret != TRACE_TYPE_NO_CONSUME)
|
||||||
|
trace_consume(&iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_printk_seq(&iter.seq);
|
trace_printk_seq(&iter.seq);
|
||||||
|
|
|
@ -376,7 +376,7 @@ ftrace_event_seq_open(struct inode *inode, struct file *file)
|
||||||
const struct seq_operations *seq_ops;
|
const struct seq_operations *seq_ops;
|
||||||
|
|
||||||
if ((file->f_mode & FMODE_WRITE) &&
|
if ((file->f_mode & FMODE_WRITE) &&
|
||||||
!(file->f_flags & O_APPEND))
|
(file->f_flags & O_TRUNC))
|
||||||
ftrace_clear_events();
|
ftrace_clear_events();
|
||||||
|
|
||||||
seq_ops = inode->i_private;
|
seq_ops = inode->i_private;
|
||||||
|
|
|
@ -843,9 +843,16 @@ print_graph_function(struct trace_iterator *iter)
|
||||||
|
|
||||||
switch (entry->type) {
|
switch (entry->type) {
|
||||||
case TRACE_GRAPH_ENT: {
|
case TRACE_GRAPH_ENT: {
|
||||||
struct ftrace_graph_ent_entry *field;
|
/*
|
||||||
|
* print_graph_entry() may consume the current event,
|
||||||
|
* thus @field may become invalid, so we need to save it.
|
||||||
|
* sizeof(struct ftrace_graph_ent_entry) is very small,
|
||||||
|
* it can be safely saved at the stack.
|
||||||
|
*/
|
||||||
|
struct ftrace_graph_ent_entry *field, saved;
|
||||||
trace_assign_type(field, entry);
|
trace_assign_type(field, entry);
|
||||||
return print_graph_entry(field, s, iter);
|
saved = *field;
|
||||||
|
return print_graph_entry(&saved, s, iter);
|
||||||
}
|
}
|
||||||
case TRACE_GRAPH_RET: {
|
case TRACE_GRAPH_RET: {
|
||||||
struct ftrace_graph_ret_entry *field;
|
struct ftrace_graph_ret_entry *field;
|
||||||
|
|
|
@ -176,7 +176,7 @@ static int t_show(struct seq_file *m, void *v)
|
||||||
const char *str = *fmt;
|
const char *str = *fmt;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
seq_printf(m, "0x%lx : \"", (unsigned long)fmt);
|
seq_printf(m, "0x%lx : \"", *(unsigned long *)fmt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tabs and new lines need to be converted.
|
* Tabs and new lines need to be converted.
|
||||||
|
|
|
@ -403,7 +403,6 @@ while (<IN>) {
|
||||||
# section found, now is this a start of a function?
|
# section found, now is this a start of a function?
|
||||||
} elsif ($read_function && /$function_regex/) {
|
} elsif ($read_function && /$function_regex/) {
|
||||||
$text_found = 1;
|
$text_found = 1;
|
||||||
$offset = hex $1;
|
|
||||||
$text = $2;
|
$text = $2;
|
||||||
|
|
||||||
# if this is either a local function or a weak function
|
# if this is either a local function or a weak function
|
||||||
|
@ -412,10 +411,12 @@ while (<IN>) {
|
||||||
if (!defined($locals{$text}) && !defined($weak{$text})) {
|
if (!defined($locals{$text}) && !defined($weak{$text})) {
|
||||||
$ref_func = $text;
|
$ref_func = $text;
|
||||||
$read_function = 0;
|
$read_function = 0;
|
||||||
|
$offset = hex $1;
|
||||||
} else {
|
} else {
|
||||||
# if we already have a function, and this is weak, skip it
|
# if we already have a function, and this is weak, skip it
|
||||||
if (!defined($ref_func) || !defined($weak{$text})) {
|
if (!defined($ref_func) && !defined($weak{$text})) {
|
||||||
$ref_func = $text;
|
$ref_func = $text;
|
||||||
|
$offset = hex $1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elsif ($read_headers && /$mcount_section/) {
|
} elsif ($read_headers && /$mcount_section/) {
|
||||||
|
|
Loading…
Reference in a new issue