From 04e3bac217056378659e6d92c682071a954422f8 Mon Sep 17 00:00:00 2001 From: Dave Aldridge Date: Fri, 4 Mar 2016 03:18:45 -0800 Subject: [PATCH] sparc64: Stop performance counter before updating 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 (cherry picked from commit 6de93dc001ed2f440ed3881722934fbda2de0d4f) (cherry picked from commit b36dd4d8040cd53f7e8de5a1d145be483d185105) Signed-off-by: Allen Pais --- arch/sparc/kernel/perf_event.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index d3e4f777eabf..d4cbecc65acd 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c @@ -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); -- 2.50.1