1
linux/tools/perf
Frederic Weisbecker 301fde27c7 perf: Fix orphan callchain branches
Callchains have markers inside their capture to tell we
enter a context (kernel, user, ...).

Those are not displayed in the callchains but they are
incidentally an active part of the radix tree where
callchains are stored, just like any other address.

If we have the two following callchains:

addr1 -> addr2 -> user context -> addr3
addr1 -> addr2 -> user context -> addr4
addr1 -> addr2 -> addr 5

This is pretty common if addr1 and addr2 are part of an
interrupt path, addr3 and addr4 are user addresses and
addr5 is a kernel non interrupt path.

This will be stored as follows in the tree:

                   addr1
                   addr2
                   /   \
                  /     addr5
            user context
               /    \
             addr3  addr4

But we ignore the context markers in the report, hence
the addr3 and addr4 will appear as orphan branches:

    |--28.30%-- hrtimer_interrupt
    |          smp_apic_timer_interrupt
    |          apic_timer_interrupt
    |          |           <------------- here, no parent!
    |          |          |
    |          |          |--11.11%-- 0x7fae7bccb875
    |          |          |
    |          |          |--11.11%-- 0xffffffffff60013b
    |          |          |
    |          |          |--11.11%-- __pthread_mutex_lock_internal
    |          |          |
    |          |          |--11.11%-- __errno_location

Fix this by removing the context markers when we process the
callchains to the tree.

Reported-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <1269274173-20328-1-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-22 18:47:34 +01:00
..
bench perf sched: Fix build failure on sparc 2009-12-14 08:59:12 +01:00
Documentation perf probe: Add --dry-run option 2010-03-17 11:32:31 +01:00
scripts perf/scripts: Add syscall tracing scripts 2010-02-25 04:07:48 +01:00
util perf: Fix orphan callchain branches 2010-03-22 18:47:34 +01:00
.gitignore perf: Ignore perf-archive temp file 2010-01-29 10:37:33 +01:00
builtin-annotate.c perf annotate: Properly notify the user that vmlinux is missing 2010-03-15 17:16:25 +01:00
builtin-bench.c perf bench: Add "all" pseudo subsystem and "all" pseudo suite 2009-12-14 08:51:19 +01:00
builtin-buildid-cache.c perf buildid-cache: Add new command to manage build-id cache 2010-01-21 08:31:29 +01:00
builtin-buildid-list.c perf build-id: Move the routine to find DSOs with hits to the lib 2010-02-04 09:33:26 +01:00
builtin-diff.c perf session: Change perf_session post processing functions to take histogram tree 2010-03-10 13:53:49 +01:00
builtin-help.c perf: Make cmd_to_page() function more compact 2010-01-13 10:53:51 +01:00
builtin-kmem.c perf symbols: Remove perf_session usage in symbols layer 2010-02-04 09:33:24 +01:00
builtin-list.c perf list: Fix large list output by using the pager 2009-08-13 09:05:48 +02:00
builtin-lock.c perf lock: Drop the buffers multiplexing dependency 2010-02-27 17:06:19 +01:00
builtin-probe.c perf probe: Introduce kprobe_trace_event and perf_probe_event 2010-03-17 11:32:31 +01:00
builtin-record.c perf events: Change perf parameter --pid to process-wide collection instead of thread-wide 2010-03-18 16:21:12 +01:00
builtin-report.c perf: Fix orphan callchain branches 2010-03-22 18:47:34 +01:00
builtin-sched.c perf tools: Don't cast RIP to pointers 2010-01-16 10:58:45 +01:00
builtin-stat.c perf events: Change perf parameter --pid to process-wide collection instead of thread-wide 2010-03-18 16:21:12 +01:00
builtin-timechart.c Merge branch 'perf/urgent' into perf/core 2010-01-29 10:36:22 +01:00
builtin-top.c perf events: Change perf parameter --pid to process-wide collection instead of thread-wide 2010-03-18 16:21:12 +01:00
builtin-trace.c perf trace: Don't use pager if scripting 2010-03-04 12:19:55 +01:00
builtin.h perf lock: Introduce new tool "perf lock", for analyzing lock statistics 2010-01-31 09:08:26 +01:00
command-list.txt perf lock: Fix and add misc documentally things 2010-02-27 17:05:22 +01:00
CREDITS perf_counter tools: Add CREDITS file for Git contributors 2009-06-24 19:54:29 +02:00
design.txt perf: Fix few typos + cosmetics 2010-01-13 17:39:44 +01:00
Makefile perf report: Implement initial UI using newt 2010-03-12 10:28:46 +01:00
perf-archive.sh perf archive: Don't try to collect files without a build-id 2010-03-02 19:27:46 +01:00
perf.c Merge commit 'v2.6.34-rc2' into perf/core 2010-03-22 18:47:01 +01:00
perf.h perf top: Export get_window_dimensions 2010-03-12 10:28:36 +01:00