diff options
-rw-r--r-- | kernel/trace/trace_functions_graph.c | 98 |
1 files changed, 29 insertions, 69 deletions
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c index 6004ccac2dd7..2d4d185cd0d8 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c | |||
@@ -554,24 +554,24 @@ print_graph_entry_nested(struct ftrace_graph_ent_entry *entry, | |||
554 | } | 554 | } |
555 | 555 | ||
556 | static enum print_line_t | 556 | static enum print_line_t |
557 | print_graph_entry(struct ftrace_graph_ent_entry *field, struct trace_seq *s, | 557 | print_graph_prologue(struct trace_iterator *iter, struct trace_seq *s, |
558 | struct trace_iterator *iter) | 558 | int type, unsigned long addr) |
559 | { | 559 | { |
560 | int ret; | ||
561 | int cpu = iter->cpu; | ||
562 | pid_t *last_entry = iter->private; | ||
563 | struct trace_entry *ent = iter->ent; | 560 | struct trace_entry *ent = iter->ent; |
564 | struct ftrace_graph_ent *call = &field->graph_ent; | 561 | pid_t *last_pid = iter->private; |
565 | struct ftrace_graph_ret_entry *leaf_ret; | 562 | int cpu = iter->cpu; |
563 | int ret; | ||
566 | 564 | ||
567 | /* Pid */ | 565 | /* Pid */ |
568 | if (verif_pid(s, ent->pid, cpu, last_entry) == TRACE_TYPE_PARTIAL_LINE) | 566 | if (verif_pid(s, ent->pid, cpu, last_pid) == TRACE_TYPE_PARTIAL_LINE) |
569 | return TRACE_TYPE_PARTIAL_LINE; | 567 | return TRACE_TYPE_PARTIAL_LINE; |
570 | 568 | ||
571 | /* Interrupt */ | 569 | if (type) { |
572 | ret = print_graph_irq(iter, call->func, TRACE_GRAPH_ENT, cpu, ent->pid); | 570 | /* Interrupt */ |
573 | if (ret == TRACE_TYPE_PARTIAL_LINE) | 571 | ret = print_graph_irq(iter, addr, type, cpu, ent->pid); |
574 | return TRACE_TYPE_PARTIAL_LINE; | 572 | if (ret == TRACE_TYPE_PARTIAL_LINE) |
573 | return TRACE_TYPE_PARTIAL_LINE; | ||
574 | } | ||
575 | 575 | ||
576 | /* Absolute time */ | 576 | /* Absolute time */ |
577 | if (tracer_flags.val & TRACE_GRAPH_PRINT_ABS_TIME) { | 577 | if (tracer_flags.val & TRACE_GRAPH_PRINT_ABS_TIME) { |
@@ -598,6 +598,20 @@ print_graph_entry(struct ftrace_graph_ent_entry *field, struct trace_seq *s, | |||
598 | return TRACE_TYPE_PARTIAL_LINE; | 598 | return TRACE_TYPE_PARTIAL_LINE; |
599 | } | 599 | } |
600 | 600 | ||
601 | return 0; | ||
602 | } | ||
603 | |||
604 | static enum print_line_t | ||
605 | print_graph_entry(struct ftrace_graph_ent_entry *field, struct trace_seq *s, | ||
606 | struct trace_iterator *iter) | ||
607 | { | ||
608 | int cpu = iter->cpu; | ||
609 | struct ftrace_graph_ent *call = &field->graph_ent; | ||
610 | struct ftrace_graph_ret_entry *leaf_ret; | ||
611 | |||
612 | if (print_graph_prologue(iter, s, TRACE_GRAPH_ENT, call->func)) | ||
613 | return TRACE_TYPE_PARTIAL_LINE; | ||
614 | |||
601 | leaf_ret = get_return_for_leaf(iter, field); | 615 | leaf_ret = get_return_for_leaf(iter, field); |
602 | if (leaf_ret) | 616 | if (leaf_ret) |
603 | return print_graph_entry_leaf(iter, field, leaf_ret, s); | 617 | return print_graph_entry_leaf(iter, field, leaf_ret, s); |
@@ -613,38 +627,12 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s, | |||
613 | int i; | 627 | int i; |
614 | int ret; | 628 | int ret; |
615 | int cpu = iter->cpu; | 629 | int cpu = iter->cpu; |
616 | pid_t *last_pid = iter->private, pid = ent->pid; | 630 | pid_t pid = ent->pid; |
617 | unsigned long long duration = trace->rettime - trace->calltime; | 631 | unsigned long long duration = trace->rettime - trace->calltime; |
618 | 632 | ||
619 | /* Pid */ | 633 | if (print_graph_prologue(iter, s, 0, 0)) |
620 | if (verif_pid(s, pid, cpu, last_pid) == TRACE_TYPE_PARTIAL_LINE) | ||
621 | return TRACE_TYPE_PARTIAL_LINE; | 634 | return TRACE_TYPE_PARTIAL_LINE; |
622 | 635 | ||
623 | /* Absolute time */ | ||
624 | if (tracer_flags.val & TRACE_GRAPH_PRINT_ABS_TIME) { | ||
625 | ret = print_graph_abs_time(iter->ts, s); | ||
626 | if (!ret) | ||
627 | return TRACE_TYPE_PARTIAL_LINE; | ||
628 | } | ||
629 | |||
630 | /* Cpu */ | ||
631 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) { | ||
632 | ret = print_graph_cpu(s, cpu); | ||
633 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
634 | return TRACE_TYPE_PARTIAL_LINE; | ||
635 | } | ||
636 | |||
637 | /* Proc */ | ||
638 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) { | ||
639 | ret = print_graph_proc(s, ent->pid); | ||
640 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
641 | return TRACE_TYPE_PARTIAL_LINE; | ||
642 | |||
643 | ret = trace_seq_printf(s, " | "); | ||
644 | if (!ret) | ||
645 | return TRACE_TYPE_PARTIAL_LINE; | ||
646 | } | ||
647 | |||
648 | /* Overhead */ | 636 | /* Overhead */ |
649 | ret = print_graph_overhead(duration, s); | 637 | ret = print_graph_overhead(duration, s); |
650 | if (!ret) | 638 | if (!ret) |
@@ -689,38 +677,10 @@ print_graph_comment(struct bprint_entry *trace, struct trace_seq *s, | |||
689 | { | 677 | { |
690 | int i; | 678 | int i; |
691 | int ret; | 679 | int ret; |
692 | int cpu = iter->cpu; | ||
693 | pid_t *last_pid = iter->private; | ||
694 | 680 | ||
695 | /* Pid */ | 681 | if (print_graph_prologue(iter, s, 0, 0)) |
696 | if (verif_pid(s, ent->pid, cpu, last_pid) == TRACE_TYPE_PARTIAL_LINE) | ||
697 | return TRACE_TYPE_PARTIAL_LINE; | 682 | return TRACE_TYPE_PARTIAL_LINE; |
698 | 683 | ||
699 | /* Absolute time */ | ||
700 | if (tracer_flags.val & TRACE_GRAPH_PRINT_ABS_TIME) { | ||
701 | ret = print_graph_abs_time(iter->ts, s); | ||
702 | if (!ret) | ||
703 | return TRACE_TYPE_PARTIAL_LINE; | ||
704 | } | ||
705 | |||
706 | /* Cpu */ | ||
707 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) { | ||
708 | ret = print_graph_cpu(s, cpu); | ||
709 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
710 | return TRACE_TYPE_PARTIAL_LINE; | ||
711 | } | ||
712 | |||
713 | /* Proc */ | ||
714 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) { | ||
715 | ret = print_graph_proc(s, ent->pid); | ||
716 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
717 | return TRACE_TYPE_PARTIAL_LINE; | ||
718 | |||
719 | ret = trace_seq_printf(s, " | "); | ||
720 | if (!ret) | ||
721 | return TRACE_TYPE_PARTIAL_LINE; | ||
722 | } | ||
723 | |||
724 | /* No overhead */ | 684 | /* No overhead */ |
725 | ret = print_graph_overhead(-1, s); | 685 | ret = print_graph_overhead(-1, s); |
726 | if (!ret) | 686 | if (!ret) |