summaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-inject.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-09-16 20:06:21 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-09-16 20:06:21 -0400
commit772c1d06bd402f7ee72c61a18c2db74cd74b6758 (patch)
treee362fc7e158b3580d810a26189ecf91ec8a4f141 /tools/perf/builtin-inject.c
parentc7eba51cfdf9cd1ca7ed4201b30be8b2bef15ff5 (diff)
parente336b4027775cb458dc713745e526fa1a1996b2a (diff)
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf updates from Ingo Molnar: "Kernel side changes: - Improved kbprobes robustness - Intel PEBS support for PT hardware tracing - Other Intel PT improvements: high order pages memory footprint reduction and various related cleanups - Misc cleanups The perf tooling side has been very busy in this cycle, with over 300 commits. This is an incomplete high-level summary of the many improvements done by over 30 developers: - Lots of updates to the following tools: 'perf c2c' 'perf config' 'perf record' 'perf report' 'perf script' 'perf test' 'perf top' 'perf trace' - Updates to libperf and libtraceevent, and a consolidation of the proliferation of x86 instruction decoder libraries. - Vendor event updates for Intel and PowerPC CPUs, - Updates to hardware tracing tooling for ARM and Intel CPUs, - ... and lots of other changes and cleanups - see the shortlog and Git log for details" * 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (322 commits) kprobes: Prohibit probing on BUG() and WARN() address perf/x86: Make more stuff static x86, perf: Fix the dependency of the x86 insn decoder selftest objtool: Ignore intentional differences for the x86 insn decoder objtool: Update sync-check.sh from perf's check-headers.sh perf build: Ignore intentional differences for the x86 insn decoder perf intel-pt: Use shared x86 insn decoder perf intel-pt: Remove inat.c from build dependency list perf: Update .gitignore file objtool: Move x86 insn decoder to a common location perf metricgroup: Support multiple events for metricgroup perf metricgroup: Scale the metric result perf pmu: Change convert_scale from static to global perf symbols: Move mem_info and branch_info out of symbol.h perf auxtrace: Uninline functions that touch perf_session perf tools: Remove needless evlist.h include directives perf tools: Remove needless evlist.h include directives perf tools: Remove needless thread_map.h include directives perf tools: Remove needless thread.h include directives perf tools: Remove needless map.h include directives ...
Diffstat (limited to 'tools/perf/builtin-inject.c')
-rw-r--r--tools/perf/builtin-inject.c62
1 files changed, 31 insertions, 31 deletions
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index f4591a1438b4..c14f40b858bc 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -8,8 +8,8 @@
8 */ 8 */
9#include "builtin.h" 9#include "builtin.h"
10 10
11#include "perf.h"
12#include "util/color.h" 11#include "util/color.h"
12#include "util/dso.h"
13#include "util/evlist.h" 13#include "util/evlist.h"
14#include "util/evsel.h" 14#include "util/evsel.h"
15#include "util/map.h" 15#include "util/map.h"
@@ -96,7 +96,7 @@ static int perf_event__repipe_op2_synth(struct perf_session *session,
96 96
97static int perf_event__repipe_attr(struct perf_tool *tool, 97static int perf_event__repipe_attr(struct perf_tool *tool,
98 union perf_event *event, 98 union perf_event *event,
99 struct perf_evlist **pevlist) 99 struct evlist **pevlist)
100{ 100{
101 struct perf_inject *inject = container_of(tool, struct perf_inject, 101 struct perf_inject *inject = container_of(tool, struct perf_inject,
102 tool); 102 tool);
@@ -215,13 +215,13 @@ static int perf_event__drop_aux(struct perf_tool *tool,
215typedef int (*inject_handler)(struct perf_tool *tool, 215typedef int (*inject_handler)(struct perf_tool *tool,
216 union perf_event *event, 216 union perf_event *event,
217 struct perf_sample *sample, 217 struct perf_sample *sample,
218 struct perf_evsel *evsel, 218 struct evsel *evsel,
219 struct machine *machine); 219 struct machine *machine);
220 220
221static int perf_event__repipe_sample(struct perf_tool *tool, 221static int perf_event__repipe_sample(struct perf_tool *tool,
222 union perf_event *event, 222 union perf_event *event,
223 struct perf_sample *sample, 223 struct perf_sample *sample,
224 struct perf_evsel *evsel, 224 struct evsel *evsel,
225 struct machine *machine) 225 struct machine *machine)
226{ 226{
227 if (evsel && evsel->handler) { 227 if (evsel && evsel->handler) {
@@ -424,7 +424,7 @@ static int dso__inject_build_id(struct dso *dso, struct perf_tool *tool,
424static int perf_event__inject_buildid(struct perf_tool *tool, 424static int perf_event__inject_buildid(struct perf_tool *tool,
425 union perf_event *event, 425 union perf_event *event,
426 struct perf_sample *sample, 426 struct perf_sample *sample,
427 struct perf_evsel *evsel __maybe_unused, 427 struct evsel *evsel __maybe_unused,
428 struct machine *machine) 428 struct machine *machine)
429{ 429{
430 struct addr_location al; 430 struct addr_location al;
@@ -465,7 +465,7 @@ repipe:
465static int perf_inject__sched_process_exit(struct perf_tool *tool, 465static int perf_inject__sched_process_exit(struct perf_tool *tool,
466 union perf_event *event __maybe_unused, 466 union perf_event *event __maybe_unused,
467 struct perf_sample *sample, 467 struct perf_sample *sample,
468 struct perf_evsel *evsel __maybe_unused, 468 struct evsel *evsel __maybe_unused,
469 struct machine *machine __maybe_unused) 469 struct machine *machine __maybe_unused)
470{ 470{
471 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); 471 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
@@ -485,7 +485,7 @@ static int perf_inject__sched_process_exit(struct perf_tool *tool,
485static int perf_inject__sched_switch(struct perf_tool *tool, 485static int perf_inject__sched_switch(struct perf_tool *tool,
486 union perf_event *event, 486 union perf_event *event,
487 struct perf_sample *sample, 487 struct perf_sample *sample,
488 struct perf_evsel *evsel, 488 struct evsel *evsel,
489 struct machine *machine) 489 struct machine *machine)
490{ 490{
491 struct perf_inject *inject = container_of(tool, struct perf_inject, tool); 491 struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
@@ -509,7 +509,7 @@ static int perf_inject__sched_switch(struct perf_tool *tool,
509static int perf_inject__sched_stat(struct perf_tool *tool, 509static int perf_inject__sched_stat(struct perf_tool *tool,
510 union perf_event *event __maybe_unused, 510 union perf_event *event __maybe_unused,
511 struct perf_sample *sample, 511 struct perf_sample *sample,
512 struct perf_evsel *evsel, 512 struct evsel *evsel,
513 struct machine *machine) 513 struct machine *machine)
514{ 514{
515 struct event_entry *ent; 515 struct event_entry *ent;
@@ -530,8 +530,8 @@ found:
530 530
531 sample_sw.period = sample->period; 531 sample_sw.period = sample->period;
532 sample_sw.time = sample->time; 532 sample_sw.time = sample->time;
533 perf_event__synthesize_sample(event_sw, evsel->attr.sample_type, 533 perf_event__synthesize_sample(event_sw, evsel->core.attr.sample_type,
534 evsel->attr.read_format, &sample_sw); 534 evsel->core.attr.read_format, &sample_sw);
535 build_id__mark_dso_hit(tool, event_sw, &sample_sw, evsel, machine); 535 build_id__mark_dso_hit(tool, event_sw, &sample_sw, evsel, machine);
536 return perf_event__repipe(tool, event_sw, &sample_sw, machine); 536 return perf_event__repipe(tool, event_sw, &sample_sw, machine);
537} 537}
@@ -541,10 +541,10 @@ static void sig_handler(int sig __maybe_unused)
541 session_done = 1; 541 session_done = 1;
542} 542}
543 543
544static int perf_evsel__check_stype(struct perf_evsel *evsel, 544static int perf_evsel__check_stype(struct evsel *evsel,
545 u64 sample_type, const char *sample_msg) 545 u64 sample_type, const char *sample_msg)
546{ 546{
547 struct perf_event_attr *attr = &evsel->attr; 547 struct perf_event_attr *attr = &evsel->core.attr;
548 const char *name = perf_evsel__name(evsel); 548 const char *name = perf_evsel__name(evsel);
549 549
550 if (!(attr->sample_type & sample_type)) { 550 if (!(attr->sample_type & sample_type)) {
@@ -559,7 +559,7 @@ static int perf_evsel__check_stype(struct perf_evsel *evsel,
559static int drop_sample(struct perf_tool *tool __maybe_unused, 559static int drop_sample(struct perf_tool *tool __maybe_unused,
560 union perf_event *event __maybe_unused, 560 union perf_event *event __maybe_unused,
561 struct perf_sample *sample __maybe_unused, 561 struct perf_sample *sample __maybe_unused,
562 struct perf_evsel *evsel __maybe_unused, 562 struct evsel *evsel __maybe_unused,
563 struct machine *machine __maybe_unused) 563 struct machine *machine __maybe_unused)
564{ 564{
565 return 0; 565 return 0;
@@ -567,8 +567,8 @@ static int drop_sample(struct perf_tool *tool __maybe_unused,
567 567
568static void strip_init(struct perf_inject *inject) 568static void strip_init(struct perf_inject *inject)
569{ 569{
570 struct perf_evlist *evlist = inject->session->evlist; 570 struct evlist *evlist = inject->session->evlist;
571 struct perf_evsel *evsel; 571 struct evsel *evsel;
572 572
573 inject->tool.context_switch = perf_event__drop; 573 inject->tool.context_switch = perf_event__drop;
574 574
@@ -576,10 +576,10 @@ static void strip_init(struct perf_inject *inject)
576 evsel->handler = drop_sample; 576 evsel->handler = drop_sample;
577} 577}
578 578
579static bool has_tracking(struct perf_evsel *evsel) 579static bool has_tracking(struct evsel *evsel)
580{ 580{
581 return evsel->attr.mmap || evsel->attr.mmap2 || evsel->attr.comm || 581 return evsel->core.attr.mmap || evsel->core.attr.mmap2 || evsel->core.attr.comm ||
582 evsel->attr.task; 582 evsel->core.attr.task;
583} 583}
584 584
585#define COMPAT_MASK (PERF_SAMPLE_ID | PERF_SAMPLE_TID | PERF_SAMPLE_TIME | \ 585#define COMPAT_MASK (PERF_SAMPLE_ID | PERF_SAMPLE_TID | PERF_SAMPLE_TIME | \
@@ -590,10 +590,10 @@ static bool has_tracking(struct perf_evsel *evsel)
590 * their selected event to exist, except if there is only 1 selected event left 590 * their selected event to exist, except if there is only 1 selected event left
591 * and it has a compatible sample type. 591 * and it has a compatible sample type.
592 */ 592 */
593static bool ok_to_remove(struct perf_evlist *evlist, 593static bool ok_to_remove(struct evlist *evlist,
594 struct perf_evsel *evsel_to_remove) 594 struct evsel *evsel_to_remove)
595{ 595{
596 struct perf_evsel *evsel; 596 struct evsel *evsel;
597 int cnt = 0; 597 int cnt = 0;
598 bool ok = false; 598 bool ok = false;
599 599
@@ -603,8 +603,8 @@ static bool ok_to_remove(struct perf_evlist *evlist,
603 evlist__for_each_entry(evlist, evsel) { 603 evlist__for_each_entry(evlist, evsel) {
604 if (evsel->handler != drop_sample) { 604 if (evsel->handler != drop_sample) {
605 cnt += 1; 605 cnt += 1;
606 if ((evsel->attr.sample_type & COMPAT_MASK) == 606 if ((evsel->core.attr.sample_type & COMPAT_MASK) ==
607 (evsel_to_remove->attr.sample_type & COMPAT_MASK)) 607 (evsel_to_remove->core.attr.sample_type & COMPAT_MASK))
608 ok = true; 608 ok = true;
609 } 609 }
610 } 610 }
@@ -614,16 +614,16 @@ static bool ok_to_remove(struct perf_evlist *evlist,
614 614
615static void strip_fini(struct perf_inject *inject) 615static void strip_fini(struct perf_inject *inject)
616{ 616{
617 struct perf_evlist *evlist = inject->session->evlist; 617 struct evlist *evlist = inject->session->evlist;
618 struct perf_evsel *evsel, *tmp; 618 struct evsel *evsel, *tmp;
619 619
620 /* Remove non-synthesized evsels if possible */ 620 /* Remove non-synthesized evsels if possible */
621 evlist__for_each_entry_safe(evlist, tmp, evsel) { 621 evlist__for_each_entry_safe(evlist, tmp, evsel) {
622 if (evsel->handler == drop_sample && 622 if (evsel->handler == drop_sample &&
623 ok_to_remove(evlist, evsel)) { 623 ok_to_remove(evlist, evsel)) {
624 pr_debug("Deleting %s\n", perf_evsel__name(evsel)); 624 pr_debug("Deleting %s\n", perf_evsel__name(evsel));
625 perf_evlist__remove(evlist, evsel); 625 evlist__remove(evlist, evsel);
626 perf_evsel__delete(evsel); 626 evsel__delete(evsel);
627 } 627 }
628 } 628 }
629} 629}
@@ -651,7 +651,7 @@ static int __cmd_inject(struct perf_inject *inject)
651 if (inject->build_ids) { 651 if (inject->build_ids) {
652 inject->tool.sample = perf_event__inject_buildid; 652 inject->tool.sample = perf_event__inject_buildid;
653 } else if (inject->sched_stat) { 653 } else if (inject->sched_stat) {
654 struct perf_evsel *evsel; 654 struct evsel *evsel;
655 655
656 evlist__for_each_entry(session->evlist, evsel) { 656 evlist__for_each_entry(session->evlist, evsel) {
657 const char *name = perf_evsel__name(evsel); 657 const char *name = perf_evsel__name(evsel);
@@ -712,7 +712,7 @@ static int __cmd_inject(struct perf_inject *inject)
712 * remove the evsel. 712 * remove the evsel.
713 */ 713 */
714 if (inject->itrace_synth_opts.set) { 714 if (inject->itrace_synth_opts.set) {
715 struct perf_evsel *evsel; 715 struct evsel *evsel;
716 716
717 perf_header__clear_feat(&session->header, 717 perf_header__clear_feat(&session->header,
718 HEADER_AUXTRACE); 718 HEADER_AUXTRACE);
@@ -724,8 +724,8 @@ static int __cmd_inject(struct perf_inject *inject)
724 if (evsel) { 724 if (evsel) {
725 pr_debug("Deleting %s\n", 725 pr_debug("Deleting %s\n",
726 perf_evsel__name(evsel)); 726 perf_evsel__name(evsel));
727 perf_evlist__remove(session->evlist, evsel); 727 evlist__remove(session->evlist, evsel);
728 perf_evsel__delete(evsel); 728 evsel__delete(evsel);
729 } 729 }
730 if (inject->strip) 730 if (inject->strip)
731 strip_fini(inject); 731 strip_fini(inject);