1
linux/arch
Stephane Eranian d010b3326c perf: Add callback to flush branch_stack on context switch
With branch stack sampling, it is possible to filter by priv levels.

In system-wide mode, that means it is possible to capture only user
level branches. The builtin SW LBR filter needs to disassemble code
based on LBR captured addresses. For that, it needs to know the task
the addresses are associated with. Because of context switches, the
content of the branch stack buffer may contain addresses from
different tasks.

We need a callback on context switch to either flush the branch stack
or save it. This patch adds a new callback in struct pmu which is called
during context switches. The callback is called only when necessary.
That is when a system-wide context has, at least, one event which
uses PERF_SAMPLE_BRANCH_STACK. The callback is never called for
per-thread context.

In this version, the Intel x86 code simply flushes (resets) the LBR
on context switches (fills it with zeroes). Those zeroed branches are
then filtered out by the SW filter.

Signed-off-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1328826068-11713-11-git-send-email-eranian@google.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2012-03-05 14:55:42 +01:00
..
alpha perf: Disable PERF_SAMPLE_BRANCH_* when not supported 2012-03-05 14:55:42 +01:00
arm perf: Disable PERF_SAMPLE_BRANCH_* when not supported 2012-03-05 14:55:42 +01:00
avr32 avr32: select generic atomic64_t support 2012-02-03 16:16:40 -08:00
blackfin
c6x Kbuild: Use dtc's -d (dependency) option 2012-02-14 21:14:44 -05:00
cris
frv Merge branch 'perf/fast' into perf/core 2012-01-27 12:08:09 +01:00
h8300
hexagon Merge branch 'perf/fast' into perf/core 2012-01-27 12:08:09 +01:00
ia64 static keys: Introduce 'struct static_key', static_key_true()/false() and static_key_slow_[inc|dec]() 2012-02-24 10:05:59 +01:00
m32r Merge branch 'for-next' of git://git.infradead.org/users/dhowells/linux-headers 2012-01-14 18:03:30 -08:00
m68k m68k: Do not set global share for non-kernel shared pages 2012-02-07 11:25:57 +10:00
microblaze Revert "microblaze: Add topology init" 2012-01-31 09:06:52 +01:00
mips perf: Disable PERF_SAMPLE_BRANCH_* when not supported 2012-03-05 14:55:42 +01:00
mn10300 Merge branch 'for-next' of git://git.infradead.org/users/dhowells/linux-headers 2012-01-14 18:03:30 -08:00
openrisc Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2012-01-16 14:34:54 -08:00
parisc parisc, exec: remove redundant set_fs(USER_DS) 2012-01-12 20:13:04 -08:00
powerpc perf: Disable PERF_SAMPLE_BRANCH_* when not supported 2012-03-05 14:55:42 +01:00
s390 Merge branch 'perf/urgent' into perf/core 2012-03-05 09:20:08 +01:00
score score: fix off-by-one index into syscall table 2012-01-23 08:38:49 -08:00
sh perf: Disable PERF_SAMPLE_BRANCH_* when not supported 2012-03-05 14:55:42 +01:00
sparc perf: Disable PERF_SAMPLE_BRANCH_* when not supported 2012-03-05 14:55:42 +01:00
tile Merge branch 'for-next' of git://git.infradead.org/users/dhowells/linux-headers 2012-01-14 18:03:30 -08:00
um Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit 2012-01-17 16:41:31 -08:00
unicore32
x86 perf: Add callback to flush branch_stack on context switch 2012-03-05 14:55:42 +01:00
xtensa xtensa: fix memscan() 2012-02-03 16:16:40 -08:00
.gitignore
Kconfig static keys: Introduce 'struct static_key', static_key_true()/false() and static_key_slow_[inc|dec]() 2012-02-24 10:05:59 +01:00