linux/arch/x86/kernel
Stephane Eranian b690081d4d perf_events: Add event constraints support for Intel processors
On some Intel processors, not all events can be measured in all
counters. Some events can only be measured in one particular
counter, for instance. Assigning an event to the wrong counter does
not crash the machine but this yields bogus counts, i.e., silent
error.

This patch changes the event to counter assignment logic to take
into account event constraints for Intel P6, Core and Nehalem
processors. There is no contraints on Intel Atom. There are
constraints on Intel Yonah (Core Duo) but they are not provided in
this patch given that this processor is not yet supported by
perf_events.

As a result of the constraints, it is possible for some event
groups to never actually be loaded onto the PMU if they contain two
events which can only be measured on a single counter. That
situation can be detected with the scaling information extracted
with read().

Signed-off-by: Stephane Eranian <eranian@gmail.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1254840129-6198-3-git-send-email-eranian@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-10-09 15:56:12 +02:00
..
acpi ACPI: fix Compaq Evo N800c (Pentium 4m) boot hang regression 2009-09-27 03:43:42 -04:00
apic sysctl: remove "struct file *" argument of ->proc_handler 2009-09-24 07:21:04 -07:00
cpu perf_events: Add event constraints support for Intel processors 2009-10-09 15:56:12 +02:00
.gitignore
alternative.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
amd_iommu_init.c Merge branch 'amd-iommu/passthrough' into amd-iommu/2.6.32 2009-09-03 16:34:23 +02:00
amd_iommu.c Merge branch 'amd-iommu/pagetable' into amd-iommu/2.6.32 2009-09-03 17:14:57 +02:00
aperture_64.c kmemleak: Ignore the aperture memory hole on x86_64 2009-09-01 11:12:32 +01:00
apm_32.c Merge commit 'origin/x86/urgent' into x86/asm 2009-08-25 15:40:29 -07:00
asm-offsets_32.c
asm-offsets_64.c tracing: Define NR_syscalls for x86_64 2009-08-26 21:29:58 +02:00
asm-offsets.c
audit_64.c
bios_uv.c
bootflag.c
check.c
cpuid.c Driver-Core: extend devnode callbacks to provide permissions 2009-09-19 12:50:38 -07:00
crash_dump_32.c
crash_dump_64.c
crash.c
doublefault_32.c
ds_selftest.c
ds_selftest.h
ds.c
dumpstack_32.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
dumpstack_64.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
dumpstack.c
dumpstack.h
e820.c mm: don't use alloc_bootmem_low() where not strictly needed 2009-09-22 07:17:38 -07:00
early_printk.c x86: early_printk: Protect against using the same device twice 2009-09-24 13:01:13 +02:00
early-quirks.c
efi_32.c
efi_64.c x86: Make 64-bit efi_ioremap use ioremap on MMIO regions 2009-08-03 13:34:25 -07:00
efi_stub_32.S
efi_stub_64.S
efi.c x86: Move get/set_wallclock to x86_platform_ops 2009-09-16 14:34:50 +02:00
entry_32.S
entry_64.S x86: ptrace: sysret path should reach syscall_trace_leave 2009-09-22 20:33:42 -07:00
ftrace.c tracing: Convert event tracing code to use NR_syscalls 2009-08-26 21:30:02 +02:00
geode_32.c
head32.c x86: Add Moorestown early detection 2009-08-31 11:09:40 +02:00
head64.c x86: Add early platform detection 2009-08-31 11:09:40 +02:00
head_32.S Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-26 10:13:35 -07:00
head_64.S Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-26 10:13:35 -07:00
head.c
hpet.c
i386_ksyms_32.c
i387.c
i8237.c
i8253.c x86: Do not unregister PIT clocksource on PIT oneshot setup/shutdown 2009-08-21 21:13:37 +02:00
i8259.c
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
io_delay.c
ioport.c
irq_32.c x86: Use printk_once() 2009-08-09 22:28:34 +02:00
irq_64.c
irq.c
irqinit.c perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
k8.c
kdebugfs.c
kgdb.c
kprobes.c
kvm.c KVM guest: do not batch pte updates from interrupt context 2009-09-10 18:10:50 +03:00
kvmclock.c Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-18 14:05:47 -07:00
ldt.c cpumask: use mm_cpumask() wrapper: x86 2009-09-24 09:34:52 +09:30
machine_kexec_32.c
machine_kexec_64.c
Makefile Merge branch 'linus' into sfi-release 2009-09-19 00:11:26 -04:00
mca_32.c
mfgpt_32.c
microcode_amd.c
microcode_core.c mm: replace various uses of num_physpages by totalram_pages 2009-09-22 07:17:38 -07:00
microcode_intel.c
mmconf-fam10h_64.c
module.c
mpparse.c Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-18 14:05:47 -07:00
mrst.c x86: Add Moorestown early detection 2009-08-31 11:09:40 +02:00
msr.c Driver-Core: extend devnode callbacks to provide permissions 2009-09-19 12:50:38 -07:00
olpc.c
paravirt_patch_32.c
paravirt_patch_64.c
paravirt-spinlocks.c
paravirt.c Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-18 14:05:47 -07:00
pci-calgary_64.c
pci-dma.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2009-09-16 07:49:54 -07:00
pci-gart_64.c
pci-nommu.c dma-ops: Remove flush_write_buffers() in dma-mapping-common.h 2009-08-10 09:34:57 +02:00
pci-swiotlb.c Merge git://git.infradead.org/iommu-2.6 2009-09-23 10:06:10 -07:00
pcspeaker.c
pmtimer_64.c
probe_roms_32.c
process_32.c Merge branch 'x86-percpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-14 08:01:28 -07:00
process_64.c Merge branch 'x86-percpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-14 08:01:28 -07:00
process.c cpumask: use zalloc_cpumask_var() where possible 2009-09-24 09:34:24 +09:30
ptrace.c x86: ptrace: set TS_COMPAT when 32-bit ptrace sets orig_eax>=0 2009-09-22 22:49:24 -07:00
pvclock.c
quirks.c x86/PCI: pci quirks, fix pci refcounting 2009-09-09 14:11:02 -07:00
reboot_fixups_32.c
reboot.c Merge commit 'v2.6.31-rc8' into x86/txt 2009-09-02 08:17:56 +02:00
relocate_kernel_32.S
relocate_kernel_64.S
rtc.c Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-18 14:05:47 -07:00
scx200_32.c
setup_percpu.c x86,percpu: use embedding for 64bit NUMA and page for 32bit NUMA 2009-08-14 15:00:52 +09:00
setup.c Merge branch 'sfi-release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-sfi-2.6 2009-09-23 09:34:07 -07:00
sfi.c SFI: remove unneeded includes 2009-09-15 15:08:40 -04:00
signal.c Merge branch 'x86-mce-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-17 21:07:08 -07:00
smp.c
smpboot.c cpumask: use zalloc_cpumask_var() where possible 2009-09-24 09:34:24 +09:30
stacktrace.c
step.c
sys_i386_32.c
sys_x86_64.c tracing: Convert x86_64 mmap and uname to use DEFINE_SYSCALL 2009-08-11 20:35:29 +02:00
syscall_64.c
syscall_table_32.S perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
tboot.c x86, intel_txt: clean up the impact on generic code, unbreak non-x86 2009-09-01 18:25:07 -07:00
tce_64.c
test_nx.c
test_rodata.c
time.c cpumask: remove last assignment to mask field of struct irqaction. 2009-09-24 09:34:37 +09:30
tlb_uv.c x86: uv: Clean up uv_ptc_init(), use proc_create() 2009-08-24 12:26:46 +02:00
tls.c
tls.h
topology.c
trampoline_32.S x86: cpuinit-annotate SMP boot trampolines properly 2009-09-20 20:23:37 +02:00
trampoline_64.S x86: cpuinit-annotate SMP boot trampolines properly 2009-09-20 20:23:37 +02:00
trampoline.c x86: cpuinit-annotate SMP boot trampolines properly 2009-09-20 20:23:37 +02:00
traps.c Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-09-26 10:13:35 -07:00
tsc_sync.c x86: Reduce verbosity of "TSC is reliable" message 2009-09-24 11:35:19 +02:00
tsc.c Merge branch 'linus' into x86/urgent 2009-09-20 20:25:03 +02:00
uv_irq.c
uv_sysfs.c
uv_time.c
verify_cpu_64.S
visws_quirks.c x86: Add timer_init to x86_init_ops 2009-08-31 09:35:46 +02:00
vm86_32.c
vmi_32.c x86: Move get/set_wallclock to x86_platform_ops 2009-09-16 14:34:50 +02:00
vmiclock_32.c x86: Move tsc_calibration to x86_init_ops 2009-08-31 09:35:47 +02:00
vmlinux.lds.S Merge branch 'x86/asm' into x86/urgent 2009-09-25 10:47:00 +02:00
vsmp_64.c
vsyscall_64.c sysctl: remove "struct file *" argument of ->proc_handler 2009-09-24 07:21:04 -07:00
x86_init.c x86: Move get/set_wallclock to x86_platform_ops 2009-09-16 14:34:50 +02:00
x8664_ksyms_64.c
xsave.c