tracing: consolidate code between trace_output.c and trace_function_graph.c
Both trace_output.c and trace_function_graph.c do basically the same thing to handle the printing of the latency-format. This patch moves the code into one function that both can use. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Родитель
637e7e8641
Коммит
f81c972d27
|
@ -367,32 +367,10 @@ print_graph_proc(struct trace_seq *s, pid_t pid)
|
|||
static enum print_line_t
|
||||
print_graph_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
|
||||
{
|
||||
int hardirq, softirq;
|
||||
int ret;
|
||||
|
||||
hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
|
||||
softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
|
||||
|
||||
if (!trace_seq_printf(s, " %c%c%c",
|
||||
(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
|
||||
(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
|
||||
'X' : '.',
|
||||
(entry->flags & TRACE_FLAG_NEED_RESCHED) ?
|
||||
'N' : '.',
|
||||
(hardirq && softirq) ? 'H' :
|
||||
hardirq ? 'h' : softirq ? 's' : '.'))
|
||||
if (!trace_seq_putc(s, ' '))
|
||||
return 0;
|
||||
|
||||
if (entry->lock_depth < 0)
|
||||
ret = trace_seq_putc(s, '.');
|
||||
else
|
||||
ret = trace_seq_printf(s, "%d", entry->lock_depth);
|
||||
if (!ret)
|
||||
return 0;
|
||||
|
||||
if (entry->preempt_count)
|
||||
return trace_seq_printf(s, "%x", entry->preempt_count);
|
||||
return trace_seq_puts(s, ".");
|
||||
return trace_print_lat_fmt(s, entry);
|
||||
}
|
||||
|
||||
/* If the pid changed since the last trace, output this event */
|
||||
|
|
|
@ -460,19 +460,23 @@ seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
|
||||
/**
|
||||
* trace_print_lat_fmt - print the irq, preempt and lockdep fields
|
||||
* @s: trace seq struct to write to
|
||||
* @entry: The trace entry field from the ring buffer
|
||||
*
|
||||
* Prints the generic fields of irqs off, in hard or softirq, preempt
|
||||
* count and lock depth.
|
||||
*/
|
||||
int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
|
||||
{
|
||||
int hardirq, softirq;
|
||||
char comm[TASK_COMM_LEN];
|
||||
int ret;
|
||||
|
||||
trace_find_cmdline(entry->pid, comm);
|
||||
hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
|
||||
softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
|
||||
|
||||
if (!trace_seq_printf(s, "%8.8s-%-5d %3d%c%c%c",
|
||||
comm, entry->pid, cpu,
|
||||
if (!trace_seq_printf(s, "%c%c%c",
|
||||
(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
|
||||
(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
|
||||
'X' : '.',
|
||||
|
@ -494,6 +498,20 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
|
|||
return trace_seq_putc(s, '.');
|
||||
}
|
||||
|
||||
static int
|
||||
lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
|
||||
{
|
||||
char comm[TASK_COMM_LEN];
|
||||
|
||||
trace_find_cmdline(entry->pid, comm);
|
||||
|
||||
if (!trace_seq_printf(s, "%8.8s-%-5d %3d",
|
||||
comm, entry->pid, cpu))
|
||||
return 0;
|
||||
|
||||
return trace_print_lat_fmt(s, entry);
|
||||
}
|
||||
|
||||
static unsigned long preempt_mark_thresh = 100;
|
||||
|
||||
static int
|
||||
|
|
|
@ -26,6 +26,8 @@ extern struct trace_event *ftrace_find_event(int type);
|
|||
|
||||
extern enum print_line_t trace_nop_print(struct trace_iterator *iter,
|
||||
int flags);
|
||||
extern int
|
||||
trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry);
|
||||
|
||||
/* used by module unregistering */
|
||||
extern int __unregister_ftrace_event(struct trace_event *event);
|
||||
|
|
Загрузка…
Ссылка в новой задаче