rapl_pmus
static struct rapl_pmus *rapl_pmus_pkg;
static struct rapl_pmus *rapl_pmus_core;
struct rapl_pmus *rapl_pmus;
rapl_pmus = container_of(event->pmu, struct rapl_pmus, pmu);
if (!rapl_pmus)
rapl_pmus_scope = rapl_pmus->pmu.scope;
if (!(rapl_pmus->cntr_mask & (1 << bit)))
if (rapl_pmu_idx >= rapl_pmus->nr_rapl_pmu)
rapl_pmu = rapl_pmus->rapl_pmu[rapl_pmu_idx];
static void cleanup_rapl_pmus(struct rapl_pmus *rapl_pmus)
for (i = 0; i < rapl_pmus->nr_rapl_pmu; i++)
kfree(rapl_pmus->rapl_pmu[i]);
kfree(rapl_pmus);
static int __init init_rapl_pmu(struct rapl_pmus *rapl_pmus)
for (idx = 0; idx < rapl_pmus->nr_rapl_pmu; idx++) {
rapl_pmu->pmu = &rapl_pmus->pmu;
rapl_pmus->rapl_pmu[idx] = rapl_pmu;
kfree(rapl_pmus->rapl_pmu[idx - 1]);
static int __init init_rapl_pmus(struct rapl_pmus **rapl_pmus_ptr, int rapl_pmu_scope,
struct rapl_pmus *rapl_pmus;
rapl_pmus = kzalloc_flex(*rapl_pmus, rapl_pmu, nr_rapl_pmu);
if (!rapl_pmus)
*rapl_pmus_ptr = rapl_pmus;
rapl_pmus->nr_rapl_pmu = nr_rapl_pmu;
rapl_pmus->pmu.attr_groups = rapl_attr_groups;
rapl_pmus->pmu.attr_update = rapl_attr_update;
rapl_pmus->pmu.task_ctx_nr = perf_invalid_context;
rapl_pmus->pmu.event_init = rapl_pmu_event_init;
rapl_pmus->pmu.add = rapl_pmu_event_add;
rapl_pmus->pmu.del = rapl_pmu_event_del;
rapl_pmus->pmu.start = rapl_pmu_event_start;
rapl_pmus->pmu.stop = rapl_pmu_event_stop;
rapl_pmus->pmu.read = rapl_pmu_event_read;
rapl_pmus->pmu.scope = rapl_pmu_scope;
rapl_pmus->pmu.module = THIS_MODULE;
rapl_pmus->pmu.capabilities = PERF_PMU_CAP_NO_EXCLUDE;
ret = init_rapl_pmu(rapl_pmus);
kfree(rapl_pmus);