]> git.baikalelectronics.ru Git - kernel.git/commit
perf, x86: P4 PMU - Read proper MSR register to catch unflagged overflows
authorDon Zickus <dzickus@redhat.com>
Thu, 24 Mar 2011 20:36:25 +0000 (23:36 +0300)
committerIngo Molnar <mingo@elte.hu>
Thu, 24 Mar 2011 20:40:01 +0000 (21:40 +0100)
commitd063d8079c7eacd8a94a2a3719a0fecc0895d5ca
tree678a3412ff11bda02e3fd6926872b8ae75490af4
parent12b8a76e3ecc8cd6e687572b17b34fc599716da7
perf, x86: P4 PMU - Read proper MSR register to catch unflagged overflows

The read of a proper MSR register was missed and instead of
counter the configration register was tested (it has
ARCH_P4_UNFLAGGED_BIT always cleared) leading to unknown NMI
hitting the system. As result the user may obtain "Dazed and
confused, but trying to continue" message. Fix it by reading a
proper MSR register.

When an NMI happens on a P4, the perf nmi handler checks the
configuration register to see if the overflow bit is set or not
before taking appropriate action.  Unfortunately, various P4
machines had a broken overflow bit, so a backup mechanism was
implemented.  This mechanism checked to see if the counter
rolled over or not.

A previous commit that implemented this backup mechanism was
broken. Instead of reading the counter register, it used the
configuration register to determine if the counter rolled over
or not. Reading that bit would give incorrect results.

This would lead to 'Dazed and confused' messages for the end
user when using the perf tool (or if the nmi watchdog is
running).

The fix is to read the counter register before determining if
the counter rolled over or not.

Signed-off-by: Don Zickus <dzickus@redhat.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Lin Ming <ming.m.lin@intel.com>
LKML-Reference: <4D8BAB49.3080701@openvz.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/cpu/perf_event_p4.c