diff options
| author | Ingo Molnar <mingo@kernel.org> | 2012-06-06 02:40:10 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2012-06-06 02:46:33 -0400 |
| commit | 02e03040a3fda866e5d1018734bd5b5ede997043 (patch) | |
| tree | 5bb2b9ea8c25504cd45a79d576839bafe6610dd0 | |
| parent | f9ba7179ce91fb77b2adf6eaab3676ab3a1f5a15 (diff) | |
| parent | cb7225feec627e91d598198996429e9ee6804f8d (diff) | |
Merge tag 'perf-urgent-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent
Pull perf fixes from Arnaldo Carvalho de Melo:
* Endianness fixes from Jiri Olsa
* Fixes for make perf tarball
* Fix for DSO name in perf script callchains, from David Ahern
* Segfault fixes for perf top --callchain, from Namhyung Kim
* Minor function result fixes from Srikar Dronamraju
* Add missing 3rd ioctl parameter, from Namhyung Kim
* Fix pager usage in minimal embedded systems, from Avik Sil
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
| -rw-r--r-- | include/linux/perf_event.h | 4 | ||||
| -rw-r--r-- | kernel/events/core.c | 1 | ||||
| -rw-r--r-- | tools/perf/MANIFEST | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-report.c | 4 | ||||
| -rw-r--r-- | tools/perf/builtin-stat.c | 8 | ||||
| -rw-r--r-- | tools/perf/builtin-top.c | 2 | ||||
| -rw-r--r-- | tools/perf/design.txt | 7 | ||||
| -rw-r--r-- | tools/perf/ui/browsers/annotate.c | 2 | ||||
| -rwxr-xr-x | tools/perf/util/PERF-VERSION-GEN | 2 | ||||
| -rw-r--r-- | tools/perf/util/callchain.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/callchain.h | 2 | ||||
| -rw-r--r-- | tools/perf/util/evlist.c | 17 | ||||
| -rw-r--r-- | tools/perf/util/evlist.h | 4 | ||||
| -rw-r--r-- | tools/perf/util/evsel.c | 29 | ||||
| -rw-r--r-- | tools/perf/util/hist.c | 7 | ||||
| -rw-r--r-- | tools/perf/util/hist.h | 2 | ||||
| -rw-r--r-- | tools/perf/util/pager.c | 4 | ||||
| -rw-r--r-- | tools/perf/util/probe-event.c | 8 | ||||
| -rw-r--r-- | tools/perf/util/session.c | 97 | ||||
| -rw-r--r-- | tools/perf/util/symbol.c | 38 | ||||
| -rw-r--r-- | tools/perf/util/symbol.h | 30 |
21 files changed, 214 insertions, 58 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index f32578634d9d..1817d4015e5f 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -555,6 +555,8 @@ enum perf_event_type { | |||
| 555 | PERF_RECORD_MAX, /* non-ABI */ | 555 | PERF_RECORD_MAX, /* non-ABI */ |
| 556 | }; | 556 | }; |
| 557 | 557 | ||
| 558 | #define PERF_MAX_STACK_DEPTH 255 | ||
| 559 | |||
| 558 | enum perf_callchain_context { | 560 | enum perf_callchain_context { |
| 559 | PERF_CONTEXT_HV = (__u64)-32, | 561 | PERF_CONTEXT_HV = (__u64)-32, |
| 560 | PERF_CONTEXT_KERNEL = (__u64)-128, | 562 | PERF_CONTEXT_KERNEL = (__u64)-128, |
| @@ -609,8 +611,6 @@ struct perf_guest_info_callbacks { | |||
| 609 | #include <linux/sysfs.h> | 611 | #include <linux/sysfs.h> |
| 610 | #include <asm/local.h> | 612 | #include <asm/local.h> |
| 611 | 613 | ||
| 612 | #define PERF_MAX_STACK_DEPTH 255 | ||
| 613 | |||
| 614 | struct perf_callchain_entry { | 614 | struct perf_callchain_entry { |
| 615 | __u64 nr; | 615 | __u64 nr; |
| 616 | __u64 ip[PERF_MAX_STACK_DEPTH]; | 616 | __u64 ip[PERF_MAX_STACK_DEPTH]; |
diff --git a/kernel/events/core.c b/kernel/events/core.c index 5b06cbbf6931..f85c0154b333 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
| @@ -3181,7 +3181,6 @@ static void perf_event_for_each(struct perf_event *event, | |||
| 3181 | event = event->group_leader; | 3181 | event = event->group_leader; |
| 3182 | 3182 | ||
| 3183 | perf_event_for_each_child(event, func); | 3183 | perf_event_for_each_child(event, func); |
| 3184 | func(event); | ||
| 3185 | list_for_each_entry(sibling, &event->sibling_list, group_entry) | 3184 | list_for_each_entry(sibling, &event->sibling_list, group_entry) |
| 3186 | perf_event_for_each_child(sibling, func); | 3185 | perf_event_for_each_child(sibling, func); |
| 3187 | mutex_unlock(&ctx->mutex); | 3186 | mutex_unlock(&ctx->mutex); |
diff --git a/tools/perf/MANIFEST b/tools/perf/MANIFEST index 5476bc0a1eac..b4b572e8c100 100644 --- a/tools/perf/MANIFEST +++ b/tools/perf/MANIFEST | |||
| @@ -1,4 +1,6 @@ | |||
| 1 | tools/perf | 1 | tools/perf |
| 2 | tools/scripts | ||
| 3 | tools/lib/traceevent | ||
| 2 | include/linux/const.h | 4 | include/linux/const.h |
| 3 | include/linux/perf_event.h | 5 | include/linux/perf_event.h |
| 4 | include/linux/rbtree.h | 6 | include/linux/rbtree.h |
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 8c767c6bca91..25249f76329d 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
| @@ -152,7 +152,7 @@ static int perf_evsel__add_hist_entry(struct perf_evsel *evsel, | |||
| 152 | 152 | ||
| 153 | if (symbol_conf.use_callchain) { | 153 | if (symbol_conf.use_callchain) { |
| 154 | err = callchain_append(he->callchain, | 154 | err = callchain_append(he->callchain, |
| 155 | &evsel->hists.callchain_cursor, | 155 | &callchain_cursor, |
| 156 | sample->period); | 156 | sample->period); |
| 157 | if (err) | 157 | if (err) |
| 158 | return err; | 158 | return err; |
| @@ -162,7 +162,7 @@ static int perf_evsel__add_hist_entry(struct perf_evsel *evsel, | |||
| 162 | * so we don't allocated the extra space needed because the stdio | 162 | * so we don't allocated the extra space needed because the stdio |
| 163 | * code will not use it. | 163 | * code will not use it. |
| 164 | */ | 164 | */ |
| 165 | if (al->sym != NULL && use_browser > 0) { | 165 | if (he->ms.sym != NULL && use_browser > 0) { |
| 166 | struct annotation *notes = symbol__annotation(he->ms.sym); | 166 | struct annotation *notes = symbol__annotation(he->ms.sym); |
| 167 | 167 | ||
| 168 | assert(evsel != NULL); | 168 | assert(evsel != NULL); |
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 62ae30d34fa6..262589991ea4 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
| @@ -1129,7 +1129,7 @@ static int add_default_attributes(void) | |||
| 1129 | return 0; | 1129 | return 0; |
| 1130 | 1130 | ||
| 1131 | if (!evsel_list->nr_entries) { | 1131 | if (!evsel_list->nr_entries) { |
| 1132 | if (perf_evlist__add_attrs_array(evsel_list, default_attrs) < 0) | 1132 | if (perf_evlist__add_default_attrs(evsel_list, default_attrs) < 0) |
| 1133 | return -1; | 1133 | return -1; |
| 1134 | } | 1134 | } |
| 1135 | 1135 | ||
| @@ -1139,21 +1139,21 @@ static int add_default_attributes(void) | |||
| 1139 | return 0; | 1139 | return 0; |
| 1140 | 1140 | ||
| 1141 | /* Append detailed run extra attributes: */ | 1141 | /* Append detailed run extra attributes: */ |
| 1142 | if (perf_evlist__add_attrs_array(evsel_list, detailed_attrs) < 0) | 1142 | if (perf_evlist__add_default_attrs(evsel_list, detailed_attrs) < 0) |
| 1143 | return -1; | 1143 | return -1; |
| 1144 | 1144 | ||
| 1145 | if (detailed_run < 2) | 1145 | if (detailed_run < 2) |
| 1146 | return 0; | 1146 | return 0; |
| 1147 | 1147 | ||
| 1148 | /* Append very detailed run extra attributes: */ | 1148 | /* Append very detailed run extra attributes: */ |
| 1149 | if (perf_evlist__add_attrs_array(evsel_list, very_detailed_attrs) < 0) | 1149 | if (perf_evlist__add_default_attrs(evsel_list, very_detailed_attrs) < 0) |
| 1150 | return -1; | 1150 | return -1; |
| 1151 | 1151 | ||
| 1152 | if (detailed_run < 3) | 1152 | if (detailed_run < 3) |
| 1153 | return 0; | 1153 | return 0; |
| 1154 | 1154 | ||
| 1155 | /* Append very, very detailed run extra attributes: */ | 1155 | /* Append very, very detailed run extra attributes: */ |
| 1156 | return perf_evlist__add_attrs_array(evsel_list, very_very_detailed_attrs); | 1156 | return perf_evlist__add_default_attrs(evsel_list, very_very_detailed_attrs); |
| 1157 | } | 1157 | } |
| 1158 | 1158 | ||
| 1159 | int cmd_stat(int argc, const char **argv, const char *prefix __used) | 1159 | int cmd_stat(int argc, const char **argv, const char *prefix __used) |
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 871b540293e1..6bb0277b7dfe 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
| @@ -787,7 +787,7 @@ static void perf_event__process_sample(struct perf_tool *tool, | |||
| 787 | } | 787 | } |
| 788 | 788 | ||
| 789 | if (symbol_conf.use_callchain) { | 789 | if (symbol_conf.use_callchain) { |
| 790 | err = callchain_append(he->callchain, &evsel->hists.callchain_cursor, | 790 | err = callchain_append(he->callchain, &callchain_cursor, |
| 791 | sample->period); | 791 | sample->period); |
| 792 | if (err) | 792 | if (err) |
| 793 | return; | 793 | return; |
diff --git a/tools/perf/design.txt b/tools/perf/design.txt index bd0bb1b1279b..67e5d0cace85 100644 --- a/tools/perf/design.txt +++ b/tools/perf/design.txt | |||
| @@ -409,14 +409,15 @@ Counters can be enabled and disabled in two ways: via ioctl and via | |||
| 409 | prctl. When a counter is disabled, it doesn't count or generate | 409 | prctl. When a counter is disabled, it doesn't count or generate |
| 410 | events but does continue to exist and maintain its count value. | 410 | events but does continue to exist and maintain its count value. |
| 411 | 411 | ||
| 412 | An individual counter or counter group can be enabled with | 412 | An individual counter can be enabled with |
| 413 | 413 | ||
| 414 | ioctl(fd, PERF_EVENT_IOC_ENABLE); | 414 | ioctl(fd, PERF_EVENT_IOC_ENABLE, 0); |
| 415 | 415 | ||
| 416 | or disabled with | 416 | or disabled with |
| 417 | 417 | ||
| 418 | ioctl(fd, PERF_EVENT_IOC_DISABLE); | 418 | ioctl(fd, PERF_EVENT_IOC_DISABLE, 0); |
| 419 | 419 | ||
| 420 | For a counter group, pass PERF_IOC_FLAG_GROUP as the third argument. | ||
| 420 | Enabling or disabling the leader of a group enables or disables the | 421 | Enabling or disabling the leader of a group enables or disables the |
| 421 | whole group; that is, while the group leader is disabled, none of the | 422 | whole group; that is, while the group leader is disabled, none of the |
| 422 | counters in the group will count. Enabling or disabling a member of a | 423 | counters in the group will |
