diff options
author | James Morris <jmorris@namei.org> | 2011-03-07 18:55:06 -0500 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2011-03-07 18:55:06 -0500 |
commit | 1cc26bada9f6807814806db2f0d78792eecdac71 (patch) | |
tree | 5509b5139db04af6c13db0a580c84116a4a54039 /tools/perf | |
parent | eae61f3c829439f8f9121b5cd48a14be04df451f (diff) | |
parent | 214d93b02c4fe93638ad268613c9702a81ed9192 (diff) |
Merge branch 'master'; commit 'v2.6.38-rc7' into next
Diffstat (limited to 'tools/perf')
32 files changed, 365 insertions, 194 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt index 52462ae26455..e032716c839b 100644 --- a/tools/perf/Documentation/perf-record.txt +++ b/tools/perf/Documentation/perf-record.txt | |||
@@ -61,6 +61,9 @@ OPTIONS | |||
61 | -r:: | 61 | -r:: |
62 | --realtime=:: | 62 | --realtime=:: |
63 | Collect data with this RT SCHED_FIFO priority. | 63 | Collect data with this RT SCHED_FIFO priority. |
64 | -D:: | ||
65 | --no-delay:: | ||
66 | Collect data without buffering. | ||
64 | -A:: | 67 | -A:: |
65 | --append:: | 68 | --append:: |
66 | Append to the output file to do incremental profiling. | 69 | Append to the output file to do incremental profiling. |
diff --git a/tools/perf/Makefile b/tools/perf/Makefile index 1b9b13ee2a72..7141c42e1469 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile | |||
@@ -204,13 +204,11 @@ EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wshadow | |||
204 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Winit-self | 204 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Winit-self |
205 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wpacked | 205 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wpacked |
206 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wredundant-decls | 206 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wredundant-decls |
207 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstack-protector | ||
208 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstrict-aliasing=3 | 207 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wstrict-aliasing=3 |
209 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wswitch-default | 208 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wswitch-default |
210 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wswitch-enum | 209 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wswitch-enum |
211 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wno-system-headers | 210 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wno-system-headers |
212 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wundef | 211 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wundef |
213 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wvolatile-register-var | ||
214 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wwrite-strings | 212 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wwrite-strings |
215 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wbad-function-cast | 213 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wbad-function-cast |
216 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wmissing-declarations | 214 | EXTRA_WARNINGS := $(EXTRA_WARNINGS) -Wmissing-declarations |
@@ -227,7 +225,7 @@ ifndef PERF_DEBUG | |||
227 | CFLAGS_OPTIMIZE = -O6 | 225 | CFLAGS_OPTIMIZE = -O6 |
228 | endif | 226 | endif |
229 | 227 | ||
230 | CFLAGS = -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) | 228 | CFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 -Werror $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) |
231 | EXTLIBS = -lpthread -lrt -lelf -lm | 229 | EXTLIBS = -lpthread -lrt -lelf -lm |
232 | ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 | 230 | ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 |
233 | ALL_LDFLAGS = $(LDFLAGS) | 231 | ALL_LDFLAGS = $(LDFLAGS) |
@@ -294,6 +292,13 @@ ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -fstack-protector-all),y) | |||
294 | CFLAGS := $(CFLAGS) -fstack-protector-all | 292 | CFLAGS := $(CFLAGS) -fstack-protector-all |
295 | endif | 293 | endif |
296 | 294 | ||
295 | ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -Wstack-protector),y) | ||
296 | CFLAGS := $(CFLAGS) -Wstack-protector | ||
297 | endif | ||
298 | |||
299 | ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -Wvolatile-register-var),y) | ||
300 | CFLAGS := $(CFLAGS) -Wvolatile-register-var | ||
301 | endif | ||
297 | 302 | ||
298 | ### --- END CONFIGURATION SECTION --- | 303 | ### --- END CONFIGURATION SECTION --- |
299 | 304 | ||
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index c056cdc06912..8879463807e4 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c | |||
@@ -212,7 +212,7 @@ get_source_line(struct hist_entry *he, int len, const char *filename) | |||
212 | continue; | 212 | continue; |
213 | 213 | ||
214 | offset = start + i; | 214 | offset = start + i; |
215 | sprintf(cmd, "addr2line -e %s %016llx", filename, offset); | 215 | sprintf(cmd, "addr2line -e %s %016" PRIx64, filename, offset); |
216 | fp = popen(cmd, "r"); | 216 | fp = popen(cmd, "r"); |
217 | if (!fp) | 217 | if (!fp) |
218 | continue; | 218 | continue; |
@@ -270,9 +270,9 @@ static void hist_entry__print_hits(struct hist_entry *self) | |||
270 | 270 | ||
271 | for (offset = 0; offset < len; ++offset) | 271 | for (offset = 0; offset < len; ++offset) |
272 | if (h->ip[offset] != 0) | 272 | if (h->ip[offset] != 0) |
273 | printf("%*Lx: %Lu\n", BITS_PER_LONG / 2, | 273 | printf("%*" PRIx64 ": %" PRIu64 "\n", BITS_PER_LONG / 2, |
274 | sym->start + offset, h->ip[offset]); | 274 | sym->start + offset, h->ip[offset]); |
275 | printf("%*s: %Lu\n", BITS_PER_LONG / 2, "h->sum", h->sum); | 275 | printf("%*s: %" PRIu64 "\n", BITS_PER_LONG / 2, "h->sum", h->sum); |
276 | } | 276 | } |
277 | 277 | ||
278 | static int hist_entry__tty_annotate(struct hist_entry *he) | 278 | static int hist_entry__tty_annotate(struct hist_entry *he) |
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c index def7ddc2fd4f..d97256d65980 100644 --- a/tools/perf/builtin-kmem.c +++ b/tools/perf/builtin-kmem.c | |||
@@ -371,10 +371,10 @@ static void __print_result(struct rb_root *root, struct perf_session *session, | |||
371 | addr = data->ptr; | 371 | addr = data->ptr; |
372 | 372 | ||
373 | if (sym != NULL) | 373 | if (sym != NULL) |
374 | snprintf(buf, sizeof(buf), "%s+%Lx", sym->name, | 374 | snprintf(buf, sizeof(buf), "%s+%" PRIx64 "", sym->name, |
375 | addr - map->unmap_ip(map, sym->start)); | 375 | addr - map->unmap_ip(map, sym->start)); |
376 | else | 376 | else |
377 | snprintf(buf, sizeof(buf), "%#Lx", addr); | 377 | snprintf(buf, sizeof(buf), "%#" PRIx64 "", addr); |
378 | printf(" %-34s |", buf); | 378 | printf(" %-34s |", buf); |
379 | 379 | ||
380 | printf(" %9llu/%-5lu | %9llu/%-5lu | %8lu | %8lu | %6.3f%%\n", | 380 | printf(" %9llu/%-5lu | %9llu/%-5lu | %8lu | %8lu | %6.3f%%\n", |
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index b9c6e5432971..2b36defc5d73 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c | |||
@@ -782,9 +782,9 @@ static void print_result(void) | |||
782 | pr_info("%10u ", st->nr_acquired); | 782 | pr_info("%10u ", st->nr_acquired); |
783 | pr_info("%10u ", st->nr_contended); | 783 | pr_info("%10u ", st->nr_contended); |
784 | 784 | ||
785 | pr_info("%15llu ", st->wait_time_total); | 785 | pr_info("%15" PRIu64 " ", st->wait_time_total); |
786 | pr_info("%15llu ", st->wait_time_max); | 786 | pr_info("%15" PRIu64 " ", st->wait_time_max); |
787 | pr_info("%15llu ", st->wait_time_min == ULLONG_MAX ? | 787 | pr_info("%15" PRIu64 " ", st->wait_time_min == ULLONG_MAX ? |
788 | 0 : st->wait_time_min); | 788 | 0 : st->wait_time_min); |
789 | pr_info("\n"); | 789 | pr_info("\n"); |
790 | } | 790 | } |
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 7bc049035484..60cac6f92e8b 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -49,6 +49,7 @@ static int pipe_output = 0; | |||
49 | static const char *output_name = "perf.data"; | 49 | static const char *output_name = "perf.data"; |
50 | static int group = 0; | 50 | static int group = 0; |
51 | static int realtime_prio = 0; | 51 | static int realtime_prio = 0; |
52 | static bool nodelay = false; | ||
52 | static bool raw_samples = false; | 53 | static bool raw_samples = false; |
53 | static bool sample_id_all_avail = true; | 54 | static bool sample_id_all_avail = true; |
54 | static bool system_wide = false; | 55 | static bool system_wide = false; |
@@ -307,6 +308,11 @@ static void create_counter(struct perf_evsel *evsel, int cpu) | |||
307 | attr->sample_type |= PERF_SAMPLE_CPU; | 308 | attr->sample_type |= PERF_SAMPLE_CPU; |
308 | } | 309 | } |
309 | 310 | ||
311 | if (nodelay) { | ||
312 | attr->watermark = 0; | ||
313 | attr->wakeup_events = 1; | ||
314 | } | ||
315 | |||
310 | attr->mmap = track; | 316 | attr->mmap = track; |
311 | attr->comm = track; | 317 | attr->comm = track; |
312 | attr->inherit = !no_inherit; | 318 | attr->inherit = !no_inherit; |
@@ -477,6 +483,7 @@ static void atexit_header(void) | |||
477 | process_buildids(); | 483 | process_buildids(); |
478 | perf_header__write(&session->header, output, true); | 484 | perf_header__write(&session->header, output, true); |
479 | perf_session__delete(session); | 485 | perf_session__delete(session); |
486 | perf_evsel_list__delete(); | ||
480 | symbol__exit(); | 487 | symbol__exit(); |
481 | } | 488 | } |
482 | } | 489 | } |
@@ -752,8 +759,8 @@ static int __cmd_record(int argc, const char **argv) | |||
752 | perf_session__process_machines(session, event__synthesize_guest_os); | 759 | perf_session__process_machines(session, event__synthesize_guest_os); |
753 | 760 | ||
754 | if (!system_wide) | 761 | if (!system_wide) |
755 | event__synthesize_thread(target_tid, process_synthesized_event, | 762 | event__synthesize_thread_map(threads, process_synthesized_event, |
756 | session); | 763 | session); |
757 | else | 764 | else |
758 | event__synthesize_threads(process_synthesized_event, session); | 765 | event__synthesize_threads(process_synthesized_event, session); |
759 | 766 | ||
@@ -810,7 +817,7 @@ static int __cmd_record(int argc, const char **argv) | |||
810 | * Approximate RIP event size: 24 bytes. | 817 | * Approximate RIP event size: 24 bytes. |
811 | */ | 818 | */ |
812 | fprintf(stderr, | 819 | fprintf(stderr, |
813 | "[ perf record: Captured and wrote %.3f MB %s (~%lld samples) ]\n", | 820 | "[ perf record: Captured and wrote %.3f MB %s (~%" PRIu64 " samples) ]\n", |
814 | (double)bytes_written / 1024.0 / 1024.0, | 821 | (double)bytes_written / 1024.0 / 1024.0, |
815 | output_name, | 822 | output_name, |
816 | bytes_written / 24); | 823 | bytes_written / 24); |
@@ -842,6 +849,8 @@ const struct option record_options[] = { | |||
842 | "record events on existing thread id"), | 849 | "record events on existing thread id"), |
843 | OPT_INTEGER('r', "realtime", &realtime_prio, | 850 | OPT_INTEGER('r', "realtime", &realtime_prio, |
844 | "collect data with this RT SCHED_FIFO priority"), | 851 | "collect data with this RT SCHED_FIFO priority"), |
852 | OPT_BOOLEAN('D', "no-delay", &nodelay, | ||
853 | "collect data without buffering"), | ||
845 | OPT_BOOLEAN('R', "raw-samples", &raw_samples, | 854 | OPT_BOOLEAN('R', "raw-samples", &raw_samples, |
846 | "collect raw sample records from all opened counters"), | 855 | "collect raw sample records from all opened counters"), |
847 | OPT_BOOLEAN('a', "all-cpus", &system_wide, | 856 | OPT_BOOLEAN('a', "all-cpus", &system_wide, |
@@ -927,6 +936,8 @@ int cmd_record(int argc, const char **argv, const char *prefix __used) | |||
927 | list_for_each_entry(pos, &evsel_list, node) { | 936 | list_for_each_entry(pos, &evsel_list, node) { |
928 | if (perf_evsel__alloc_fd(pos, cpus->nr, threads->nr) < 0) | 937 | if (perf_evsel__alloc_fd(pos, cpus->nr, threads->nr) < 0) |
929 | goto out_free_fd; | 938 | goto out_free_fd; |
939 | if (perf_header__push_event(pos->attr.config, event_name(pos))) | ||
940 | goto out_free_fd; | ||
930 | } | 941 | } |
931 | event_array = malloc((sizeof(struct pollfd) * MAX_NR_CPUS * | 942 | event_array = malloc((sizeof(struct pollfd) * MAX_NR_CPUS * |
932 | MAX_COUNTERS * threads->nr)); | 943 | MAX_COUNTERS * threads->nr)); |
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 75183a4518e6..c27e31f289e6 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
@@ -197,7 +197,7 @@ static int process_read_event(event_t *event, struct sample_data *sample __used, | |||
197 | event->read.value); | 197 | event->read.value); |
198 | } | 198 | } |
199 | 199 | ||
200 | dump_printf(": %d %d %s %Lu\n", event->read.pid, event->read.tid, | 200 | dump_printf(": %d %d %s %" PRIu64 "\n", event->read.pid, event->read.tid, |
201 | attr ? __event_name(attr->type, attr->config) : "FAIL", | 201 | attr ? __event_name(attr->type, attr->config) : "FAIL", |
202 | event->read.value); | 202 | event->read.value); |
203 | 203 | ||
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index 7a4ebeb8b016..29acb894e035 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
@@ -193,7 +193,7 @@ static void calibrate_run_measurement_overhead(void) | |||
193 | } | 193 | } |
194 | run_measurement_overhead = min_delta; | 194 | run_measurement_overhead = min_delta; |
195 | 195 | ||
196 | printf("run measurement overhead: %Ld nsecs\n", min_delta); | 196 | printf("run measurement overhead: %" PRIu64 " nsecs\n", min_delta); |
197 | } | 197 | } |
198 | 198 | ||
199 | static void calibrate_sleep_measurement_overhead(void) | 199 | static void calibrate_sleep_measurement_overhead(void) |
@@ -211,7 +211,7 @@ static void calibrate_sleep_measurement_overhead(void) | |||
211 | min_delta -= 10000; | 211 | min_delta -= 10000; |
212 | sleep_measurement_overhead = min_delta; | 212 | sleep_measurement_overhead = min_delta; |
213 | 213 | ||
214 | printf("sleep measurement overhead: %Ld nsecs\n", min_delta); | 214 | printf("sleep measurement overhead: %" PRIu64 " nsecs\n", min_delta); |
215 | } | 215 | } |
216 | 216 | ||
217 | static struct sched_atom * | 217 | static struct sched_atom * |
@@ -489,7 +489,8 @@ static void create_tasks(void) | |||
489 | 489 | ||
490 | err = pthread_attr_init(&attr); | 490 | err = pthread_attr_init(&attr); |
491 | BUG_ON(err); | 491 | BUG_ON(err); |
492 | err = pthread_attr_setstacksize(&attr, (size_t)(16*1024)); | 492 | err = pthread_attr_setstacksize(&attr, |
493 | (size_t) max(16 * 1024, PTHREAD_STACK_MIN)); | ||
493 | BUG_ON(err); | 494 | BUG_ON(err); |
494 | err = pthread_mutex_lock(&start_work_mutex); | 495 | err = pthread_mutex_lock(&start_work_mutex); |
495 | BUG_ON(err); | 496 | BUG_ON(err); |
@@ -616,13 +617,13 @@ static void test_calibrations(void) | |||
616 | burn_nsecs(1e6); | 617 | burn_nsecs(1e6); |
617 | T1 = get_nsecs(); | 618 | T1 = get_nsecs(); |
618 | 619 | ||
619 | printf("the run test took %Ld nsecs\n", T1-T0); | 620 | printf("the run test took %" PRIu64 " nsecs\n", T1 - T0); |
620 | 621 | ||
621 | T0 = get_nsecs(); | 622 | T0 = get_nsecs(); |
622 | sleep_nsecs(1e6); | 623 | sleep_nsecs(1e6); |
623 | T1 = get_nsecs(); | 624 | T1 = get_nsecs(); |
624 | 625 | ||
625 | printf("the sleep test took %Ld nsecs\n", T1-T0); | 626 | printf("the sleep test took %" PRIu64 " nsecs\n", T1 - T0); |
626 | } | 627 | } |
627 | 628 | ||
628 | #define FILL_FIELD(ptr, field, event, data) \ | 629 | #define FILL_FIELD(ptr, field, event, data) \ |
@@ -815,10 +816,10 @@ replay_switch_event(struct trace_switch_event *switch_event, | |||
815 | delta = 0; | 816 | delta = 0; |
816 | 817 | ||
817 | if (delta < 0) | 818 | if (delta < 0) |
818 | die("hm, delta: %Ld < 0 ?\n", delta); | 819 | die("hm, delta: %" PRIu64 " < 0 ?\n", delta); |
819 | 820 | ||
820 | if (verbose) { | 821 | if (verbose) { |
821 | printf(" ... switch from %s/%d to %s/%d [ran %Ld nsecs]\n", | 822 | printf(" ... switch from %s/%d to %s/%d [ran %" PRIu64 " nsecs]\n", |
822 | switch_event->prev_comm, switch_event->prev_pid, | 823 | switch_event->prev_comm, switch_event->prev_pid, |
823 | switch_event->next_comm, switch_event->next_pid, | 824 | switch_event->next_comm, switch_event->next_pid, |
824 | delta); | 825 | delta); |
@@ -1047,7 +1048,7 @@ latency_switch_event(struct trace_switch_event *switch_event, | |||
1047 | delta = 0; | 1048 | delta = 0; |
1048 | 1049 | ||
1049 | if (delta < 0) | 1050 | if (delta < 0) |
1050 | die("hm, delta: %Ld < 0 ?\n", delta); | 1051 | die("hm, delta: %" PRIu64 " < 0 ?\n", delta); |
1051 | 1052 | ||
1052 | 1053 | ||
1053 | sched_out = perf_session__findnew(session, switch_event->prev_pid); | 1054 | sched_out = perf_session__findnew(session, switch_event->prev_pid); |
@@ -1220,7 +1221,7 @@ static void output_lat_thread(struct work_atoms *work_list) | |||
1220 | 1221 | ||
1221 | avg = work_list->total_lat / work_list->nb_atoms; | 1222 | avg = work_list->total_lat / work_list->nb_atoms; |
1222 | 1223 | ||
1223 | printf("|%11.3f ms |%9llu | avg:%9.3f ms | max:%9.3f ms | max at: %9.6f s\n", | 1224 | printf("|%11.3f ms |%9" PRIu64 " | avg:%9.3f ms | max:%9.3f ms | max at: %9.6f s\n", |
1224 | (double)work_list->total_runtime / 1e6, | 1225 | (double)work_list->total_runtime / 1e6, |
1225 | work_list->nb_atoms, (double)avg / 1e6, | 1226 | work_list->nb_atoms, (double)avg / 1e6, |
1226 | (double)work_list->max_lat / 1e6, | 1227 | (double)work_list->max_lat / 1e6, |
@@ -1422,7 +1423,7 @@ map_switch_event(struct trace_switch_event *switch_event, | |||
1422 | delta = 0; | 1423 | delta = 0; |
1423 | 1424 | ||
1424 | if (delta < 0) | 1425 | if (delta < 0) |
1425 | die("hm, delta: %Ld < 0 ?\n", delta); | 1426 | die("hm, delta: %" PRIu64 " < 0 ?\n", delta); |
1426 | 1427 | ||
1427 | 1428 | ||
1428 | sched_out = perf_session__findnew(session, switch_event->prev_pid); | 1429 | sched_out = perf_session__findnew(session, switch_event->prev_pid); |
@@ -1712,7 +1713,7 @@ static void __cmd_lat(void) | |||
1712 | } | 1713 | } |
1713 | 1714 | ||
1714 | printf(" -----------------------------------------------------------------------------------------\n"); | 1715 | printf(" -----------------------------------------------------------------------------------------\n"); |
1715 | printf(" TOTAL: |%11.3f ms |%9Ld |\n", | 1716 | printf(" TOTAL: |%11.3f ms |%9" PRIu64 " |\n", |
1716 | (double)all_runtime/1e6, all_count); | 1717 | (double)all_runtime/1e6, all_count); |
1717 | 1718 | ||
1718 | printf(" ---------------------------------------------------\n"); | 1719 | printf(" ---------------------------------------------------\n"); |
@@ -1842,15 +1843,15 @@ static const char *record_args[] = { | |||
1842 | "-f", | 1843 | "-f", |
1843 | "-m", "1024", | 1844 | "-m", "1024", |
1844 | "-c", "1", | 1845 | "-c", "1", |
1845 | "-e", "sched:sched_switch:r", | 1846 | "-e", "sched:sched_switch", |
1846 | "-e", "sched:sched_stat_wait:r", | 1847 | "-e", "sched:sched_stat_wait", |
1847 | "-e", "sched:sched_stat_sleep:r", | 1848 | "-e", "sched:sched_stat_sleep", |
1848 | "-e", "sched:sched_stat_iowait:r", | 1849 | "-e", "sched:sched_stat_iowait", |
1849 | "-e", "sched:sched_stat_runtime:r", | 1850 | "-e", "sched:sched_stat_runtime", |
1850 | "-e", "sched:sched_process_exit:r", | 1851 | "-e", "sched:sched_process_exit", |
1851 | "-e", "sched:sched_process_fork:r", | 1852 | "-e", "sched:sched_process_fork", |
1852 | "-e", "sched:sched_wakeup:r", | 1853 | "-e", "sched:sched_wakeup", |
1853 | "-e", "sched:sched_migrate_task:r", | 1854 | "-e", "sched:sched_migrate_task", |
1854 | }; | 1855 | }; |
1855 | 1856 | ||
1856 | static int __cmd_record(int argc, const char **argv) | 1857 | static int __cmd_record(int argc, const char **argv) |
@@ -1861,7 +1862,7 @@ static int __cmd_record(int argc, const char **argv) | |||
1861 | rec_argc = ARRAY_SIZE(record_args) + argc - 1; | 1862 | rec_argc = ARRAY_SIZE(record_args) + argc - 1; |
1862 | rec_argv = calloc(rec_argc + 1, sizeof(char *)); | 1863 | rec_argv = calloc(rec_argc + 1, sizeof(char *)); |
1863 | 1864 | ||
1864 | if (rec_argv) | 1865 | if (rec_argv == NULL) |
1865 | return -ENOMEM; | 1866 | return -ENOMEM; |
1866 | 1867 | ||
1867 | for (i = 0; i < ARRAY_SIZE(record_args); i++) | 1868 | for (i = 0; i < ARRAY_SIZE(record_args); i++) |
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 150a606002eb..b766c2a9ac97 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -77,8 +77,8 @@ static int process_sample_event(event_t *event, struct sample_data *sample, | |||
77 | if (session->sample_type & PERF_SAMPLE_RAW) { | 77 | if (session->sample_type & PERF_SAMPLE_RAW) { |
78 | if (debug_mode) { | 78 | if (debug_mode) { |
79 | if (sample->time < last_timestamp) { | 79 | if (sample->time < last_timestamp) { |
80 | pr_err("Samples misordered, previous: %llu " | 80 | pr_err("Samples misordered, previous: %" PRIu64 |
81 | "this: %llu\n", last_timestamp, | 81 | " this: %" PRIu64 "\n", last_timestamp, |
82 | sample->time); | 82 | sample->time); |
83 | nr_unordered++; | 83 | nr_unordered++; |
84 | } | 84 | } |
@@ -126,7 +126,7 @@ static int __cmd_script(struct perf_session *session) | |||
126 | ret = perf_session__process_events(session, &event_ops); | 126 | ret = perf_session__process_events(session, &event_ops); |
127 | 127 | ||
128 | if (debug_mode) | 128 | if (debug_mode) |
129 | pr_err("Misordered timestamps: %llu\n", nr_unordered); | 129 | pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered); |
130 | 130 | ||
131 | return ret; | 131 | return ret; |
132 | } | 132 | } |
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 02b2d8013a61..a482a191a0ca 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
@@ -206,8 +206,8 @@ static int read_counter_aggr(struct perf_evsel *counter) | |||
206 | update_stats(&ps->res_stats[i], count[i]); | 206 | update_stats(&ps->res_stats[i], count[i]); |
207 | 207 | ||
208 | if (verbose) { | 208 | if (verbose) { |
209 | fprintf(stderr, "%s: %Ld %Ld %Ld\n", event_name(counter), | 209 | fprintf(stderr, "%s: %" PRIu64 " %" PRIu64 " %" PRIu64 "\n", |
210 | count[0], count[1], count[2]); | 210 | event_name(counter), count[0], count[1], count[2]); |
211 | } | 211 | } |
212 | 212 | ||
213 | /* | 213 | /* |
@@ -316,6 +316,8 @@ static int run_perf_stat(int argc __used, const char **argv) | |||
316 | "\t Consider tweaking" | 316 | "\t Consider tweaking" |
317 | " /proc/sys/kernel/perf_event_paranoid or running as root.", | 317 | " /proc/sys/kernel/perf_event_paranoid or running as root.", |
318 | system_wide ? "system-wide " : ""); | 318 | system_wide ? "system-wide " : ""); |
319 | } else if (errno == ENOENT) { | ||
320 | error("%s event is not supported. ", event_name(counter)); | ||
319 | } else { | 321 | } else { |
320 | error("open_counter returned with %d (%s). " | 322 | error("open_counter returned with %d (%s). " |
321 | "/bin/dmesg may provide additional information.\n", | 323 | "/bin/dmesg may provide additional information.\n", |
@@ -683,8 +685,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) | |||
683 | nr_counters = ARRAY_SIZE(default_attrs); | 685 | nr_counters = ARRAY_SIZE(default_attrs); |
684 | 686 | ||
685 | for (c = 0; c < ARRAY_SIZE(default_attrs); ++c) { | 687 | for (c = 0; c < ARRAY_SIZE(default_attrs); ++c) { |
686 | pos = perf_evsel__new(default_attrs[c].type, | 688 | pos = perf_evsel__new(&default_attrs[c], |
687 | default_attrs[c].config, | ||
688 | nr_counters); | 689 | nr_counters); |
689 | if (pos == NULL) | 690 | if (pos == NULL) |
690 | goto out; | 691 | goto out; |
@@ -742,6 +743,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) | |||
742 | out_free_fd: | 743 | out_free_fd: |
743 | list_for_each_entry(pos, &evsel_list, node) | 744 | list_for_each_entry(pos, &evsel_list, node) |
744 | perf_evsel__free_stat_priv(pos); | 745 | perf_evsel__free_stat_priv(pos); |
746 | perf_evsel_list__delete(); | ||
745 | out: | 747 | out: |
746 | thread_map__delete(threads); | 748 | thread_map__delete(threads); |
747 | threads = NULL; | 749 | threads = NULL; |
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c index 1c984342a579..5dcdba653d70 100644 --- a/tools/perf/builtin-test.c +++ b/tools/perf/builtin-test.c | |||
@@ -146,7 +146,7 @@ next_pair: | |||
146 | if (llabs(skew) < page_size) | 146 | if (llabs(skew) < page_size) |
147 | continue; | 147 | continue; |
148 | 148 | ||
149 | pr_debug("%#Lx: diff end addr for %s v: %#Lx k: %#Lx\n", | 149 | pr_debug("%#" PRIx64 ": diff end addr for %s v: %#" PRIx64 " k: %#" PRIx64 "\n", |
150 | sym->start, sym->name, sym->end, pair->end); | 150 | sym->start, sym->name, sym->end, pair->end); |
151 | } else { | 151 | } else { |
152 | struct rb_node *nnd; | 152 | struct rb_node *nnd; |
@@ -168,11 +168,11 @@ detour: | |||
168 | goto detour; | 168 | goto detour; |
169 | } | 169 | } |
170 | 170 | ||
171 | pr_debug("%#Lx: diff name v: %s k: %s\n", | 171 | pr_debug("%#" PRIx64 ": diff name v: %s k: %s\n", |
172 | sym->start, sym->name, pair->name); | 172 | sym->start, sym->name, pair->name); |
173 | } | 173 | } |
174 | } else | 174 | } else |
175 | pr_debug("%#Lx: %s not on kallsyms\n", sym->start, sym->name); | 175 | pr_debug("%#" PRIx64 ": %s not on kallsyms\n", sym->start, sym->name); |
176 | 176 | ||
177 | err = -1; | 177 | err = -1; |
178 | } | 178 | } |
@@ -211,10 +211,10 @@ detour: | |||
211 | 211 | ||
212 | if (pair->start == pos->start) { | 212 | if (pair->start == pos->start) { |
213 | pair->priv = 1; | 213 | pair->priv = 1; |
214 | pr_info(" %Lx-%Lx %Lx %s in kallsyms as", | 214 | pr_info(" %" PRIx64 "-%" PRIx64 " %" PRIx64 " %s in kallsyms as", |
215 | pos->start, pos->end, pos->pgoff, pos->dso->name); | 215 | pos->start, pos->end, pos->pgoff, pos->dso->name); |
216 | if (pos->pgoff != pair->pgoff || pos->end != pair->end) | 216 | if (pos->pgoff != pair->pgoff || pos->end != pair->end) |
217 | pr_info(": \n*%Lx-%Lx %Lx", | 217 | pr_info(": \n*%" PRIx64 "-%" PRIx64 " %" PRIx64 "", |
218 | pair->start, pair->end, pair->pgoff); | 218 | pair->start, pair->end, pair->pgoff); |
219 | pr_info(" %s\n", pair->dso->name); | 219 | pr_info(" %s\n", pair->dso->name); |
220 | pair->priv = 1; | 220 | pair->priv = 1; |
@@ -234,6 +234,7 @@ out: | |||
234 | return err; | 234 | return err; |
235 | } | 235 | } |
236 | 236 | ||
237 | #include "util/cpumap.h" | ||
237 | #include "util/evsel.h" | 238 | #include "util/evsel.h" |
238 | #include <sys/types.h> | 239 | #include <sys/types.h> |
239 | 240 | ||
@@ -264,6 +265,7 @@ static int test__open_syscall_event(void) | |||
264 | int err = -1, fd; | 265 | int err = -1, fd; |
265 | struct thread_map *threads; | 266 | struct thread_map *threads; |
266 | struct perf_evsel *evsel; | 267 | struct perf_evsel *evsel; |
268 | struct perf_event_attr attr; | ||
267 | unsigned int nr_open_calls = 111, i; | 269 | unsigned int nr_open_calls = 111, i; |
268 | int id = trace_event__id("sys_enter_open"); | 270 | int id = trace_event__id("sys_enter_open"); |
269 | 271 | ||
@@ -278,7 +280,10 @@ static int test__open_syscall_event(void) | |||
278 | return -1; | 280 | return -1; |
279 | } | 281 | } |
280 | 282 | ||
281 | evsel = perf_evsel__new(PERF_TYPE_TRACEPOINT, id, 0); | 283 | memset(&attr, 0, sizeof(attr)); |
284 | attr.type = PERF_TYPE_TRACEPOINT; | ||
285 | attr.config = id; | ||
286 | evsel = perf_evsel__new(&attr, 0); | ||
282 | if (evsel == NULL) { | 287 | if (evsel == NULL) { |
283 | pr_debug("perf_evsel__new\n"); | 288 | pr_debug("perf_evsel__new\n"); |
284 | goto out_thread_map_delete; | 289 | goto out_thread_map_delete; |
@@ -302,7 +307,7 @@ static int test__open_syscall_event(void) | |||
302 | } | 307 | } |
303 | 308 | ||
304 | if (evsel->counts->cpu[0].val != nr_open_calls) { | 309 | if (evsel->counts->cpu[0].val != nr_open_calls) { |
305 | pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %Ld\n", | 310 | pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %" PRIu64 "\n", |
306 | nr_open_calls, evsel->counts->cpu[0].val); | 311 | nr_open_calls, evsel->counts->cpu[0].val); |
307 | goto out_close_fd; | 312 | goto out_close_fd; |
308 | } | 313 | } |
@@ -317,6 +322,121 @@ out_thread_map_delete: | |||
317 | return err; | 322 | return err; |
318 | } | 323 | } |
319 | 324 | ||
325 | #include <sched.h> | ||
326 | |||
327 | static int test__open_syscall_event_on_all_cpus(void) | ||
328 | { | ||
329 | int err = -1, fd, cpu; | ||
330 | struct thread_map *threads; | ||
331 | struct cpu_map *cpus; | ||
332 | struct perf_evsel *evsel; | ||
333 | struct perf_event_attr attr; | ||
334 | unsigned int nr_open_calls = 111, i; | ||
335 | cpu_set_t cpu_set; | ||
336 | int id = trace_event__id("sys_enter_open"); | ||
337 | |||
338 | if (id < 0) { | ||
339 | pr_debug("is debugfs mounted on /sys/kernel/debug?\n"); | ||
340 | return -1; | ||
341 | } | ||
342 | |||
343 | threads = thread_map__new(-1, getpid()); | ||
344 | if (threads == NULL) { | ||
345 | pr_debug("thread_map__new\n"); | ||
346 | return -1; | ||
347 | } | ||
348 | |||
349 | cpus = cpu_map__new(NULL); | ||
350 | if (threads == NULL) { | ||
351 | pr_debug("thread_map__new\n"); | ||
352 | return -1; | ||
353 | } | ||
354 | |||
355 | |||
356 | CPU_ZERO(&cpu_set); | ||
357 | |||
358 | memset(&attr, 0, sizeof(attr)); | ||
359 | attr.type = PERF_TYPE_TRACEPOINT; | ||
360 | attr.config = id; | ||
361 | evsel = perf_evsel__new(&attr, 0); | ||
362 | if (evsel == NULL) { | ||
363 | pr_debug("perf_evsel__new\n"); | ||
364 | goto out_thread_map_delete; | ||
365 | } | ||
366 | |||
367 | if (perf_evsel__open(evsel, cpus, threads) < 0) { | ||
368 | pr_debug("failed to open counter: %s, " | ||
369 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", | ||
370 | strerror(errno)); | ||
371 | goto out_evsel_delete; | ||
372 | } | ||
373 | |||
374 | for (cpu = 0; cpu < cpus->nr; ++cpu) { | ||
375 | unsigned int ncalls = nr_open_calls + cpu; | ||
376 | /* | ||
377 | * XXX eventually lift this restriction in a way that | ||
378 | * keeps perf building on older glibc installations | ||
379 | * without CPU_ALLOC. 1024 cpus in 2010 still seems | ||
380 | * a reasonable upper limit tho :-) | ||
381 | */ | ||
382 | if (cpus->map[cpu] >= CPU_SETSIZE) { | ||
383 | pr_debug("Ignoring CPU %d\n", cpus->map[cpu]); | ||
384 | continue; | ||
385 | } | ||
386 | |||
387 | CPU_SET(cpus->map[cpu], &cpu_set); | ||
388 | if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) { | ||
389 | pr_debug("sched_setaffinity() failed on CPU %d: %s ", | ||
390 | cpus->map[cpu], | ||
391 | strerror(errno)); | ||
392 | goto out_close_fd; | ||
393 | } | ||
394 | for (i = 0; i < ncalls; ++i) { | ||
395 | fd = open("/etc/passwd", O_RDONLY); | ||
396 | close(fd); | ||
397 | } | ||
398 | CPU_CLR(cpus->map[cpu], &cpu_set); | ||
399 | } | ||
400 | |||
401 | /* | ||
402 | * Here we need to explicitely preallocate the counts, as if | ||
403 | * we use the auto allocation it will allocate just for 1 cpu, | ||
404 | * as we start by cpu 0. | ||
405 | */ | ||
406 | if (perf_evsel__alloc_counts(evsel, cpus->nr) < 0) { | ||
407 | pr_debug("perf_evsel__alloc_counts(ncpus=%d)\n", cpus->nr); | ||
408 | goto out_close_fd; | ||
409 | } | ||
410 | |||
411 | for (cpu = 0; cpu < cpus->nr; ++cpu) { | ||
412 | unsigned int expected; | ||
413 | |||
414 | if (cpus->map[cpu] >= CPU_SETSIZE) | ||
415 | continue; | ||
416 | |||
417 | if (perf_evsel__read_on_cpu(evsel, cpu, 0) < 0) { | ||
418 | pr_debug("perf_evsel__open_read_on_cpu\n"); | ||
419 | goto out_close_fd; | ||
420 | } | ||
421 | |||
422 | expected = nr_open_calls + cpu; | ||
423 | if (evsel->counts->cpu[cpu].val != expected) { | ||
424 | pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls on cpu %d, got %" PRIu64 "\n", | ||
425 | expected, cpus->map[cpu], evsel->counts->cpu[cpu].val); | ||
426 | goto out_close_fd; | ||
427 | } | ||
428 | } | ||
429 | |||
430 | err = 0; | ||
431 | out_close_fd: | ||
432 | perf_evsel__close_fd(evsel, 1, threads->nr); | ||
433 | out_evsel_delete: | ||
434 | perf_evsel__delete(evsel); | ||
435 | out_thread_map_delete: | ||
436 | thread_map__delete(threads); | ||
437 | return err; | ||
438 | } | ||
439 | |||
320 | static struct test { | 440 | static struct test { |
321 | const char *desc; | 441 | const char *desc; |
322 | int (*func)(void); | 442 | int (*func)(void); |
@@ -330,6 +450,10 @@ static struct test { | |||
330 | .func = test__open_syscall_event, | 450 | .func = test__open_syscall_event, |
331 | }, | 451 | }, |
332 | { | 452 | { |
453 | .desc = "detect open syscall event on all cpus", | ||
454 | .func = test__open_syscall_event_on_all_cpus, | ||
455 | }, | ||
456 | { | ||
333 | .func = NULL, | 457 | .func = NULL, |
334 | }, | 458 | }, |
335 | }; | 459 | }; |
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 746cf03cb05d..0ace786e83e0 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
@@ -264,9 +264,6 @@ pid_put_sample(int pid, int type, unsigned int cpu, u64 start, u64 end) | |||
264 | c->start_time = start; | 264 | c->start_time = start; |
265 | if (p->start_time == 0 || p->start_time > start) | 265 | if (p->start_time == 0 || p->start_time > start) |
266 | p->start_time = start; | 266 | p->start_time = start; |
267 | |||
268 | if (cpu > numcpus) | ||
269 | numcpus = cpu; | ||
270 | } | 267 | } |
271 | 268 | ||
272 | #define MAX_CPUS 4096 | 269 | #define MAX_CPUS 4096 |
@@ -511,6 +508,9 @@ static int process_sample_event(event_t *event __used, | |||
511 | if (!event_str) | 508 | if (!event_str) |
512 | return 0; | 509 | return 0; |
513 | 510 | ||
511 | if (sample->cpu > numcpus) | ||
512 | numcpus = sample->cpu; | ||
513 | |||
514 | if (strcmp(event_str, "power:cpu_idle") == 0) { | 514 | if (strcmp(event_str, "power:cpu_idle") == 0) { |
515 | struct power_processor_entry *ppe = (void *)te; | 515 | struct power_processor_entry *ppe = (void *)te; |
516 | if (ppe->state == (u32)PWR_EVENT_EXIT) | 516 | if (ppe->state == (u32)PWR_EVENT_EXIT) |
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 1e67ab9c7ebc..5a29d9cd9486 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <stdio.h> | 40 | #include <stdio.h> |
41 | #include <termios.h> | 41 | #include <termios.h> |
42 | #include <unistd.h> | 42 | #include <unistd.h> |
43 | #include <inttypes.h> | ||
43 | 44 | ||
44 | #include <errno.h> | 45 | #include <errno.h> |
45 | #include <time.h> | 46 | #include <time.h> |
@@ -214,7 +215,7 @@ static int parse_source(struct sym_entry *syme) | |||
214 | len = sym->end - sym->start; | 215 | len = sym->end - sym->start; |
215 | 216 | ||
216 | sprintf(command, | 217 | sprintf(command, |
217 | "objdump --start-address=%#0*Lx --stop-address=%#0*Lx -dS %s", | 218 | "objdump --start-address=%#0*" PRIx64 " --stop-address=%#0*" PRIx64 " -dS %s", |
218 | BITS_PER_LONG / 4, map__rip_2objdump(map, sym->start), | 219 | BITS_PER_LONG / 4, map__rip_2objdump(map, sym->start), |
219 | BITS_PER_LONG / 4, map__rip_2objdump(map, sym->end), path); | 220 | BITS_PER_LONG / 4, map__rip_2objdump(map, sym->end), path); |
220 | 221 | ||
@@ -308,7 +309,7 @@ static void lookup_sym_source(struct sym_entry *syme) | |||
308 | struct source_line *line; | 309 | struct source_line *line; |
309 | char pattern[PATTERN_LEN + 1]; | 310 | char pattern[PATTERN_LEN + 1]; |
310 | 311 | ||
311 | sprintf(pattern, "%0*Lx <", BITS_PER_LONG / 4, | 312 | sprintf(pattern, "%0*" PRIx64 " <", BITS_PER_LONG / 4, |
312 | map__rip_2objdump(syme->map, symbol->start)); | 313 | map__rip_2objdump(syme->map, symbol->start)); |
313 | 314 | ||
314 | pthread_mutex_lock(&syme->src->lock); | 315 | pthread_mutex_lock(&syme->src->lock); |
@@ -537,7 +538,7 @@ static void print_sym_table(void) | |||
537 | if (nr_counters == 1 || !display_weighted) { | 538 | if (nr_counters == 1 || !display_weighted) { |
538 | struct perf_evsel *first; | 539 | struct perf_evsel *first; |
539 | first = list_entry(evsel_list.next, struct perf_evsel, node); | 540 | first = list_entry(evsel_list.next, struct perf_evsel, node); |
540 | printf("%Ld", first->attr.sample_period); | 541 | printf("%" PRIu64, (uint64_t)first->attr.sample_period); |
541 | if (freq) | 542 | if (freq) |
542 | printf("Hz "); | 543 | printf("Hz "); |
543 | else | 544 | else |
@@ -640,7 +641,7 @@ static void print_sym_table(void) | |||
640 | 641 | ||
641 | percent_color_fprintf(stdout, "%4.1f%%", pcnt); | 642 | percent_color_fprintf(stdout, "%4.1f%%", pcnt); |
642 | if (verbose) | 643 | if (verbose) |
643 | printf(" %016llx", sym->start); | 644 | printf(" %016" PRIx64, sym->start); |
644 | printf(" %-*.*s", sym_width, sym_width, sym->name); | 645 | printf(" %-*.*s", sym_width, sym_width, sym->name); |
645 | printf(" %-*.*s\n", dso_width, dso_width, | 646 | printf(" %-*.*s\n", dso_width, dso_width, |
646 | dso_width >= syme->map->dso->long_name_len ? | 647 | dso_width >= syme->map->dso->long_name_len ? |
@@ -1305,7 +1306,7 @@ static int __cmd_top(void) | |||
1305 | return -ENOMEM; | 1306 | return -ENOMEM; |
1306 | 1307 | ||
1307 | if (target_tid != -1) | 1308 | if (target_tid != -1) |
1308 | event__synthesize_thread(target_tid, event__process, session); | 1309 | event__synthesize_thread_map(threads, event__process, session); |
1309 | else | 1310 | else |
1310 | event__synthesize_threads(event__process, session); | 1311 | event__synthesize_threads(event__process, session); |
1311 | 1312 | ||
@@ -1471,6 +1472,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __used) | |||
1471 | pos->attr.sample_period = default_interval; | 1472 | pos->attr.sample_period = default_interval; |
1472 | } | 1473 | } |
1473 | 1474 | ||
1475 | sym_evsel = list_entry(evsel_list.next, struct perf_evsel, node); | ||
1476 | |||
1474 | symbol_conf.priv_size = (sizeof(struct sym_entry) + | 1477 | symbol_conf.priv_size = (sizeof(struct sym_entry) + |
1475 | (nr_counters + 1) * sizeof(unsigned long)); | 1478 | (nr_counters + 1) * sizeof(unsigned long)); |
1476 | 1479 | ||
@@ -1488,6 +1491,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __used) | |||
1488 | out_free_fd: | 1491 | out_free_fd: |
1489 | list_for_each_entry(pos, &evsel_list, node) | 1492 | list_for_each_entry(pos, &evsel_list, node) |
1490 | perf_evsel__free_mmap(pos); | 1493 | perf_evsel__free_mmap(pos); |
1494 | perf_evsel_list__delete(); | ||
1491 | 1495 | ||
1492 | return status; | 1496 | return status; |
1493 | } | 1497 | } |
diff --git a/tools/perf/perf.c b/tools/perf/perf.c index 5b1ecd66bb36..595d0f4a7103 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c | |||
@@ -286,8 +286,6 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) | |||
286 | status = p->fn(argc, argv, prefix); | 286 | status = p->fn(argc, argv, prefix); |
287 | exit_browser(status); | 287 | exit_browser(status); |
288 | 288 | ||
289 | perf_evsel_list__delete(); | ||
290 | |||
291 | if (status) | 289 | if (status) |
292 | return status & 0xff; | 290 | return status & 0xff; |
293 | 291 | ||
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2302ec051bb4..50d0a931497a 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c | |||
@@ -263,11 +263,12 @@ static int __event__synthesize_thread(event_t *comm_event, event_t *mmap_event, | |||
263 | process, session); | 263 | process, session); |
264 | } | 264 | } |
265 | 265 | ||
266 | int event__synthesize_thread(pid_t pid, event__handler_t process, | 266 | int event__synthesize_thread_map(struct thread_map *threads, |
267 | struct perf_session *session) | 267 | event__handler_t process, |
268 | struct perf_session *session) | ||
268 | { | 269 | { |
269 | event_t *comm_event, *mmap_event; | 270 | event_t *comm_event, *mmap_event; |
270 | int err = -1; | 271 | int err = -1, thread; |
271 | 272 | ||
272 | comm_event = malloc(sizeof(comm_event->comm) + session->id_hdr_size); | 273 | comm_event = malloc(sizeof(comm_event->comm) + session->id_hdr_size); |
273 | if (comm_event == NULL) | 274 | if (comm_event == NULL) |
@@ -277,8 +278,15 @@ int event__synthesize_thread(pid_t pid, event__handler_t process, | |||
277 | if (mmap_event == NULL) | 278 | if (mmap_event == NULL) |
278 | goto out_free_comm; | 279 | goto out_free_comm; |
279 | 280 | ||
280 | err = __event__synthesize_thread(comm_event, mmap_event, pid, | 281 | err = 0; |
281 | process, session); | 282 | for (thread = 0; thread < threads->nr; ++thread) { |
283 | if (__event__synthesize_thread(comm_event, mmap_event, | ||
284 | threads->map[thread], | ||
285 | process, session)) { | ||
286 | err = -1; | ||
287 | break; | ||
288 | } | ||
289 | } | ||
282 | free(mmap_event); | 290 | free(mmap_event); |
283 | out_free_comm: | 291 | out_free_comm: |
284 | free(comm_event); | 292 | free(comm_event); |
@@ -459,7 +467,8 @@ int event__process_comm(event_t *self, struct sample_data *sample __used, | |||
459 | int event__process_lost(event_t *self, struct sample_data *sample __used, | 467 | int event__process_lost(event_t *self, struct sample_data *sample __used, |
460 | struct perf_session *session) | 468 | struct perf_session *session) |
461 | { | 469 | { |
462 | dump_printf(": id:%Ld: lost:%Ld\n", self->lost.id, self->lost.lost); | 470 | dump_printf(": id:%" PRIu64 ": lost:%" PRIu64 "\n", |
471 | self->lost.id, self->lost.lost); | ||
463 | session->hists.stats.total_lost += self->lost.lost; | 472 | session->hists.stats.total_lost += self->lost.lost; |
464 | return 0; | 473 | return 0; |
465 | } | 474 | } |
@@ -575,7 +584,7 @@ int event__process_mmap(event_t *self, struct sample_data *sample __used, | |||
575 | u8 cpumode = self->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; | 584 | u8 cpumode = self->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; |
576 | int ret = 0; | 585 | int ret = 0; |
577 | 586 | ||
578 | dump_printf(" %d/%d: [%#Lx(%#Lx) @ %#Lx]: %s\n", | 587 | dump_printf(" %d/%d: [%#" PRIx64 "(%#" PRIx64 ") @ %#" PRIx64 "]: %s\n", |
579 | self->mmap.pid, self->mmap.tid, self->mmap.start, | 588 | self->mmap.pid, self->mmap.tid, self->mmap.start, |
580 | self->mmap.len, self->mmap.pgoff, self->mmap.filename); | 589 | self->mmap.len, self->mmap.pgoff, self->mmap.filename); |
581 | 590 | ||
diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index 2b7e91902f10..cc7b52f9b492 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h | |||
@@ -135,14 +135,16 @@ typedef union event_union { | |||
135 | void event__print_totals(void); | 135 | void event__print_totals(void); |
136 | 136 | ||
137 | struct perf_session; | 137 | struct perf_session; |
138 | struct thread_map; | ||
138 | 139 | ||
139 | typedef int (*event__handler_synth_t)(event_t *event, | 140 | typedef int (*event__handler_synth_t)(event_t *event, |
140 | struct perf_session *session); | 141 | struct perf_session *session); |
141 | typedef int (*event__handler_t)(event_t *event, struct sample_data *sample, | 142 | typedef int (*event__handler_t)(event_t *event, struct sample_data *sample, |
142 | struct perf_session *session); | 143 | struct perf_session *session); |
143 | 144 | ||
144 | int event__synthesize_thread(pid_t pid, event__handler_t process, | 145 | int event__synthesize_thread_map(struct thread_map *threads, |
145 | struct perf_session *session); | 146 | event__handler_t process, |
147 | struct perf_session *session); | ||
146 | int event__synthesize_threads(event__handler_t process, | 148 | int event__synthesize_threads(event__handler_t process, |
147 | struct perf_session *session); | 149 | struct perf_session *session); |
148 | int event__synthesize_kernel_mmap(event__handler_t process, | 150 | int event__synthesize_kernel_mmap(event__handler_t process, |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index c95267e63c5b..d8575d31ee6c 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -6,14 +6,13 @@ | |||
6 | 6 | ||
7 | #define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y)) | 7 | #define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y)) |
8 | 8 | ||
9 | struct perf_evsel *perf_evsel__new(u32 type, u64 config, int idx) | 9 | struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx) |
10 | { | 10 | { |
11 | struct perf_evsel *evsel = zalloc(sizeof(*evsel)); | 11 | struct perf_evsel *evsel = zalloc(sizeof(*evsel)); |
12 | 12 | ||
13 | if (evsel != NULL) { | 13 | if (evsel != NULL) { |
14 | evsel->idx = idx; | 14 | evsel->idx = idx; |
15 | evsel->attr.type = type; | 15 | evsel->attr = *attr; |
16 | evsel->attr.config = config; | ||
17 | INIT_LIST_HEAD(&evsel->node); | 16 | INIT_LIST_HEAD(&evsel->node); |
18 | } | 17 | } |
19 | 18 | ||
@@ -91,7 +90,7 @@ int __perf_evsel__read(struct perf_evsel *evsel, | |||
91 | int cpu, thread; | 90 | int cpu, thread; |
92 | struct perf_counts_values *aggr = &evsel->counts->aggr, count; | 91 | struct perf_counts_values *aggr = &evsel->counts->aggr, count; |
93 | 92 | ||
94 | aggr->val = 0; | 93 | aggr->val = aggr->ena = aggr->run = 0; |
95 | 94 | ||
96 | for (cpu = 0; cpu < ncpus; cpu++) { | 95 | for (cpu = 0; cpu < ncpus; cpu++) { |
97 | for (thread = 0; thread < nthreads; thread++) { | 96 | for (thread = 0; thread < nthreads; thread++) { |
@@ -128,59 +127,75 @@ int __perf_evsel__read(struct perf_evsel *evsel, | |||
128 | return 0; | 127 | return 0; |
129 | } | 128 | } |
130 | 129 | ||
131 | int perf_evsel__open_per_cpu(struct perf_evsel *evsel, struct cpu_map *cpus) | 130 | static int __perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus, |
131 | struct thread_map *threads) | ||
132 | { | 132 | { |
133 | int cpu; | 133 | int cpu, thread; |
134 | 134 | ||
135 | if (evsel->fd == NULL && perf_evsel__alloc_fd(evsel, cpus->nr, 1) < 0) | 135 | if (evsel->fd == NULL && |
136 | perf_evsel__alloc_fd(evsel, cpus->nr, threads->nr) < 0) | ||
136 | return -1; | 137 | return -1; |
137 | 138 | ||
138 | for (cpu = 0; cpu < cpus->nr; cpu++) { | 139 | for (cpu = 0; cpu < cpus->nr; cpu++) { |
139 | FD(evsel, cpu, 0) = sys_perf_event_open(&evsel->attr, -1, | 140 | for (thread = 0; thread < threads->nr; thread++) { |
140 | cpus->map[cpu], -1, 0); | 141 | FD(evsel, cpu, thread) = sys_perf_event_open(&evsel->attr, |
141 | if (FD(evsel, cpu, 0) < 0) | 142 | threads->map[thread], |
142 | goto out_close; | 143 | cpus->map[cpu], -1, 0); |
144 | if (FD(evsel, cpu, thread) < 0) | ||
145 | goto out_close; | ||
146 | } | ||
143 | } | 147 | } |
144 | 148 | ||
145 | return 0; | 149 | return 0; |
146 | 150 | ||
147 | out_close: | 151 | out_close: |
148 | while (--cpu >= 0) { | 152 | do { |
149 | close(FD(evsel, cpu, 0)); | 153 | while (--thread >= 0) { |
150 | FD(evsel, cpu, 0) = -1; | 154 | close(FD(evsel, cpu, thread)); |
151 | } | 155 | FD(evsel, cpu, thread) = -1; |
156 | } | ||
157 | thread = threads->nr; | ||
158 | } while (--cpu >= 0); | ||
152 | return -1; | 159 | return -1; |
153 | } | 160 | } |
154 | 161 | ||
155 | int perf_evsel__open_per_thread(struct perf_evsel *evsel, struct thread_map *threads) | 162 | static struct { |
163 | struct cpu_map map; | ||
164 | int cpus[1]; | ||
165 | } empty_cpu_map = { | ||
166 | .map.nr = 1, | ||
167 | .cpus = { -1, }, | ||
168 | }; | ||
169 | |||
170 | static struct { | ||
171 | struct thread_map map; | ||
172 | int threads[1]; | ||
173 | } empty_thread_map = { | ||
174 | .map.nr = 1, | ||
175 | .threads = { -1, }, | ||
176 | }; | ||
177 | |||
178 | int perf_evsel__open(struct perf_evsel *evsel, | ||
179 | struct cpu_map *cpus, struct thread_map *threads) | ||
156 | { | 180 | { |
157 | int thread; | ||
158 | |||
159 | if (evsel->fd == NULL && perf_evsel__alloc_fd(evsel, 1, threads->nr)) | ||
160 | return -1; | ||
161 | 181 | ||
162 | for (thread = 0; thread < threads->nr; thread++) { | 182 | if (cpus == NULL) { |
163 | FD(evsel, 0, thread) = sys_perf_event_open(&evsel->attr, | 183 | /* Work around old compiler warnings about strict aliasing */ |
164 | threads->map[thread], -1, -1, 0); | 184 | cpus = &empty_cpu_map.map; |
165 | if (FD(evsel, 0, thread) < 0) | ||
166 | goto out_close; | ||
167 | } | 185 | } |
168 | 186 | ||
169 | return 0; | 187 | if (threads == NULL) |
188 | threads = &empty_thread_map.map; | ||
170 | 189 | ||
171 | out_close: | 190 | return __perf_evsel__open(evsel, cpus, threads); |
172 | while (--thread >= 0) { | ||
173 | close(FD(evsel, 0, thread)); | ||
174 | FD(evsel, 0, thread) = -1; | ||
175 | } | ||
176 | return -1; | ||
177 | } | 191 | } |
178 | 192 | ||
179 | int perf_evsel__open(struct perf_evsel *evsel, | 193 | int perf_evsel__open_per_cpu(struct perf_evsel *evsel, struct cpu_map *cpus) |
180 | struct cpu_map *cpus, struct thread_map *threads) | ||
181 | { | 194 | { |
182 | if (threads == NULL) | 195 | return __perf_evsel__open(evsel, cpus, &empty_thread_map.map); |
183 | return perf_evsel__open_per_cpu(evsel, cpus); | 196 | } |
184 | 197 | ||
185 | return perf_evsel__open_per_thread(evsel, threads); | 198 | int perf_evsel__open_per_thread(struct perf_evsel *evsel, struct thread_map *threads) |
199 | { | ||
200 | return __perf_evsel__open(evsel, &empty_cpu_map.map, threads); | ||
186 | } | 201 | } |
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index a0ccd69c3fc2..b2d755fe88a5 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h | |||
@@ -37,7 +37,7 @@ struct perf_evsel { | |||
37 | struct cpu_map; | 37 | struct cpu_map; |
38 | struct thread_map; | 38 | struct thread_map; |
39 | 39 | ||
40 | struct perf_evsel *perf_evsel__new(u32 type, u64 config, int idx); | 40 | struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx); |
41 | void perf_evsel__delete(struct perf_evsel *evsel); | 41 | void perf_evsel__delete(struct perf_evsel *evsel); |
42 | 42 | ||
43 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | 43 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); |
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 989fa2dee2fd..f6a929e74981 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -798,8 +798,8 @@ static int perf_file_section__process(struct perf_file_section *self, | |||
798 | int feat, int fd) | 798 | int feat, int fd) |
799 | { | 799 | { |
800 | if (lseek(fd, self->offset, SEEK_SET) == (off_t)-1) { | 800 | if (lseek(fd, self->offset, SEEK_SET) == (off_t)-1) { |
801 | pr_debug("Failed to lseek to %Ld offset for feature %d, " | 801 | pr_debug("Failed to lseek to %" PRIu64 " offset for feature " |
802 | "continuing...\n", self->offset, feat); | 802 | "%d, continuing...\n", self->offset, feat); |
803 | return 0; | 803 | return 0; |
804 | } | 804 | } |
805 | 805 | ||
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index c749ba6136a0..df51560f16f7 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c | |||
@@ -585,6 +585,7 @@ int hist_entry__snprintf(struct hist_entry *self, char *s, size_t size, | |||
585 | { | 585 | { |
586 | struct sort_entry *se; | 586 | struct sort_entry *se; |
587 | u64 period, total, period_sys, period_us, period_guest_sys, period_guest_us; | 587 | u64 period, total, period_sys, period_us, period_guest_sys, period_guest_us; |
588 | u64 nr_events; | ||
588 | const char *sep = symbol_conf.field_sep; | 589 | const char *sep = symbol_conf.field_sep; |
589 | int ret; | 590 | int ret; |
590 | 591 | ||
@@ -593,6 +594,7 @@ int hist_entry__snprintf(struct hist_entry *self, char *s, size_t size, | |||
593 | 594 | ||
594 | if (pair_hists) { | 595 | if (pair_hists) { |
595 | period = self->pair ? self->pair->period : 0; | 596 | period = self->pair ? self->pair->period : 0; |
597 | nr_events = self->pair ? self->pair->nr_events : 0; | ||
596 | total = pair_hists->stats.total_period; | 598 | total = pair_hists->stats.total_period; |
597 | period_sys = self->pair ? self->pair->period_sys : 0; | 599 | period_sys = self->pair ? self->pair->period_sys : 0; |
598 | period_us = self->pair ? self->pair->period_us : 0; | 600 | period_us = self->pair ? self->pair->period_us : 0; |
@@ -600,6 +602,7 @@ int hist_entry__snprintf(struct hist_entry *self, char *s, size_t size, | |||
600 | period_guest_us = self->pair ? self->pair->period_guest_us : 0; | 602 | period_guest_us = self->pair ? self->pair->period_guest_us : 0; |
601 | } else { | 603 | } else { |
602 | period = self->period; | 604 | period = self->period; |
605 | nr_events = self->nr_events; | ||
603 | total = session_total; | 606 | total = session_total; |
604 | period_sys = self->period_sys; | 607 | period_sys = self->period_sys; |
605 | period_us = self->period_us; | 608 | period_us = self->period_us; |
@@ -636,13 +639,13 @@ int hist_entry__snprintf(struct hist_entry *self, char *s, size_t size, | |||
636 | } | 639 | } |
637 | } | 640 | } |
638 | } else | 641 | } else |
639 | ret = snprintf(s, size, sep ? "%lld" : "%12lld ", period); | 642 | ret = snprintf(s, size, sep ? "%" PRIu64 : "%12" PRIu64 " ", period); |
640 | 643 | ||
641 | if (symbol_conf.show_nr_samples) { | 644 | if (symbol_conf.show_nr_samples) { |
642 | if (sep) | 645 | if (sep) |
643 | ret += snprintf(s + ret, size - ret, "%c%lld", *sep, period); | 646 | ret += snprintf(s + ret, size - ret, "%c%" PRIu64, *sep, nr_events); |
644 | else | 647 | else |
645 | ret += snprintf(s + ret, size - ret, "%11lld", period); | 648 | ret += snprintf(s + ret, size - ret, "%11" PRIu64, nr_events); |
646 | } | 649 | } |
647 | 650 | ||
648 | if (pair_hists) { | 651 | if (pair_hists) { |
@@ -971,7 +974,7 @@ int hist_entry__inc_addr_samples(struct hist_entry *self, u64 ip) | |||
971 | sym_size = sym->end - sym->start; | 974 | sym_size = sym->end - sym->start; |
972 | offset = ip - sym->start; | 975 | offset = ip - sym->start; |
973 | 976 | ||
974 | pr_debug3("%s: ip=%#Lx\n", __func__, self->ms.map->unmap_ip(self->ms.map, ip)); | 977 | pr_debug3("%s: ip=%#" PRIx64 "\n", __func__, self->ms.map->unmap_ip(self->ms.map, ip)); |
975 | 978 | ||
976 | if (offset >= sym_size) | 979 | if (offset >= sym_size) |
977 | return 0; | 980 | return 0; |
@@ -980,8 +983,9 @@ int hist_entry__inc_addr_samples(struct hist_entry *self, u64 ip) | |||
980 | h->sum++; | 983 | h->sum++; |
981 | h->ip[offset]++; | 984 | h->ip[offset]++; |
982 | 985 | ||
983 | pr_debug3("%#Lx %s: period++ [ip: %#Lx, %#Lx] => %Ld\n", self->ms.sym->start, | 986 | pr_debug3("%#" PRIx64 " %s: period++ [ip: %#" PRIx64 ", %#" PRIx64 |
984 | self->ms.sym->name, ip, ip - self->ms.sym->start, h->ip[offset]); | 987 | "] => %" PRIu64 "\n", self->ms.sym->start, self->ms.sym->name, |
988 | ip, ip - self->ms.sym->start, h->ip[offset]); | ||
985 | return 0; | 989 | return 0; |
986 | } | 990 | } |
987 | 991 | ||
@@ -1132,7 +1136,7 @@ fallback: | |||
1132 | goto out_free_filename; | 1136 | goto out_free_filename; |
1133 | } | 1137 | } |
1134 | 1138 | ||
1135 | pr_debug("%s: filename=%s, sym=%s, start=%#Lx, end=%#Lx\n", __func__, | 1139 | pr_debug("%s: filename=%s, sym=%s, start=%#" PRIx64 ", end=%#" PRIx64 "\n", __func__, |
1136 | filename, sym->name, map->unmap_ip(map, sym->start), | 1140 | filename, sym->name, map->unmap_ip(map, sym->start), |
1137 | map->unmap_ip(map, sym->end)); | 1141 | map->unmap_ip(map, sym->end)); |
1138 | 1142 | ||
@@ -1142,7 +1146,7 @@ fallback: | |||
1142 | dso, dso->long_name, sym, sym->name); | 1146 | dso, dso->long_name, sym, sym->name); |
1143 | 1147 | ||
1144 | snprintf(command, sizeof(command), | 1148 | snprintf(command, sizeof(command), |
1145 | "objdump --start-address=0x%016Lx --stop-address=0x%016Lx -dS -C %s|grep -v %s|expand", | 1149 | "objdump --start-address=0x%016" PRIx64 " --stop-address=0x%016" PRIx64 " -dS -C %s|grep -v %s|expand", |
1146 | map__rip_2objdump(map, sym->start), | 1150 | map__rip_2objdump(map, sym->start), |
1147 | map__rip_2objdump(map, sym->end), | 1151 | map__rip_2objdump(map, sym->end), |
1148 | symfs_filename, filename); | 1152 | symfs_filename, filename); |
diff --git a/tools/perf/util/include/linux/bitops.h b/tools/perf/util/include/linux/bitops.h index 8be0b968ca0b..305c8484f200 100644 --- a/tools/perf/util/include/linux/bitops.h +++ b/tools/perf/util/include/linux/bitops.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _PERF_LINUX_BITOPS_H_ | 2 | #define _PERF_LINUX_BITOPS_H_ |
3 | 3 | ||
4 | #include <linux/kernel.h> | 4 | #include <linux/kernel.h> |
5 | #include <linux/compiler.h> | ||
5 | #include <asm/hweight.h> | 6 | #include <asm/hweight.h> |
6 | 7 | ||
7 | #define BITS_PER_LONG __WORDSIZE | 8 | #define BITS_PER_LONG __WORDSIZE |
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index 3a7eb6ec0eec..a16ecab5229d 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include "symbol.h" | 1 | #include "symbol.h" |
2 | #include <errno.h> | 2 | #include <errno.h> |
3 | #include <inttypes.h> | ||
3 | #include <limits.h> | 4 | #include <limits.h> |
4 | #include <stdlib.h> | 5 | #include <stdlib.h> |
5 | #include <string.h> | 6 | #include <string.h> |
@@ -195,7 +196,7 @@ int map__overlap(struct map *l, struct map *r) | |||
195 | 196 | ||
196 | size_t map__fprintf(struct map *self, FILE *fp) | 197 | size_t map__fprintf(struct map *self, FILE *fp) |
197 | { | 198 | { |
198 | return fprintf(fp, " %Lx-%Lx %Lx %s\n", | 199 | return fprintf(fp, " %" PRIx64 "-%" PRIx64 " %" PRIx64 " %s\n", |
199 | self->start, self->end, self->pgoff, self->dso->name); | 200 | self->start, self->end, self->pgoff, self->dso->name); |
200 | } | 201 | } |
201 | 202 | ||
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 649083f27e08..135f69baf966 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -279,7 +279,7 @@ const char *__event_name(int type, u64 config) | |||
279 | static char buf[32]; | 279 | static char buf[32]; |
280 | 280 | ||
281 | if (type == PERF_TYPE_RAW) { | 281 | if (type == PERF_TYPE_RAW) { |
282 | sprintf(buf, "raw 0x%llx", config); | 282 | sprintf(buf, "raw 0x%" PRIx64, config); |
283 | return buf; | 283 | return buf; |
284 | } | 284 | } |
285 | 285 | ||
@@ -490,7 +490,6 @@ parse_multiple_tracepoint_event(char *sys_name, const char *evt_exp, | |||
490 | return EVT_HANDLED_ALL; | 490 | return EVT_HANDLED_ALL; |
491 | } | 491 | } |
492 | 492 | ||
493 | |||
494 | static enum event_result parse_tracepoint_event(const char **strp, | 493 | static enum event_result parse_tracepoint_event(const char **strp, |
495 | struct perf_event_attr *attr) | 494 | struct perf_event_attr *attr) |
496 | { | 495 | { |
@@ -530,12 +529,13 @@ static enum event_result parse_tracepoint_event(const char **strp, | |||
530 | if (evt_length >= MAX_EVENT_LENGTH) | 529 | if (evt_length >= MAX_EVENT_LENGTH) |
531 | return EVT_FAILED; | 530 | return EVT_FAILED; |
532 | if (strpbrk(evt_name, "*?")) { | 531 | if (strpbrk(evt_name, "*?")) { |
533 | *strp += strlen(sys_name) + evt_length; | 532 | *strp += strlen(sys_name) + evt_length + 1; /* 1 == the ':' */ |
534 | return parse_multiple_tracepoint_event(sys_name, evt_name, | 533 | return parse_multiple_tracepoint_event(sys_name, evt_name, |
535 | flags); | 534 | flags); |
536 | } else | 535 | } else { |
537 | return parse_single_tracepoint_event(sys_name, evt_name, | 536 | return parse_single_tracepoint_event(sys_name, evt_name, |
538 | evt_length, attr, strp); | 537 | evt_length, attr, strp); |
538 | } | ||
539 | } | 539 | } |
540 | 540 | ||
541 | static enum event_result | 541 | static enum event_result |
@@ -778,41 +778,11 @@ modifier: | |||
778 | return ret; | 778 | return ret; |
779 | } | 779 | } |
780 | 780 | ||
781 | static int store_event_type(const char *orgname) | ||
782 | { | ||
783 | char filename[PATH_MAX], *c; | ||
784 | FILE *file; | ||
785 | int id, n; | ||
786 | |||
787 | sprintf(filename, "%s/", debugfs_path); | ||
788 | strncat(filename, orgname, strlen(orgname)); | ||
789 | strcat(filename, "/id"); | ||
790 | |||
791 | c = strchr(filename, ':'); | ||
792 | if (c) | ||
793 | *c = '/'; | ||
794 | |||
795 | file = fopen(filename, "r"); | ||
796 | if (!file) | ||
797 | return 0; | ||
798 | n = fscanf(file, "%i", &id); | ||
799 | fclose(file); | ||
800 | if (n < 1) { | ||
801 | pr_err("cannot store event ID\n"); | ||
802 | return -EINVAL; | ||
803 | } | ||
804 | return perf_header__push_event(id, orgname); | ||
805 | } | ||
806 | |||
807 | int parse_events(const struct option *opt __used, const char *str, int unset __used) | 781 | int parse_events(const struct option *opt __used, const char *str, int unset __used) |
808 | { | 782 | { |
809 | struct perf_event_attr attr; | 783 | struct perf_event_attr attr; |
810 | enum event_result ret; | 784 | enum event_result ret; |
811 | 785 | ||
812 | if (strchr(str, ':')) | ||
813 | if (store_event_type(str) < 0) | ||
814 | return -1; | ||
815 | |||
816 | for (;;) { | 786 | for (;;) { |
817 | memset(&attr, 0, sizeof(attr)); | 787 | memset(&attr, 0, sizeof(attr)); |
818 | ret = parse_event_symbols(&str, &attr); | 788 | ret = parse_event_symbols(&str, &attr); |
@@ -824,7 +794,7 @@ int parse_events(const struct option *opt __used, const char *str, int unset __u | |||
824 | 794 | ||
825 | if (ret != EVT_HANDLED_ALL) { | 795 | if (ret != EVT_HANDLED_ALL) { |
826 | struct perf_evsel *evsel; | 796 | struct perf_evsel *evsel; |
827 | evsel = perf_evsel__new(attr.type, attr.config, | 797 | evsel = perf_evsel__new(&attr, |
828 | nr_counters); | 798 | nr_counters); |
829 | if (evsel == NULL) | 799 | if (evsel == NULL) |
830 | return -1; | 800 | return -1; |
@@ -1014,8 +984,15 @@ void print_events(void) | |||
1014 | 984 | ||
1015 | int perf_evsel_list__create_default(void) | 985 | int perf_evsel_list__create_default(void) |
1016 | { | 986 | { |
1017 | struct perf_evsel *evsel = perf_evsel__new(PERF_TYPE_HARDWARE, | 987 | struct perf_evsel *evsel; |
1018 | PERF_COUNT_HW_CPU_CYCLES, 0); | 988 | struct perf_event_attr attr; |
989 | |||
990 | memset(&attr, 0, sizeof(attr)); | ||
991 | attr.type = PERF_TYPE_HARDWARE; | ||
992 | attr.config = PERF_COUNT_HW_CPU_CYCLES; | ||
993 | |||
994 | evsel = perf_evsel__new(&attr, 0); | ||
995 | |||
1019 | if (evsel == NULL) | 996 | if (evsel == NULL) |
1020 | return -ENOMEM; | 997 | return -ENOMEM; |
1021 | 998 | ||
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index b82cafb83772..458e3ecf17af 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h | |||
@@ -23,7 +23,7 @@ struct tracepoint_path { | |||
23 | }; | 23 | }; |
24 | 24 | ||
25 | extern struct tracepoint_path *tracepoint_id_to_path(u64 config); | 25 | extern struct tracepoint_path *tracepoint_id_to_path(u64 config); |
26 | extern bool have_tracepoints(struct list_head *evsel_list); | 26 | extern bool have_tracepoints(struct list_head *evlist); |
27 | 27 | ||
28 | extern int nr_counters; | 28 | extern int nr_counters; |
29 | 29 | ||
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 128aaab0aeda..6e29d9c9dccc 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -172,7 +172,7 @@ static int kprobe_convert_to_perf_probe(struct probe_trace_point *tp, | |||
172 | sym = __find_kernel_function_by_name(tp->symbol, &map); | 172 | sym = __find_kernel_function_by_name(tp->symbol, &map); |
173 | if (sym) { | 173 | if (sym) { |
174 | addr = map->unmap_ip(map, sym->start + tp->offset); | 174 | addr = map->unmap_ip(map, sym->start + tp->offset); |
175 | pr_debug("try to find %s+%ld@%llx\n", tp->symbol, | 175 | pr_debug("try to find %s+%ld@%" PRIx64 "\n", tp->symbol, |
176 | tp->offset, addr); | 176 | tp->offset, addr); |
177 | ret = find_perf_probe_point((unsigned long)addr, pp); | 177 | ret = find_perf_probe_point((unsigned long)addr, pp); |
178 | } | 178 | } |
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 6fb4694d05fa..105f00bfd555 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -652,10 +652,11 @@ static void callchain__printf(struct sample_data *sample) | |||
652 | { | 652 | { |
653 | unsigned int i; | 653 | unsigned int i; |
654 | 654 | ||
655 | printf("... chain: nr:%Lu\n", sample->callchain->nr); | 655 | printf("... chain: nr:%" PRIu64 "\n", sample->callchain->nr); |
656 | 656 | ||
657 | for (i = 0; i < sample->callchain->nr; i++) | 657 | for (i = 0; i < sample->callchain->nr; i++) |
658 | printf("..... %2d: %016Lx\n", i, sample->callchain->ips[i]); | 658 | printf("..... %2d: %016" PRIx64 "\n", |
659 | i, sample->callchain->ips[i]); | ||
659 | } | 660 | } |
660 | 661 | ||
661 | static void perf_session__print_tstamp(struct perf_session *session, | 662 | static void perf_session__print_tstamp(struct perf_session *session, |
@@ -672,7 +673,7 @@ static void perf_session__print_tstamp(struct perf_session *session, | |||
672 | printf("%u ", sample->cpu); | 673 | printf("%u ", sample->cpu); |
673 | 674 | ||
674 | if (session->sample_type & PERF_SAMPLE_TIME) | 675 | if (session->sample_type & PERF_SAMPLE_TIME) |
675 | printf("%Lu ", sample->time); | 676 | printf("%" PRIu64 " ", sample->time); |
676 | } | 677 | } |
677 | 678 | ||
678 | static void dump_event(struct perf_session *session, event_t *event, | 679 | static void dump_event(struct perf_session *session, event_t *event, |
@@ -681,16 +682,16 @@ static void dump_event(struct perf_session *session, event_t *event, | |||
681 | if (!dump_trace) | 682 | if (!dump_trace) |
682 | return; | 683 | return; |
683 | 684 | ||
684 | printf("\n%#Lx [%#x]: event: %d\n", file_offset, event->header.size, | 685 | printf("\n%#" PRIx64 " [%#x]: event: %d\n", |
685 | event->header.type); | 686 | file_offset, event->header.size, event->header.type); |
686 | 687 | ||
687 | trace_event(event); | 688 | trace_event(event); |
688 | 689 | ||
689 | if (sample) | 690 | if (sample) |
690 | perf_session__print_tstamp(session, event, sample); | 691 | perf_session__print_tstamp(session, event, sample); |
691 | 692 | ||
692 | printf("%#Lx [%#x]: PERF_RECORD_%s", file_offset, event->header.size, | 693 | printf("%#" PRIx64 " [%#x]: PERF_RECORD_%s", file_offset, |
693 | event__get_event_name(event->header.type)); | 694 | event->header.size, event__get_event_name(event->header.type)); |
694 | } | 695 | } |
695 | 696 | ||
696 | static void dump_sample(struct perf_session *session, event_t *event, | 697 | static void dump_sample(struct perf_session *session, event_t *event, |
@@ -699,8 +700,9 @@ static void dump_sample(struct perf_session *session, event_t *event, | |||
699 | if (!dump_trace) | 700 | if (!dump_trace) |
700 | return; | 701 | return; |
701 | 702 | ||
702 | printf("(IP, %d): %d/%d: %#Lx period: %Ld\n", event->header.misc, | 703 | printf("(IP, %d): %d/%d: %#" PRIx64 " period: %" PRIu64 "\n", |
703 | sample->pid, sample->tid, sample->ip, sample->period); | 704 | event->header.misc, sample->pid, sample->tid, sample->ip, |
705 | sample->period); | ||
704 | 706 | ||
705 | if (session->sample_type & PERF_SAMPLE_CALLCHAIN) | 707 | if (session->sample_type & PERF_SAMPLE_CALLCHAIN) |
706 | callchain__printf(sample); | 708 | callchain__printf(sample); |
@@ -843,8 +845,8 @@ static void perf_session__warn_about_errors(const struct perf_session *session, | |||
843 | { | 845 | { |
844 | if (ops->lost == event__process_lost && | 846 | if (ops->lost == event__process_lost && |
845 | session->hists.stats.total_lost != 0) { | 847 | session->hists.stats.total_lost != 0) { |
846 | ui__warning("Processed %Lu events and LOST %Lu!\n\n" | 848 | ui__warning("Processed %" PRIu64 " events and LOST %" PRIu64 |
847 | "Check IO/CPU overload!\n\n", | 849 | "!\n\nCheck IO/CPU overload!\n\n", |
848 | session->hists.stats.total_period, | 850 | session->hists.stats.total_period, |
849 | session->hists.stats.total_lost); | 851 | session->hists.stats.total_lost); |
850 | } | 852 | } |
@@ -918,7 +920,7 @@ more: | |||
918 | 920 | ||
919 | if (size == 0 || | 921 | if (size == 0 || |
920 | (skip = perf_session__process_event(self, &event, ops, head)) < 0) { | 922 | (skip = perf_session__process_event(self, &event, ops, head)) < 0) { |
921 | dump_printf("%#Lx [%#x]: skipping unknown header type: %d\n", | 923 | dump_printf("%#" PRIx64 " [%#x]: skipping unknown header type: %d\n", |
922 | head, event.header.size, event.header.type); | 924 | head, event.header.size, event.header.type); |
923 | /* | 925 | /* |
924 | * assume we lost track of the stream, check alignment, and | 926 | * assume we lost track of the stream, check alignment, and |
@@ -1007,7 +1009,7 @@ more: | |||
1007 | if (size == 0) | 1009 | if (size == 0) |
1008 | size = 8; | 1010 | size = 8; |
1009 | 1011 | ||
1010 | if (head + event->header.size >= mmap_size) { | 1012 | if (head + event->header.size > mmap_size) { |
1011 | if (mmaps[map_idx]) { | 1013 | if (mmaps[map_idx]) { |
1012 | munmap(mmaps[map_idx], mmap_size); | 1014 | munmap(mmaps[map_idx], mmap_size); |
1013 | mmaps[map_idx] = NULL; | 1015 | mmaps[map_idx] = NULL; |
@@ -1023,7 +1025,7 @@ more: | |||
1023 | 1025 | ||
1024 | if (size == 0 || | 1026 | if (size == 0 || |
1025 | perf_session__process_event(session, event, ops, file_pos) < 0) { | 1027 | perf_session__process_event(session, event, ops, file_pos) < 0) { |
1026 | dump_printf("%#Lx [%#x]: skipping unknown header type: %d\n", | 1028 | dump_printf("%#" PRIx64 " [%#x]: skipping unknown header type: %d\n", |
1027 | file_offset + head, event->header.size, | 1029 | file_offset + head, event->header.size, |
1028 | event->header.type); | 1030 | event->header.type); |
1029 | /* | 1031 | /* |
diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c index b3637db025a2..96c866045d60 100644 --- a/tools/perf/util/svghelper.c +++ b/tools/perf/util/svghelper.c | |||
@@ -12,6 +12,7 @@ | |||
12 | * of the License. | 12 | * of the License. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <inttypes.h> | ||
15 | #include <stdio.h> | 16 | #include <stdio.h> |
16 | #include <stdlib.h> | 17 | #include <stdlib.h> |
17 | #include <unistd.h> | 18 | #include <unistd.h> |
@@ -43,11 +44,11 @@ static double cpu2y(int cpu) | |||
43 | return cpu2slot(cpu) * SLOT_MULT; | 44 | return cpu2slot(cpu) * SLOT_MULT; |
44 | } | 45 | } |
45 | 46 | ||
46 | static double time2pixels(u64 time) | 47 | static double time2pixels(u64 __time) |
47 | { | 48 | { |
48 | double X; | 49 | double X; |
49 | 50 | ||
50 | X = 1.0 * svg_page_width * (time - first_time) / (last_time - first_time); | 51 | X = 1.0 * svg_page_width * (__time - first_time) / (last_time - first_time); |
51 | return X; | 52 | return X; |
52 | } | 53 | } |
53 | 54 | ||
@@ -94,7 +95,7 @@ void open_svg(const char *filename, int cpus, int rows, u64 start, u64 end) | |||
94 | 95 | ||
95 | total_height = (1 + rows + cpu2slot(cpus)) * SLOT_MULT; | 96 | total_height = (1 + rows + cpu2slot(cpus)) * SLOT_MULT; |
96 | fprintf(svgfile, "<?xml version=\"1.0\" standalone=\"no\"?> \n"); | 97 | fprintf(svgfile, "<?xml version=\"1.0\" standalone=\"no\"?> \n"); |
97 | fprintf(svgfile, "<svg width=\"%i\" height=\"%llu\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n", svg_page_width, total_height); | 98 | fprintf(svgfile, "<svg width=\"%i\" height=\"%" PRIu64 "\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n", svg_page_width, total_height); |
98 | 99 | ||
99 | fprintf(svgfile, "<defs>\n <style type=\"text/css\">\n <![CDATA[\n"); | 100 | fprintf(svgfile, "<defs>\n <style type=\"text/css\">\n <![CDATA[\n"); |
100 | 101 | ||
@@ -455,9 +456,9 @@ void svg_legenda(void) | |||
455 | return; | 456 | return; |
456 | 457 | ||
457 | svg_legenda_box(0, "Running", "sample"); | 458 | svg_legenda_box(0, "Running", "sample"); |
458 | svg_legenda_box(100, "Idle","rect.c1"); | 459 | svg_legenda_box(100, "Idle","c1"); |
459 | svg_legenda_box(200, "Deeper Idle", "rect.c3"); | 460 | svg_legenda_box(200, "Deeper Idle", "c3"); |
460 | svg_legenda_box(350, "Deepest Idle", "rect.c6"); | 461 | svg_legenda_box(350, "Deepest Idle", "c6"); |
461 | svg_legenda_box(550, "Sleeping", "process2"); | 462 | svg_legenda_box(550, "Sleeping", "process2"); |
462 | svg_legenda_box(650, "Waiting for cpu", "waiting"); | 463 | svg_legenda_box(650, "Waiting for cpu", "waiting"); |
463 | svg_legenda_box(800, "Blocked on IO", "blocked"); | 464 | svg_legenda_box(800, "Blocked on IO", "blocked"); |
@@ -483,7 +484,7 @@ void svg_time_grid(void) | |||
483 | color = 128; | 484 | color = 128; |
484 | } | 485 | } |
485 | 486 | ||
486 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%llu\" style=\"stroke:rgb(%i,%i,%i);stroke-width:%1.3f\"/>\n", | 487 | fprintf(svgfile, "<line x1=\"%4.8f\" y1=\"%4.2f\" x2=\"%4.8f\" y2=\"%" PRIu64 "\" style=\"stroke:rgb(%i,%i,%i);stroke-width:%1.3f\"/>\n", |
487 | time2pixels(i), SLOT_MULT/2, time2pixels(i), total_height, color, color, color, thickness); | 488 | time2pixels(i), SLOT_MULT/2, time2pixels(i), total_height, color, color, color, thickness); |
488 | 489 | ||
489 | i += 10000000; | 490 | i += 10000000; |
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 15ccfba8cdf8..7821d0e6866f 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <sys/param.h> | 11 | #include <sys/param.h> |
12 | #include <fcntl.h> | 12 | #include <fcntl.h> |
13 | #include <unistd.h> | 13 | #include <unistd.h> |
14 | #include <inttypes.h> | ||
14 | #include "build-id.h" | 15 | #include "build-id.h" |
15 | #include "debug.h" | 16 | #include "debug.h" |
16 | #include "symbol.h" | 17 | #include "symbol.h" |
@@ -153,7 +154,7 @@ static struct symbol *symbol__new(u64 start, u64 len, u8 binding, | |||
153 | self->binding = binding; | 154 | self->binding = binding; |
154 | self->namelen = namelen - 1; | 155 | self->namelen = namelen - 1; |
155 | 156 | ||
156 | pr_debug4("%s: %s %#Lx-%#Lx\n", __func__, name, start, self->end); | 157 | pr_debug4("%s: %s %#" PRIx64 "-%#" PRIx64 "\n", __func__, name, start, self->end); |
157 | 158 | ||
158 | memcpy(self->name, name, namelen); | 159 | memcpy(self->name, name, namelen); |
159 | 160 | ||
@@ -167,7 +168,7 @@ void symbol__delete(struct symbol *self) | |||
167 | 168 | ||
168 | static size_t symbol__fprintf(struct symbol *self, FILE *fp) | 169 | static size_t symbol__fprintf(struct symbol *self, FILE *fp) |
169 | { | 170 | { |
170 | return fprintf(fp, " %llx-%llx %c %s\n", | 171 | return fprintf(fp, " %" PRIx64 "-%" PRIx64 " %c %s\n", |
171 | self->start, self->end, | 172 | self->start, self->end, |
172 | self->binding == STB_GLOBAL ? 'g' : | 173 | self->binding == STB_GLOBAL ? 'g' : |
173 | self->binding == STB_LOCAL ? 'l' : 'w', | 174 | self->binding == STB_LOCAL ? 'l' : 'w', |
@@ -1161,6 +1162,13 @@ static int dso__load_sym(struct dso *self, struct map *map, const char *name, | |||
1161 | 1162 | ||
1162 | section_name = elf_sec__name(&shdr, secstrs); | 1163 | section_name = elf_sec__name(&shdr, secstrs); |
1163 | 1164 | ||
1165 | /* On ARM, symbols for thumb functions have 1 added to | ||
1166 | * the symbol address as a flag - remove it */ | ||
1167 | if ((ehdr.e_machine == EM_ARM) && | ||
1168 | (map->type == MAP__FUNCTION) && | ||
1169 | (sym.st_value & 1)) | ||
1170 | --sym.st_value; | ||
1171 | |||
1164 | if (self->kernel != DSO_TYPE_USER || kmodule) { | 1172 | if (self->kernel != DSO_TYPE_USER || kmodule) { |
1165 | char dso_name[PATH_MAX]; | 1173 | char dso_name[PATH_MAX]; |
1166 | 1174 | ||
@@ -1208,8 +1216,8 @@ static int dso__load_sym(struct dso *self, struct map *map, const char *name, | |||
1208 | } | 1216 | } |
1209 | 1217 | ||
1210 | if (curr_dso->adjust_symbols) { | 1218 | if (curr_dso->adjust_symbols) { |
1211 | pr_debug4("%s: adjusting symbol: st_value: %#Lx " | 1219 | pr_debug4("%s: adjusting symbol: st_value: %#" PRIx64 " " |
1212 | "sh_addr: %#Lx sh_offset: %#Lx\n", __func__, | 1220 | "sh_addr: %#" PRIx64 " sh_offset: %#" PRIx64 "\n", __func__, |
1213 | (u64)sym.st_value, (u64)shdr.sh_addr, | 1221 | (u64)sym.st_value, (u64)shdr.sh_addr, |
1214 | (u64)shdr.sh_offset); | 1222 | (u64)shdr.sh_offset); |
1215 | sym.st_value -= shdr.sh_addr - shdr.sh_offset; | 1223 | sym.st_value -= shdr.sh_addr - shdr.sh_offset; |
diff --git a/tools/perf/util/types.h b/tools/perf/util/types.h index 7d6b8331f898..5f3689a3d085 100644 --- a/tools/perf/util/types.h +++ b/tools/perf/util/types.h | |||
@@ -1,12 +1,14 @@ | |||
1 | #ifndef __PERF_TYPES_H | 1 | #ifndef __PERF_TYPES_H |
2 | #define __PERF_TYPES_H | 2 | #define __PERF_TYPES_H |
3 | 3 | ||
4 | #include <stdint.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * We define u64 as unsigned long long for every architecture | 7 | * We define u64 as uint64_t for every architecture |
6 | * so that we can print it with %Lx without getting warnings. | 8 | * so that we can print it with "%"PRIx64 without getting warnings. |
7 | */ | 9 | */ |
8 | typedef unsigned long long u64; | 10 | typedef uint64_t u64; |
9 | typedef signed long long s64; | 11 | typedef int64_t s64; |
10 | typedef unsigned int u32; | 12 | typedef unsigned int u32; |
11 | typedef signed int s32; | 13 | typedef signed int s32; |
12 | typedef unsigned short u16; | 14 | typedef unsigned short u16; |
diff --git a/tools/perf/util/ui/browsers/hists.c b/tools/perf/util/ui/browsers/hists.c index ebda8c3fde9e..60c463c16028 100644 --- a/tools/perf/util/ui/browsers/hists.c +++ b/tools/perf/util/ui/browsers/hists.c | |||
@@ -350,7 +350,7 @@ static char *callchain_list__sym_name(struct callchain_list *self, | |||
350 | if (self->ms.sym) | 350 | if (self->ms.sym) |
351 | return self->ms.sym->name; | 351 | return self->ms.sym->name; |
352 | 352 | ||
353 | snprintf(bf, bfsize, "%#Lx", self->ip); | 353 | snprintf(bf, bfsize, "%#" PRIx64, self->ip); |
354 | return bf; | 354 | return bf; |
355 | } | 355 | } |
356 | 356 | ||
diff --git a/tools/perf/util/ui/browsers/map.c b/tools/perf/util/ui/browsers/map.c index e35437dfa5b4..e5158369106e 100644 --- a/tools/perf/util/ui/browsers/map.c +++ b/tools/perf/util/ui/browsers/map.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include "../libslang.h" | 1 | #include "../libslang.h" |
2 | #include <elf.h> | 2 | #include <elf.h> |
3 | #include <inttypes.h> | ||
3 | #include <sys/ttydefaults.h> | 4 | #include <sys/ttydefaults.h> |
4 | #include <ctype.h> | 5 | #include <ctype.h> |
5 | #include <string.h> | 6 | #include <string.h> |
@@ -57,7 +58,7 @@ static void map_browser__write(struct ui_browser *self, void *nd, int row) | |||
57 | int width; | 58 | int width; |
58 | 59 | ||
59 | ui_browser__set_percent_color(self, 0, current_entry); | 60 | ui_browser__set_percent_color(self, 0, current_entry); |
60 | slsmg_printf("%*llx %*llx %c ", | 61 | slsmg_printf("%*" PRIx64 " %*" PRIx64 " %c ", |
61 | mb->addrlen, sym->start, mb->addrlen, sym->end, | 62 | mb->addrlen, sym->start, mb->addrlen, sym->end, |
62 | sym->binding == STB_GLOBAL ? 'g' : | 63 | sym->binding == STB_GLOBAL ? 'g' : |
63 | sym->binding == STB_LOCAL ? 'l' : 'w'); | 64 | sym->binding == STB_LOCAL ? 'l' : 'w'); |
@@ -150,6 +151,6 @@ int map__browse(struct map *self) | |||
150 | ++mb.b.nr_entries; | 151 | ++mb.b.nr_entries; |
151 | } | 152 | } |
152 | 153 | ||
153 | mb.addrlen = snprintf(tmp, sizeof(tmp), "%llx", maxaddr); | 154 | mb.addrlen = snprintf(tmp, sizeof(tmp), "%" PRIx64, maxaddr); |
154 | return map_browser__run(&mb); | 155 | return map_browser__run(&mb); |
155 | } | 156 | } |
diff --git a/tools/perf/util/values.c b/tools/perf/util/values.c index cfa55d686e3b..bdd33470b235 100644 --- a/tools/perf/util/values.c +++ b/tools/perf/util/values.c | |||
@@ -150,7 +150,7 @@ static void perf_read_values__display_pretty(FILE *fp, | |||
150 | if (width > tidwidth) | 150 | if (width > tidwidth) |
151 | tidwidth = width; | 151 | tidwidth = width; |
152 | for (j = 0; j < values->counters; j++) { | 152 | for (j = 0; j < values->counters; j++) { |
153 | width = snprintf(NULL, 0, "%Lu", values->value[i][j]); | 153 | width = snprintf(NULL, 0, "%" PRIu64, values->value[i][j]); |
154 | if (width > counterwidth[j]) | 154 | if (width > counterwidth[j]) |
155 | counterwidth[j] = width; | 155 | counterwidth[j] = width; |
156 | } | 156 | } |
@@ -165,7 +165,7 @@ static void perf_read_values__display_pretty(FILE *fp, | |||
165 | fprintf(fp, " %*d %*d", pidwidth, values->pid[i], | 165 | fprintf(fp, " %*d %*d", pidwidth, values->pid[i], |
166 | tidwidth, values->tid[i]); | 166 | tidwidth, values->tid[i]); |
167 | for (j = 0; j < values->counters; j++) | 167 | for (j = 0; j < values->counters; j++) |
168 | fprintf(fp, " %*Lu", | 168 | fprintf(fp, " %*" PRIu64, |
169 | counterwidth[j], values->value[i][j]); | 169 | counterwidth[j], values->value[i][j]); |
170 | fprintf(fp, "\n"); | 170 | fprintf(fp, "\n"); |
171 | } | 171 | } |
@@ -196,13 +196,13 @@ static void perf_read_values__display_raw(FILE *fp, | |||
196 | width = strlen(values->countername[j]); | 196 | width = strlen(values->countername[j]); |
197 | if (width > namewidth) | 197 | if (width > namewidth) |
198 | namewidth = width; | 198 | namewidth = width; |
199 | width = snprintf(NULL, 0, "%llx", values->counterrawid[j]); | 199 | width = snprintf(NULL, 0, "%" PRIx64, values->counterrawid[j]); |
200 | if (width > rawwidth) | 200 | if (width > rawwidth) |
201 | rawwidth = width; | 201 | rawwidth = width; |
202 | } | 202 | } |
203 | for (i = 0; i < values->threads; i++) { | 203 | for (i = 0; i < values->threads; i++) { |
204 | for (j = 0; j < values->counters; j++) { | 204 | for (j = 0; j < values->counters; j++) { |
205 | width = snprintf(NULL, 0, "%Lu", values->value[i][j]); | 205 | width = snprintf(NULL, 0, "%" PRIu64, values->value[i][j]); |
206 | if (width > countwidth) | 206 | if (width > countwidth) |
207 | countwidth = width; | 207 | countwidth = width; |
208 | } | 208 | } |
@@ -214,7 +214,7 @@ static void perf_read_values__display_raw(FILE *fp, | |||
214 | countwidth, "Count"); | 214 | countwidth, "Count"); |
215 | for (i = 0; i < values->threads; i++) | 215 | for (i = 0; i < values->threads; i++) |
216 | for (j = 0; j < values->counters; j++) | 216 | for (j = 0; j < values->counters; j++) |
217 | fprintf(fp, " %*d %*d %*s %*llx %*Lu\n", | 217 | fprintf(fp, " %*d %*d %*s %*" PRIx64 " %*" PRIu64, |
218 | pidwidth, values->pid[i], | 218 | pidwidth, values->pid[i], |
219 | tidwidth, values->tid[i], | 219 | tidwidth, values->tid[i], |
220 | namewidth, values->countername[j], | 220 | namewidth, values->countername[j], |