diff options
Diffstat (limited to 'tools/perf/builtin-kmem.c')
| -rw-r--r-- | tools/perf/builtin-kmem.c | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index 7551a5f834b8..1b04787ed90a 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c | |||
| @@ -526,7 +526,7 @@ static int __cmd_kmem(void) | |||
| 526 | } | 526 | } |
| 527 | 527 | ||
| 528 | static const char * const kmem_usage[] = { | 528 | static const char * const kmem_usage[] = { |
| 529 | "perf kmem [<options>] {record}", | 529 | "perf kmem [<options>] {record|stat}", |
| 530 | NULL | 530 | NULL |
| 531 | }; | 531 | }; |
| 532 | 532 | ||
| @@ -686,18 +686,17 @@ static int parse_sort_opt(const struct option *opt __used, | |||
| 686 | return 0; | 686 | return 0; |
| 687 | } | 687 | } |
| 688 | 688 | ||
| 689 | static int parse_stat_opt(const struct option *opt __used, | 689 | static int parse_caller_opt(const struct option *opt __used, |
| 690 | const char *arg, int unset __used) | 690 | const char *arg, int unset __used) |
| 691 | { | 691 | { |
| 692 | if (!arg) | 692 | caller_flag = (alloc_flag + 1); |
| 693 | return -1; | 693 | return 0; |
| 694 | } | ||
| 694 | 695 | ||
| 695 | if (strcmp(arg, "alloc") == 0) | 696 | static int parse_alloc_opt(const struct option *opt __used, |
| 696 | alloc_flag = (caller_flag + 1); | 697 | const char *arg, int unset __used) |
| 697 | else if (strcmp(arg, "caller") == 0) | 698 | { |
| 698 | caller_flag = (alloc_flag + 1); | 699 | alloc_flag = (caller_flag + 1); |
| 699 | else | ||
| 700 | return -1; | ||
| 701 | return 0; | 700 | return 0; |
| 702 | } | 701 | } |
| 703 | 702 | ||
| @@ -722,14 +721,17 @@ static int parse_line_opt(const struct option *opt __used, | |||
| 722 | static const struct option kmem_options[] = { | 721 | static const struct option kmem_options[] = { |
| 723 | OPT_STRING('i', "input", &input_name, "file", | 722 | OPT_STRING('i', "input", &input_name, "file", |
| 724 | "input file name"), | 723 | "input file name"), |
| 725 | OPT_CALLBACK(0, "stat", NULL, "<alloc>|<caller>", | 724 | OPT_CALLBACK_NOOPT(0, "caller", NULL, NULL, |
| 726 | "stat selector, Pass 'alloc' or 'caller'.", | 725 | "show per-callsite statistics", |
| 727 | parse_stat_opt), | 726 | parse_caller_opt), |
| 727 | OPT_CALLBACK_NOOPT(0, "alloc", NULL, NULL, | ||
| 728 | "show per-allocation statistics", | ||
| 729 | parse_alloc_opt), | ||
| 728 | OPT_CALLBACK('s', "sort", NULL, "key[,key2...]", | 730 | OPT_CALLBACK('s', "sort", NULL, "key[,key2...]", |
| 729 | "sort by keys: ptr, call_site, bytes, hit, pingpong, frag", | 731 | "sort by keys: ptr, call_site, bytes, hit, pingpong, frag", |
| 730 | parse_sort_opt), | 732 | parse_sort_opt), |
| 731 | OPT_CALLBACK('l', "line", NULL, "num", | 733 | OPT_CALLBACK('l', "line", NULL, "num", |
| 732 | "show n lins", | 734 | "show n lines", |
| 733 | parse_line_opt), | 735 | parse_line_opt), |
| 734 | OPT_BOOLEAN(0, "raw-ip", &raw_ip, "show raw ip instead of symbol"), | 736 | OPT_BOOLEAN(0, "raw-ip", &raw_ip, "show raw ip instead of symbol"), |
| 735 | OPT_END() | 737 | OPT_END() |
| @@ -773,18 +775,22 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __used) | |||
| 773 | 775 | ||
| 774 | argc = parse_options(argc, argv, kmem_options, kmem_usage, 0); | 776 | argc = parse_options(argc, argv, kmem_options, kmem_usage, 0); |
| 775 | 777 | ||
| 776 | if (argc && !strncmp(argv[0], "rec", 3)) | 778 | if (!argc) |
| 777 | return __cmd_record(argc, argv); | ||
| 778 | else if (argc) | ||
| 779 | usage_with_options(kmem_usage, kmem_options); | 779 | usage_with_options(kmem_usage, kmem_options); |
| 780 | 780 | ||
| 781 | if (list_empty(&caller_sort)) | 781 | if (!strncmp(argv[0], "rec", 3)) { |
| 782 | setup_sorting(&caller_sort, default_sort_order); | 782 | return __cmd_record(argc, argv); |
| 783 | if (list_empty(&alloc_sort)) | 783 | } else if (!strcmp(argv[0], "stat")) { |
| 784 | setup_sorting(&alloc_sort, default_sort_order); | 784 | setup_cpunode_map(); |
| 785 | |||
| 786 | if (list_empty(&caller_sort)) | ||
| 787 | setup_sorting(&caller_sort, default_sort_order); | ||
| 788 | if (list_empty(&alloc_sort)) | ||
| 789 | setup_sorting(&alloc_sort, default_sort_order); | ||
| 785 | 790 | ||
| 786 | setup_cpunode_map(); | 791 | return __cmd_kmem(); |
| 792 | } | ||
| 787 | 793 | ||
| 788 | return __cmd_kmem(); | 794 | return 0; |
| 789 | } | 795 | } |
| 790 | 796 | ||
