[Bug 207068] hwpmc wrap around/sign extension
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Wed Feb 10 00:26:24 UTC 2016
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=207068
Bug ID: 207068
Summary: hwpmc wrap around/sign extension
Product: Base System
Version: 10.2-STABLE
Hardware: amd64
OS: Any
Status: New
Keywords: hwpmc
Severity: Affects Some People
Priority: ---
Component: kern
Assignee: freebsd-bugs at FreeBSD.org
Reporter: joss.upton at yahoo.com
CC: freebsd-amd64 at FreeBSD.org, joss.upton at yahoo.com
CC: freebsd-amd64 at FreeBSD.org
hwpmc_intel writes the old value of a counter back to the counter value
register during a context switch in. However, those registers ignore the upper
32 bits (EDX) and instead sign extended to the register width based on EAX[31].
This is the behavior on all machines not supporting "full width writes"
(indicated by CPUID2_PDCM being set && and IA32_PERF_CAPABILITIES(0x345) &
FW_WRITE(bit 13) being set).
If full width writes are supported, full-width aliases for IA32_PMCn exist
0x400 MSRs higher (e.g. IA32_PMC0 == 0xC1 and IA32_A_PMC0 = 0x4C1).
This affects processes monitoring CPU_CLK for processes running more than a
second or two. Using this counter quickly runs into a "negative increment"
assertion in hwpmc_mod.c because of the sign extension. Attached is the least
invasive patch I could come up with and it's against 10.2-R.
It also fixes a few debugging PMCDBGs and adjusts the size of
PMC_DEFAULT_DEBUG_FLAGS to match the size of the structure.
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the freebsd-amd64
mailing list