]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sparc64: Stop performance counter before updating
authorDave Aldridge <david.j.aldridge@oracle.com>
Fri, 4 Mar 2016 11:18:45 +0000 (03:18 -0800)
committerAllen Pais <allen.pais@oracle.com>
Sun, 22 Jan 2017 15:37:55 +0000 (21:07 +0530)
In order to reliably clear the PCRx.ov bit when updating a
performance counter value, we need to stop it counting first.
If we do not do this, then we can miss performance counter
overflow events.

Orabug: 22876587

Signed-off-by: Dave Aldridge <david.j.aldridge@oracle.com>
(cherry picked from commit 6de93dc001ed2f440ed3881722934fbda2de0d4f)
(cherry picked from commit b36dd4d8040cd53f7e8de5a1d145be483d185105)
Signed-off-by: Allen Pais <allen.pais@oracle.com>
arch/sparc/kernel/perf_event.c

index d3e4f777eabf11f95f25ab061e5e802c9b13967e..d4cbecc65acdb1aba09d64d3e809b0df8a151f8d 100644 (file)
@@ -739,6 +739,10 @@ static void sparc_vt_write_pmc(int idx, u64 val)
        u64 pcr;
 
        pcr = pcr_ops->read_pcr(idx);
+
+       /* stop the counter */
+       pcr_ops->write_pcr(idx, PCR_N4_PICNPT);
+
        /* ensure ov and ntc are reset */
        pcr &= ~(PCR_N4_OV | PCR_N4_NTC);