• Thomas Richter's avatar
    s390/cpumf: Adjust registration of s390 PMU device drivers · 6a82e23f
    Thomas Richter authored
    Linux-next commit titled "perf/core: Optimize perf_init_event()"
    changed the semantics of PMU device driver registration.
    It was done to speed up the lookup/handling of PMU device driver
    specific events. It also enforces that only one PMU device
    driver will be registered of type PERF_EVENT_RAW.
    
    This change added these line in function perf_pmu_register():
    
      ...
      +       ret = idr_alloc(&pmu_idr, pmu, max, 0, GFP_KERNEL);
      +       if (ret < 0)
                    goto free_pdc;
      +
      +       WARN_ON(type >= 0 && ret != type);
    
    The warn_on generates a message. We have 3 PMU device drivers,
    each registered as type PERF_TYPE_RAW.
    The cf_diag device driver (arch/s390/kernel/perf_cpumf_cf_diag.c)
    always hits the WARN_ON because it is the second PMU device driver
    (after sampling device driver arch/s390/kernel/perf_cpumf_sf.c)
    which is registered as type 4 (PERF_TYPE_RAW).
    So when the sampling device driver is registered, ret has value 4.
    When cf_diag device driver is registered with type 4,
    ret has value of 5 and WARN_ON fires.
    
    Adjust the PMU device drivers for s390 to support the new
    semantics required by perf_pmu_register().
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    6a82e23f
perf_cpum_cf_diag.c 20.7 KB