]> git.baikalelectronics.ru Git - kernel.git/commit
perf_counter, x86: Set global control MSR correctly
authorYong Wang <yong.y.wang@linux.intel.com>
Wed, 24 Jun 2009 02:13:24 +0000 (10:13 +0800)
committerIngo Molnar <mingo@elte.hu>
Wed, 24 Jun 2009 08:51:24 +0000 (10:51 +0200)
commit066a22e507d0d6aec192d483e8d9f0e9d40581cd
tree441e3da9c7346f010b129a8826d21323b7d41d0e
parentbc16003b3ffb17f5de6714e9d1c9d04f24d577cc
perf_counter, x86: Set global control MSR correctly

Previous code made an assumption that the power on value of global
control MSR has enabled all fixed and general purpose counters properly.

However, this is not the case for certain Intel processors, such as
Atom - and it might also be firmware dependent.

Each enable bit in IA32_PERF_GLOBAL_CTRL is AND'ed with the
enable bits for all privilege levels in the respective IA32_PERFEVTSELx
or IA32_PERF_FIXED_CTR_CTRL MSRs to start/stop the counting of
respective counters. Counting is enabled if the AND'ed results is true;
counting is disabled when the result is false.

The end result is that all fixed counters are always disabled on Atom
processors because the assumption is just invalid.

Fix this by not initializing the ctrl-mask out of the global MSR,
but setting it to perf_counter_mask.

Reported-by: Stephane Eranian <eranian@googlemail.com>
Signed-off-by: Yong Wang <yong.y.wang@intel.com>
Cc: Arjan van de Ven <arjan@infradead.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <20090624021324.GA2788@ywang-moblin2.bj.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/cpu/perf_counter.c