mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
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:
parent
637e7e8641
commit
f81c972d27
3 changed files with 28 additions and 30 deletions
|
@ -367,32 +367,10 @@ print_graph_proc(struct trace_seq *s, pid_t pid)
|
||||||
static enum print_line_t
|
static enum print_line_t
|
||||||
print_graph_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
|
print_graph_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
|
||||||
{
|
{
|
||||||
int hardirq, softirq;
|
if (!trace_seq_putc(s, ' '))
|
||||||
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' : '.'))
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (entry->lock_depth < 0)
|
return trace_print_lat_fmt(s, entry);
|
||||||
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, ".");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the pid changed since the last trace, output this event */
|
/* 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;
|
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;
|
int hardirq, softirq;
|
||||||
char comm[TASK_COMM_LEN];
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
trace_find_cmdline(entry->pid, comm);
|
|
||||||
hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
|
hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
|
||||||
softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
|
softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
|
||||||
|
|
||||||
if (!trace_seq_printf(s, "%8.8s-%-5d %3d%c%c%c",
|
if (!trace_seq_printf(s, "%c%c%c",
|
||||||
comm, entry->pid, cpu,
|
|
||||||
(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
|
(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
|
||||||
(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
|
(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
|
||||||
'X' : '.',
|
'X' : '.',
|
||||||
|
@ -494,6 +498,20 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
|
||||||
return trace_seq_putc(s, '.');
|
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 unsigned long preempt_mark_thresh = 100;
|
||||||
|
|
||||||
static int
|
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,
|
extern enum print_line_t trace_nop_print(struct trace_iterator *iter,
|
||||||
int flags);
|
int flags);
|
||||||
|
extern int
|
||||||
|
trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry);
|
||||||
|
|
||||||
/* used by module unregistering */
|
/* used by module unregistering */
|
||||||
extern int __unregister_ftrace_event(struct trace_event *event);
|
extern int __unregister_ftrace_event(struct trace_event *event);
|
||||||
|
|
Loading…
Reference in a new issue