diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 22:18:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 22:18:49 -0400 |
commit | 3737a12761636ebde0f09ef49daebb8eed18cc8a (patch) | |
tree | 965057f4bccd97049f8c0140f8670c5d4278ca3e /tools/perf/util/callchain.c | |
parent | c29deef32e3699e40da3e9e82267610de04e6b54 (diff) | |
parent | 82b897782d10fcc4930c9d4a15b175348fdd2871 (diff) |
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull more perf updates from Ingo Molnar:
"A second round of perf updates:
- wide reaching kprobes sanitization and robustization, with the hope
of fixing all 'probe this function crashes the kernel' bugs, by
Masami Hiramatsu.
- uprobes updates from Oleg Nesterov: tmpfs support, corner case
fixes and robustization work.
- perf tooling updates and fixes from Jiri Olsa, Namhyung Ki, Arnaldo
et al:
* Add support to accumulate hist periods (Namhyung Kim)
* various fixes, refactorings and enhancements"
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (101 commits)
perf: Differentiate exec() and non-exec() comm events
perf: Fix perf_event_comm() vs. exec() assumption
uprobes/x86: Rename arch_uprobe->def to ->defparam, minor comment updates
perf/documentation: Add description for conditional branch filter
perf/x86: Add conditional branch filtering support
perf/tool: Add conditional branch filter 'cond' to perf record
perf: Add new conditional branch filter 'PERF_SAMPLE_BRANCH_COND'
uprobes: Teach copy_insn() to support tmpfs
uprobes: Shift ->readpage check from __copy_insn() to uprobe_register()
perf/x86: Use common PMU interrupt disabled code
perf/ARM: Use common PMU interrupt disabled code
perf: Disable sampled events if no PMU interrupt
perf: Fix use after free in perf_remove_from_context()
perf tools: Fix 'make help' message error
perf record: Fix poll return value propagation
perf tools: Move elide bool into perf_hpp_fmt struct
perf tools: Remove elide setup for SORT_MODE__MEMORY mode
perf tools: Fix "==" into "=" in ui_browser__warning assignment
perf tools: Allow overriding sysfs and proc finding with env var
perf tools: Consider header files outside perf directory in tags target
...
Diffstat (limited to 'tools/perf/util/callchain.c')
-rw-r--r-- | tools/perf/util/callchain.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c index 9a42382b3921..48b6d3f50012 100644 --- a/tools/perf/util/callchain.c +++ b/tools/perf/util/callchain.c | |||
@@ -616,7 +616,8 @@ int sample__resolve_callchain(struct perf_sample *sample, struct symbol **parent | |||
616 | if (sample->callchain == NULL) | 616 | if (sample->callchain == NULL) |
617 | return 0; | 617 | return 0; |
618 | 618 | ||
619 | if (symbol_conf.use_callchain || sort__has_parent) { | 619 | if (symbol_conf.use_callchain || symbol_conf.cumulate_callchain || |
620 | sort__has_parent) { | ||
620 | return machine__resolve_callchain(al->machine, evsel, al->thread, | 621 | return machine__resolve_callchain(al->machine, evsel, al->thread, |
621 | sample, parent, al, max_stack); | 622 | sample, parent, al, max_stack); |
622 | } | 623 | } |
@@ -629,3 +630,45 @@ int hist_entry__append_callchain(struct hist_entry *he, struct perf_sample *samp | |||
629 | return 0; | 630 | return 0; |
630 | return callchain_append(he->callchain, &callchain_cursor, sample->period); | 631 | return callchain_append(he->callchain, &callchain_cursor, sample->period); |
631 | } | 632 | } |
633 | |||
634 | int fill_callchain_info(struct addr_location *al, struct callchain_cursor_node *node, | ||
635 | bool hide_unresolved) | ||
636 | { | ||
637 | al->map = node->map; | ||
638 | al->sym = node->sym; | ||
639 | if (node->map) | ||
640 | al->addr = node->map->map_ip(node->map, node->ip); | ||
641 | else | ||
642 | al->addr = node->ip; | ||
643 | |||
644 | if (al->sym == NULL) { | ||
645 | if (hide_unresolved) | ||
646 | return 0; | ||
647 | if (al->map == NULL) | ||
648 | goto out; | ||
649 | } | ||
650 | |||
651 | if (al->map->groups == &al->machine->kmaps) { | ||
652 | if (machine__is_host(al->machine)) { | ||
653 | al->cpumode = PERF_RECORD_MISC_KERNEL; | ||
654 | al->level = 'k'; | ||
655 | } else { | ||
656 | al->cpumode = PERF_RECORD_MISC_GUEST_KERNEL; | ||
657 | al->level = 'g'; | ||
658 | } | ||
659 | } else { | ||
660 | if (machine__is_host(al->machine)) { | ||
661 | al->cpumode = PERF_RECORD_MISC_USER; | ||
662 | al->level = '.'; | ||
663 | } else if (perf_guest) { | ||
664 | al->cpumode = PERF_RECORD_MISC_GUEST_USER; | ||
665 | al->level = 'u'; | ||
666 | } else { | ||
667 | al->cpumode = PERF_RECORD_MISC_HYPERVISOR; | ||
668 | al->level = 'H'; | ||
669 | } | ||
670 | } | ||
671 | |||
672 | out: | ||
673 | return 1; | ||
674 | } | ||