Commit 26e52558 authored by Kim Phillips's avatar Kim Phillips Committed by Peter Zijlstra

perf/x86/amd: Fix sampling Large Increment per Cycle events

Commit 57388912 ("perf/x86/amd: Add support for Large Increment
per Cycle Events") mistakenly zeroes the upper 16 bits of the count
in set_period().  That's fine for counting with perf stat, but not
sampling with perf record when only Large Increment events are being
sampled.  To enable sampling, we sign extend the upper 16 bits of the
merged counter pair as described in the Family 17h PPRs:

"Software wanting to preload a value to a merged counter pair writes the
high-order 16-bit value to the low-order 16 bits of the odd counter and
then writes the low-order 48-bit value to the even counter. Reading the
even counter of the merged counter pair returns the full 64-bit value."

Fixes: 57388912 ("perf/x86/amd: Add support for Large Increment per Cycle Events")
Signed-off-by: default avatarKim Phillips <kim.phillips@amd.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Cc: stable@vger.kernel.org
Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537
parent c8fe99d0
...@@ -1326,11 +1326,11 @@ int x86_perf_event_set_period(struct perf_event *event) ...@@ -1326,11 +1326,11 @@ int x86_perf_event_set_period(struct perf_event *event)
wrmsrl(hwc->event_base, (u64)(-left) & x86_pmu.cntval_mask); wrmsrl(hwc->event_base, (u64)(-left) & x86_pmu.cntval_mask);
/* /*
* Clear the Merge event counter's upper 16 bits since * Sign extend the Merge event counter's upper 16 bits since
* we currently declare a 48-bit counter width * we currently declare a 48-bit counter width
*/ */
if (is_counter_pair(hwc)) if (is_counter_pair(hwc))
wrmsrl(x86_pmu_event_addr(idx + 1), 0); wrmsrl(x86_pmu_event_addr(idx + 1), 0xffff);
/* /*
* Due to erratum on certan cpu we need * Due to erratum on certan cpu we need
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment