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@FreeBSD.org
          Reporter: joss.up...@yahoo.com
                CC: freebsd-am...@freebsd.org, joss.up...@yahoo.com
                CC: freebsd-am...@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 the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to