perf: Enable and disable counters in one step
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 20 May 2016 18:40:56 +0000 (14:40 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jun 2016 15:48:37 +0000 (11:48 -0400)
commit339c5a3ed63b801a6aefebe76ac37a5956dade6d
tree1a2574896b31884b722889591b86563d3baa7adf
parent2edf9e2326b3d95c34660afa0fecdfb17b9ace26
perf: Enable and disable counters in one step

Perf counters needs to be enabled in two MSRs: the global and the specific
(fixed or eventsel).  We had been clumsily splitting these calls.  Instead,
we can just do it in one move, which clears up the code itself.

For now, we track whether a counter is available/in-use by the specific
MSR.  Because of that, we need to clear both registers when disabling the
counter.  If we do something else in the future, we can disable by only
setting the global MSR, which is one of the benefits of intel's version 2.

Also, this commit makes better use of helpers to check if a counter is
available.  Doing the bit shifts in place was unclear and the source of
multiple bugs.  I caught one of them during Davide's first code submission,
but missed the other (which I fixed a few commits back).  Had we used a
helper the whole time, we only would have needed to fix it once.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/perfmon.c