in kernel/perf_event_cpu.c [495:522]
static inline u32 nds32_pmu_read_counter(struct perf_event *event)
{
struct nds32_pmu *cpu_pmu = to_nds32_pmu(event->pmu);
struct hw_perf_event *hwc = &event->hw;
int idx = hwc->idx;
u32 count = 0;
if (!nds32_pfm_counter_valid(cpu_pmu, idx)) {
pr_err("CPU reading wrong counter %d\n", idx);
} else {
switch (idx) {
case PFMC0:
count = __nds32__mfsr(NDS32_SR_PFMC0);
break;
case PFMC1:
count = __nds32__mfsr(NDS32_SR_PFMC1);
break;
case PFMC2:
count = __nds32__mfsr(NDS32_SR_PFMC2);
break;
default:
pr_err
("%s: CPU has no performance counters %d\n",
__func__, idx);
}
}
return count;
}