|
@@ -3271,16 +3271,21 @@ static int __init uncore_pmu_register(struct intel_uncore_pmu *pmu)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- pmu->pmu = (struct pmu) {
|
|
|
- .attr_groups = pmu->type->attr_groups,
|
|
|
- .task_ctx_nr = perf_invalid_context,
|
|
|
- .event_init = uncore_pmu_event_init,
|
|
|
- .add = uncore_pmu_event_add,
|
|
|
- .del = uncore_pmu_event_del,
|
|
|
- .start = uncore_pmu_event_start,
|
|
|
- .stop = uncore_pmu_event_stop,
|
|
|
- .read = uncore_pmu_event_read,
|
|
|
- };
|
|
|
+ if (!pmu->type->pmu) {
|
|
|
+ pmu->pmu = (struct pmu) {
|
|
|
+ .attr_groups = pmu->type->attr_groups,
|
|
|
+ .task_ctx_nr = perf_invalid_context,
|
|
|
+ .event_init = uncore_pmu_event_init,
|
|
|
+ .add = uncore_pmu_event_add,
|
|
|
+ .del = uncore_pmu_event_del,
|
|
|
+ .start = uncore_pmu_event_start,
|
|
|
+ .stop = uncore_pmu_event_stop,
|
|
|
+ .read = uncore_pmu_event_read,
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ pmu->pmu = *pmu->type->pmu;
|
|
|
+ pmu->pmu.attr_groups = pmu->type->attr_groups;
|
|
|
+ }
|
|
|
|
|
|
if (pmu->type->num_boxes == 1) {
|
|
|
if (strlen(pmu->type->name) > 0)
|