linux/arch/x86/kernel/cpu
Peter Zijlstra ef21f683a0 perf, x86: use LBR for PEBS IP+1 fixup
Use the LBR to fix up the PEBS IP+1 issue.

As said, PEBS reports the next instruction, here we use the LBR to find
the last branch and from that construct the actual IP. If the IP matches
the LBR-TO, we use LBR-FROM, otherwise we use the LBR-TO address as the
beginning of the last basic block and decode forward.

Once we find a match to the current IP, we use the previous location.

This patch introduces a new ABI element: PERF_RECORD_MISC_EXACT, which
conveys that the reported IP (PERF_SAMPLE_IP) is the exact instruction
that caused the event (barring CPU errata).

The fixup can fail due to various reasons:

 1) LBR contains invalid data (quite possible)
 2) part of the basic block got paged out
 3) the reported IP isn't part of the basic block (see 1)

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com>
Cc: paulus@samba.org
Cc: eranian@google.com
Cc: robert.richter@amd.com
Cc: fweisbec@gmail.com
LKML-Reference: <20100304140100.619375431@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-03-10 13:23:32 +01:00
..
cpufreq Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq 2010-03-07 12:52:38 -08:00
mcheck sysfs: Use sysfs_attr_init and sysfs_bin_attr_init on dynamic attributes 2010-03-07 17:04:51 -08:00
mtrr x86: fix mtrr missing kernel-doc 2010-03-05 11:46:03 -08:00
.gitignore Update .gitignore files for generated targets 2008-10-20 11:24:31 -07:00
Makefile x86: Remove "x86 CPU features in debugfs" (CONFIG_X86_CPU_DEBUG) 2010-01-23 18:27:47 -08:00
addon_cpuid_features.c x86, cpu: Print AMD virtualization features in /proc/cpuinfo 2010-02-13 15:04:40 -08:00
amd.c x86, amd: Get multi-node CPU info from NodeId MSR instead of PCI config space 2009-12-16 15:06:23 -08:00
bugs.c x86/cpu: Clean up various files a bit 2009-07-11 11:24:09 +02:00
bugs_64.c x86/cpu: Clean up various files a bit 2009-07-11 11:24:09 +02:00
centaur.c x86, cpu: mv display_cacheinfo -> cpu_detect_cache_sizes 2009-11-23 11:59:53 -08:00
cmpxchg.c x86: move cmpxchg fallbacks to a generic place 2008-08-18 16:05:47 +02:00
common.c Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-12-14 12:36:46 -08:00
cpu.h x86, cpu: mv display_cacheinfo -> cpu_detect_cache_sizes 2009-11-23 11:59:53 -08:00
cyrix.c x86, cpu: mv display_cacheinfo -> cpu_detect_cache_sizes 2009-11-23 11:59:53 -08:00
hypervisor.c x86: Move tsc_calibration to x86_init_ops 2009-08-31 09:35:47 +02:00
intel.c x86: Reenable TSC sync check at boot, even with NONSTOP_TSC 2009-12-17 14:44:35 -08:00
intel_cacheinfo.c Driver core: Constify struct sysfs_ops in struct kobj_type 2010-03-07 17:04:49 -08:00
mkcapflags.pl x86: generate names for /proc/cpuinfo from <asm/cpufeature.h> 2008-08-27 19:23:22 -07:00
perf_event.c perf, x86: use LBR for PEBS IP+1 fixup 2010-03-10 13:23:32 +01:00
perf_event_amd.c perf, x86: Use unlocked bitops 2010-03-10 13:22:29 +01:00
perf_event_intel.c perf, x86: use LBR for PEBS IP+1 fixup 2010-03-10 13:23:32 +01:00
perf_event_intel_ds.c perf, x86: use LBR for PEBS IP+1 fixup 2010-03-10 13:23:32 +01:00
perf_event_intel_lbr.c perf, x86: Implement simple LBR support 2010-03-10 13:23:32 +01:00
perf_event_p6.c perf, x86: Change x86_pmu.{enable,disable} calling convention 2010-03-10 13:22:28 +01:00
perfctr-watchdog.c perf, x86: rename macro in ARCH_PERFMON_EVENTSEL_ENABLE 2010-03-01 14:21:23 +01:00
powerflags.c x86: generate names for /proc/cpuinfo from <asm/cpufeature.h> 2008-08-27 19:23:22 -07:00
proc.c Merge branch 'x86-cpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-14 07:57:32 -07:00
sched.c sched: x86: Name old_perf in a unique way 2009-09-16 11:21:07 +02:00
transmeta.c x86, cpu: mv display_cacheinfo -> cpu_detect_cache_sizes 2009-11-23 11:59:53 -08:00
umc.c x86: move various CPU initialization objects into .cpuinit.rodata 2009-03-12 13:13:07 +01:00
vmware.c x86: Print the hypervisor returned tsc_khz during boot 2009-09-20 20:25:36 +02:00