in kernel/perf_event.c [1198:1279]
int init_hw_perf_events(void)
{
csky_pmu.hw_events = alloc_percpu_gfp(struct pmu_hw_events,
GFP_KERNEL);
if (!csky_pmu.hw_events) {
pr_info("failed to allocate per-cpu PMU data.\n");
return -ENOMEM;
}
csky_pmu.pmu = (struct pmu) {
.pmu_enable = csky_pmu_enable,
.pmu_disable = csky_pmu_disable,
.event_init = csky_pmu_event_init,
.add = csky_pmu_add,
.del = csky_pmu_del,
.start = csky_pmu_start,
.stop = csky_pmu_stop,
.read = csky_pmu_read,
};
memset((void *)hw_raw_read_mapping, 0,
sizeof(hw_raw_read_mapping[CSKY_PMU_MAX_EVENTS]));
hw_raw_read_mapping[0x1] = csky_pmu_read_cc;
hw_raw_read_mapping[0x2] = csky_pmu_read_ic;
hw_raw_read_mapping[0x3] = csky_pmu_read_icac;
hw_raw_read_mapping[0x4] = csky_pmu_read_icmc;
hw_raw_read_mapping[0x5] = csky_pmu_read_dcac;
hw_raw_read_mapping[0x6] = csky_pmu_read_dcmc;
hw_raw_read_mapping[0x7] = csky_pmu_read_l2ac;
hw_raw_read_mapping[0x8] = csky_pmu_read_l2mc;
hw_raw_read_mapping[0xa] = csky_pmu_read_iutlbmc;
hw_raw_read_mapping[0xb] = csky_pmu_read_dutlbmc;
hw_raw_read_mapping[0xc] = csky_pmu_read_jtlbmc;
hw_raw_read_mapping[0xd] = csky_pmu_read_softc;
hw_raw_read_mapping[0xe] = csky_pmu_read_cbmc;
hw_raw_read_mapping[0xf] = csky_pmu_read_cbic;
hw_raw_read_mapping[0x10] = csky_pmu_read_ibmc;
hw_raw_read_mapping[0x11] = csky_pmu_read_ibic;
hw_raw_read_mapping[0x12] = csky_pmu_read_lsfc;
hw_raw_read_mapping[0x13] = csky_pmu_read_sic;
hw_raw_read_mapping[0x14] = csky_pmu_read_dcrac;
hw_raw_read_mapping[0x15] = csky_pmu_read_dcrmc;
hw_raw_read_mapping[0x16] = csky_pmu_read_dcwac;
hw_raw_read_mapping[0x17] = csky_pmu_read_dcwmc;
hw_raw_read_mapping[0x18] = csky_pmu_read_l2rac;
hw_raw_read_mapping[0x19] = csky_pmu_read_l2rmc;
hw_raw_read_mapping[0x1a] = csky_pmu_read_l2wac;
hw_raw_read_mapping[0x1b] = csky_pmu_read_l2wmc;
memset((void *)hw_raw_write_mapping, 0,
sizeof(hw_raw_write_mapping[CSKY_PMU_MAX_EVENTS]));
hw_raw_write_mapping[0x1] = csky_pmu_write_cc;
hw_raw_write_mapping[0x2] = csky_pmu_write_ic;
hw_raw_write_mapping[0x3] = csky_pmu_write_icac;
hw_raw_write_mapping[0x4] = csky_pmu_write_icmc;
hw_raw_write_mapping[0x5] = csky_pmu_write_dcac;
hw_raw_write_mapping[0x6] = csky_pmu_write_dcmc;
hw_raw_write_mapping[0x7] = csky_pmu_write_l2ac;
hw_raw_write_mapping[0x8] = csky_pmu_write_l2mc;
hw_raw_write_mapping[0xa] = csky_pmu_write_iutlbmc;
hw_raw_write_mapping[0xb] = csky_pmu_write_dutlbmc;
hw_raw_write_mapping[0xc] = csky_pmu_write_jtlbmc;
hw_raw_write_mapping[0xd] = csky_pmu_write_softc;
hw_raw_write_mapping[0xe] = csky_pmu_write_cbmc;
hw_raw_write_mapping[0xf] = csky_pmu_write_cbic;
hw_raw_write_mapping[0x10] = csky_pmu_write_ibmc;
hw_raw_write_mapping[0x11] = csky_pmu_write_ibic;
hw_raw_write_mapping[0x12] = csky_pmu_write_lsfc;
hw_raw_write_mapping[0x13] = csky_pmu_write_sic;
hw_raw_write_mapping[0x14] = csky_pmu_write_dcrac;
hw_raw_write_mapping[0x15] = csky_pmu_write_dcrmc;
hw_raw_write_mapping[0x16] = csky_pmu_write_dcwac;
hw_raw_write_mapping[0x17] = csky_pmu_write_dcwmc;
hw_raw_write_mapping[0x18] = csky_pmu_write_l2rac;
hw_raw_write_mapping[0x19] = csky_pmu_write_l2rmc;
hw_raw_write_mapping[0x1a] = csky_pmu_write_l2wac;
hw_raw_write_mapping[0x1b] = csky_pmu_write_l2wmc;
return 0;
}