diff options
author | Namhyung Kim <namhyung@kernel.org> | 2014-09-22 21:01:41 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-09-26 11:40:33 -0400 |
commit | 72a128aa083a7f4cc4f800718aaae05d9c698e26 (patch) | |
tree | 9ae890a7d8bc073bca3d23159aa96562c7422e46 /tools/perf/builtin-record.c | |
parent | 72f72ed21e56c386dd92118e5da3ce06752b1614 (diff) |
perf tools: Move callchain config from record_opts to callchain_param
So that all callchain config parameters can be read/written to a single
place. It's a preparation to consolidate handling of all callchain
options.
Reviewed-by: David Ahern <dsahern@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1411434104-5307-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-record.c')
-rw-r--r-- | tools/perf/builtin-record.c | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 320b198b54dd..fde0df72beaa 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -652,7 +652,7 @@ static int get_stack_size(char *str, unsigned long *_size) | |||
652 | } | 652 | } |
653 | #endif /* HAVE_DWARF_UNWIND_SUPPORT */ | 653 | #endif /* HAVE_DWARF_UNWIND_SUPPORT */ |
654 | 654 | ||
655 | int record_parse_callchain(const char *arg, struct record_opts *opts) | 655 | int record_parse_callchain(const char *arg) |
656 | { | 656 | { |
657 | char *tok, *name, *saveptr = NULL; | 657 | char *tok, *name, *saveptr = NULL; |
658 | char *buf; | 658 | char *buf; |
@@ -672,7 +672,7 @@ int record_parse_callchain(const char *arg, struct record_opts *opts) | |||
672 | /* Framepointer style */ | 672 | /* Framepointer style */ |
673 | if (!strncmp(name, "fp", sizeof("fp"))) { | 673 | if (!strncmp(name, "fp", sizeof("fp"))) { |
674 | if (!strtok_r(NULL, ",", &saveptr)) { | 674 | if (!strtok_r(NULL, ",", &saveptr)) { |
675 | opts->call_graph = CALLCHAIN_FP; | 675 | callchain_param.record_mode = CALLCHAIN_FP; |
676 | ret = 0; | 676 | ret = 0; |
677 | } else | 677 | } else |
678 | pr_err("callchain: No more arguments " | 678 | pr_err("callchain: No more arguments " |
@@ -685,15 +685,15 @@ int record_parse_callchain(const char *arg, struct record_opts *opts) | |||
685 | const unsigned long default_stack_dump_size = 8192; | 685 | const unsigned long default_stack_dump_size = 8192; |
686 | 686 | ||
687 | ret = 0; | 687 | ret = 0; |
688 | opts->call_graph = CALLCHAIN_DWARF; | 688 | callchain_param.record_mode = CALLCHAIN_DWARF; |
689 | opts->stack_dump_size = default_stack_dump_size; | 689 | callchain_param.dump_size = default_stack_dump_size; |
690 | 690 | ||
691 | tok = strtok_r(NULL, ",", &saveptr); | 691 | tok = strtok_r(NULL, ",", &saveptr); |
692 | if (tok) { | 692 | if (tok) { |
693 | unsigned long size = 0; | 693 | unsigned long size = 0; |
694 | 694 | ||
695 | ret = get_stack_size(tok, &size); | 695 | ret = get_stack_size(tok, &size); |
696 | opts->stack_dump_size = size; | 696 | callchain_param.dump_size = size; |
697 | } | 697 | } |
698 | #endif /* HAVE_DWARF_UNWIND_SUPPORT */ | 698 | #endif /* HAVE_DWARF_UNWIND_SUPPORT */ |
699 | } else { | 699 | } else { |
@@ -708,61 +708,56 @@ int record_parse_callchain(const char *arg, struct record_opts *opts) | |||
708 | return ret; | 708 | return ret; |
709 | } | 709 | } |
710 | 710 | ||
711 | static void callchain_debug(struct record_opts *opts) | 711 | static void callchain_debug(void) |
712 | { | 712 | { |
713 | static const char *str[CALLCHAIN_MAX] = { "NONE", "FP", "DWARF" }; | 713 | static const char *str[CALLCHAIN_MAX] = { "NONE", "FP", "DWARF" }; |
714 | 714 | ||
715 | pr_debug("callchain: type %s\n", str[opts->call_graph]); | 715 | pr_debug("callchain: type %s\n", str[callchain_param.record_mode]); |
716 | 716 | ||
717 | if (opts->call_graph == CALLCHAIN_DWARF) | 717 | if (callchain_param.record_mode == CALLCHAIN_DWARF) |
718 | pr_debug("callchain: stack dump size %d\n", | 718 | pr_debug("callchain: stack dump size %d\n", |
719 | opts->stack_dump_size); | 719 | callchain_param.dump_size); |
720 | } | 720 | } |
721 | 721 | ||
722 | int record_parse_callchain_opt(const struct option *opt, | 722 | int record_parse_callchain_opt(const struct option *opt __maybe_unused, |
723 | const char *arg, | 723 | const char *arg, |
724 | int unset) | 724 | int unset) |
725 | { | 725 | { |
726 | struct record_opts *opts = opt->value; | ||
727 | int ret; | 726 | int ret; |
728 | 727 | ||
729 | opts->call_graph_enabled = !unset; | 728 | callchain_param.enabled = !unset; |
730 | 729 | ||
731 | /* --no-call-graph */ | 730 | /* --no-call-graph */ |
732 | if (unset) { | 731 | if (unset) { |
733 | opts->call_graph = CALLCHAIN_NONE; | 732 | callchain_param.record_mode = CALLCHAIN_NONE; |
734 | pr_debug("callchain: disabled\n"); | 733 | pr_debug("callchain: disabled\n"); |
735 | return 0; | 734 | return 0; |
736 | } | 735 | } |
737 | 736 | ||
738 | ret = record_parse_callchain(arg, opts); | 737 | ret = record_parse_callchain(arg); |
739 | if (!ret) | 738 | if (!ret) |
740 | callchain_debug(opts); | 739 | callchain_debug(); |
741 | 740 | ||
742 | return ret; | 741 | return ret; |
743 | } | 742 | } |
744 | 743 | ||
745 | int record_callchain_opt(const struct option *opt, | 744 | int record_callchain_opt(const struct option *opt __maybe_unused, |
746 | const char *arg __maybe_unused, | 745 | const char *arg __maybe_unused, |
747 | int unset __maybe_unused) | 746 | int unset __maybe_unused) |
748 | { | 747 | { |
749 | struct record_opts *opts = opt->value; | 748 | callchain_param.enabled = true; |
750 | 749 | ||
751 | opts->call_graph_enabled = !unset; | 750 | if (callchain_param.record_mode == CALLCHAIN_NONE) |
751 | callchain_param.record_mode = CALLCHAIN_FP; | ||
752 | 752 | ||
753 | if (opts->call_graph == CALLCHAIN_NONE) | 753 | callchain_debug(); |
754 | opts->call_graph = CALLCHAIN_FP; | ||
755 | |||
756 | callchain_debug(opts); | ||
757 | return 0; | 754 | return 0; |
758 | } | 755 | } |
759 | 756 | ||
760 | static int perf_record_config(const char *var, const char *value, void *cb) | 757 | static int perf_record_config(const char *var, const char *value, void *cb) |
761 | { | 758 | { |
762 | struct record *rec = cb; | ||
763 | |||
764 | if (!strcmp(var, "record.call-graph")) | 759 | if (!strcmp(var, "record.call-graph")) |
765 | return record_parse_callchain(value, &rec->opts); | 760 | return record_parse_callchain(value); |
766 | 761 | ||
767 | return perf_default_config(var, value, cb); | 762 | return perf_default_config(var, value, cb); |
768 | } | 763 | } |