aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-trace.c')
-rw-r--r--tools/perf/builtin-trace.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index d222d7fc7e96..ab3ed4af1466 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -419,7 +419,7 @@ out_dump:
419 419
420static int trace__run(struct trace *trace, int argc, const char **argv) 420static int trace__run(struct trace *trace, int argc, const char **argv)
421{ 421{
422 struct perf_evlist *evlist = perf_evlist__new(NULL, NULL); 422 struct perf_evlist *evlist = perf_evlist__new();
423 struct perf_evsel *evsel; 423 struct perf_evsel *evsel;
424 int err = -1, i; 424 int err = -1, i;
425 unsigned long before; 425 unsigned long before;
@@ -452,7 +452,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
452 err = trace__symbols_init(trace, evlist); 452 err = trace__symbols_init(trace, evlist);
453 if (err < 0) { 453 if (err < 0) {
454 printf("Problems initializing symbol libraries!\n"); 454 printf("Problems initializing symbol libraries!\n");
455 goto out_delete_evlist; 455 goto out_delete_maps;
456 } 456 }
457 457
458 perf_evlist__config(evlist, &trace->opts); 458 perf_evlist__config(evlist, &trace->opts);
@@ -461,23 +461,24 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
461 signal(SIGINT, sig_handler); 461 signal(SIGINT, sig_handler);
462 462
463 if (forks) { 463 if (forks) {
464 err = perf_evlist__prepare_workload(evlist, &trace->opts, argv); 464 err = perf_evlist__prepare_workload(evlist, &trace->opts.target,
465 argv, false, false);
465 if (err < 0) { 466 if (err < 0) {
466 printf("Couldn't run the workload!\n"); 467 printf("Couldn't run the workload!\n");
467 goto out_delete_evlist; 468 goto out_delete_maps;
468 } 469 }
469 } 470 }
470 471
471 err = perf_evlist__open(evlist); 472 err = perf_evlist__open(evlist);
472 if (err < 0) { 473 if (err < 0) {
473 printf("Couldn't create the events: %s\n", strerror(errno)); 474 printf("Couldn't create the events: %s\n", strerror(errno));
474 goto out_delete_evlist; 475 goto out_delete_maps;
475 } 476 }
476 477
477 err = perf_evlist__mmap(evlist, UINT_MAX, false); 478 err = perf_evlist__mmap(evlist, UINT_MAX, false);
478 if (err < 0) { 479 if (err < 0) {
479 printf("Couldn't mmap the events: %s\n", strerror(errno)); 480 printf("Couldn't mmap the events: %s\n", strerror(errno));
480 goto out_delete_evlist; 481 goto out_close_evlist;
481 } 482 }
482 483
483 perf_evlist__enable(evlist); 484 perf_evlist__enable(evlist);
@@ -526,13 +527,6 @@ again:
526 continue; 527 continue;
527 } 528 }
528 529
529 if (sample.raw_data == NULL) {
530 printf("%s sample with no payload for tid: %d, cpu %d, raw_size=%d, skipping...\n",
531 perf_evsel__name(evsel), sample.tid,
532 sample.cpu, sample.raw_size);
533 continue;
534 }
535
536 handler = evsel->handler.func; 530 handler = evsel->handler.func;
537 handler(trace, evsel, &sample); 531 handler(trace, evsel, &sample);
538 } 532 }
@@ -540,7 +534,7 @@ again:
540 534
541 if (trace->nr_events == before) { 535 if (trace->nr_events == before) {
542 if (done) 536 if (done)
543 goto out_delete_evlist; 537 goto out_unmap_evlist;
544 538
545 poll(evlist->pollfd, evlist->nr_fds, -1); 539 poll(evlist->pollfd, evlist->nr_fds, -1);
546 } 540 }
@@ -550,6 +544,12 @@ again:
550 544
551 goto again; 545 goto again;
552 546
547out_unmap_evlist:
548 perf_evlist__munmap(evlist);
549out_close_evlist:
550 perf_evlist__close(evlist);
551out_delete_maps:
552 perf_evlist__delete_maps(evlist);
553out_delete_evlist: 553out_delete_evlist:
554 perf_evlist__delete(evlist); 554 perf_evlist__delete(evlist);
555out: 555out: