mirror of
https://github.com/armbian/linux.git
synced 2026-01-06 10:13:00 -08:00
tracing: Add ftrace_trace_stack into __trace_puts/__trace_bputs
commit 8abfb8727f upstream.
Currently trace option stacktrace is not applicable for
trace_printk with constant string argument, the reason is
in __trace_puts/__trace_bputs ftrace_trace_stack is missing.
In contrast, when using trace_printk with non constant string
argument(will call into __trace_printk/__trace_bprintk), then
trace option stacktrace is workable, this inconstant result
will confuses users a lot.
Link: http://lkml.kernel.org/p/51E7A7C9.9040401@huawei.com
Signed-off-by: zhangwei(Jovi) <jovi.zhangwei@huawei.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9b87c4e58f
commit
e250100bed
@@ -423,6 +423,9 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
||||
struct print_entry *entry;
|
||||
unsigned long irq_flags;
|
||||
int alloc;
|
||||
int pc;
|
||||
|
||||
pc = preempt_count();
|
||||
|
||||
if (unlikely(tracing_selftest_running || tracing_disabled))
|
||||
return 0;
|
||||
@@ -432,7 +435,7 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
||||
local_save_flags(irq_flags);
|
||||
buffer = global_trace.trace_buffer.buffer;
|
||||
event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
|
||||
irq_flags, preempt_count());
|
||||
irq_flags, pc);
|
||||
if (!event)
|
||||
return 0;
|
||||
|
||||
@@ -449,6 +452,7 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
||||
entry->buf[size] = '\0';
|
||||
|
||||
__buffer_unlock_commit(buffer, event);
|
||||
ftrace_trace_stack(buffer, irq_flags, 4, pc);
|
||||
|
||||
return size;
|
||||
}
|
||||
@@ -466,6 +470,9 @@ int __trace_bputs(unsigned long ip, const char *str)
|
||||
struct bputs_entry *entry;
|
||||
unsigned long irq_flags;
|
||||
int size = sizeof(struct bputs_entry);
|
||||
int pc;
|
||||
|
||||
pc = preempt_count();
|
||||
|
||||
if (unlikely(tracing_selftest_running || tracing_disabled))
|
||||
return 0;
|
||||
@@ -473,7 +480,7 @@ int __trace_bputs(unsigned long ip, const char *str)
|
||||
local_save_flags(irq_flags);
|
||||
buffer = global_trace.trace_buffer.buffer;
|
||||
event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
|
||||
irq_flags, preempt_count());
|
||||
irq_flags, pc);
|
||||
if (!event)
|
||||
return 0;
|
||||
|
||||
@@ -482,6 +489,7 @@ int __trace_bputs(unsigned long ip, const char *str)
|
||||
entry->str = str;
|
||||
|
||||
__buffer_unlock_commit(buffer, event);
|
||||
ftrace_trace_stack(buffer, irq_flags, 4, pc);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user