From: David S. Miller Date: Fri, 17 Aug 2012 10:14:01 +0000 (-0700) Subject: sparc64: Make sparc_pmu_{enable,disable}_event() multi-pcr aware. X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=b4f061a4b8cbf947de4fa816a1cfc53960da218e;p=linux-beck.git sparc64: Make sparc_pmu_{enable,disable}_event() multi-pcr aware. Signed-off-by: David S. Miller --- diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index 197c79e9206a..c3ad63775ff9 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c @@ -623,27 +623,35 @@ static u64 nop_for_index(int idx) static inline void sparc_pmu_enable_event(struct cpu_hw_events *cpuc, struct hw_perf_event *hwc, int idx) { u64 val, mask = mask_for_index(idx); + int pcr_index = 0; - val = cpuc->pcr[0]; + if (sparc_pmu->num_pcrs > 1) + pcr_index = idx; + + val = cpuc->pcr[pcr_index]; val &= ~mask; val |= hwc->config; - cpuc->pcr[0] = val; + cpuc->pcr[pcr_index] = val; - pcr_ops->write_pcr(0, cpuc->pcr[0]); + pcr_ops->write_pcr(pcr_index, cpuc->pcr[pcr_index]); } static inline void sparc_pmu_disable_event(struct cpu_hw_events *cpuc, struct hw_perf_event *hwc, int idx) { u64 mask = mask_for_index(idx); u64 nop = nop_for_index(idx); + int pcr_index = 0; u64 val; - val = cpuc->pcr[0]; + if (sparc_pmu->num_pcrs > 1) + pcr_index = idx; + + val = cpuc->pcr[pcr_index]; val &= ~mask; val |= nop; - cpuc->pcr[0] = val; + cpuc->pcr[pcr_index] = val; - pcr_ops->write_pcr(0, cpuc->pcr[0]); + pcr_ops->write_pcr(pcr_index, cpuc->pcr[pcr_index]); } static u64 sparc_perf_event_update(struct perf_event *event,