mirror of https://gitee.com/openkylin/linux.git
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)
|
||||
{
|
||||
tracing_off();
|
||||
/* can't trust the integrity of the kernel anymore: */
|
||||
debug_locks_off();
|
||||
do_oops_enter_exit();
|
||||
|
|
|
@ -1662,7 +1662,7 @@ ftrace_regex_open(struct inode *inode, struct file *file, int enable)
|
|||
|
||||
mutex_lock(&ftrace_regex_lock);
|
||||
if ((file->f_mode & FMODE_WRITE) &&
|
||||
!(file->f_flags & O_APPEND))
|
||||
(file->f_flags & O_TRUNC))
|
||||
ftrace_filter_reset(enable);
|
||||
|
||||
if (file->f_mode & FMODE_READ) {
|
||||
|
@ -2577,7 +2577,7 @@ ftrace_graph_open(struct inode *inode, struct file *file)
|
|||
|
||||
mutex_lock(&graph_lock);
|
||||
if ((file->f_mode & FMODE_WRITE) &&
|
||||
!(file->f_flags & O_APPEND)) {
|
||||
(file->f_flags & O_TRUNC)) {
|
||||
ftrace_graph_count = 0;
|
||||
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 ((file->f_mode & FMODE_WRITE) &&
|
||||
!(file->f_flags & O_APPEND)) {
|
||||
(file->f_flags & O_TRUNC)) {
|
||||
long cpu = (long) inode->i_private;
|
||||
|
||||
if (cpu == TRACE_PIPE_ALL_CPU)
|
||||
|
@ -3085,7 +3085,8 @@ tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
|
|||
break;
|
||||
}
|
||||
|
||||
trace_consume(iter);
|
||||
if (ret != TRACE_TYPE_NO_CONSUME)
|
||||
trace_consume(iter);
|
||||
rem -= count;
|
||||
if (!find_next_entry_inc(iter)) {
|
||||
rem = 0;
|
||||
|
@ -4233,8 +4234,11 @@ static void __ftrace_dump(bool disable_tracing)
|
|||
iter.pos = -1;
|
||||
|
||||
if (find_next_entry_inc(&iter) != NULL) {
|
||||
print_trace_line(&iter);
|
||||
trace_consume(&iter);
|
||||
int ret;
|
||||
|
||||
ret = print_trace_line(&iter);
|
||||
if (ret != TRACE_TYPE_NO_CONSUME)
|
||||
trace_consume(&iter);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if ((file->f_mode & FMODE_WRITE) &&
|
||||
!(file->f_flags & O_APPEND))
|
||||
(file->f_flags & O_TRUNC))
|
||||
ftrace_clear_events();
|
||||
|
||||
seq_ops = inode->i_private;
|
||||
|
|
|
@ -843,9 +843,16 @@ print_graph_function(struct trace_iterator *iter)
|
|||
|
||||
switch (entry->type) {
|
||||
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);
|
||||
return print_graph_entry(field, s, iter);
|
||||
saved = *field;
|
||||
return print_graph_entry(&saved, s, iter);
|
||||
}
|
||||
case TRACE_GRAPH_RET: {
|
||||
struct ftrace_graph_ret_entry *field;
|
||||
|
|
|
@ -176,7 +176,7 @@ static int t_show(struct seq_file *m, void *v)
|
|||
const char *str = *fmt;
|
||||
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.
|
||||
|
|
|
@ -403,7 +403,6 @@ while (<IN>) {
|
|||
# section found, now is this a start of a function?
|
||||
} elsif ($read_function && /$function_regex/) {
|
||||
$text_found = 1;
|
||||
$offset = hex $1;
|
||||
$text = $2;
|
||||
|
||||
# if this is either a local function or a weak function
|
||||
|
@ -412,10 +411,12 @@ while (<IN>) {
|
|||
if (!defined($locals{$text}) && !defined($weak{$text})) {
|
||||
$ref_func = $text;
|
||||
$read_function = 0;
|
||||
$offset = hex $1;
|
||||
} else {
|
||||
# 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;
|
||||
$offset = hex $1;
|
||||
}
|
||||
}
|
||||
} elsif ($read_headers && /$mcount_section/) {
|
||||
|
|
Loading…
Reference in New Issue