drivers/perf: arm_pmu: add common attr group fields
authorMark Rutland <mark.rutland@arm.com>
Fri, 9 Sep 2016 13:08:26 +0000 (14:08 +0100)
committerWill Deacon <will.deacon@arm.com>
Fri, 9 Sep 2016 13:51:51 +0000 (14:51 +0100)
In preparation for adding common attribute groups, add an array of
attribute group pointers to arm_pmu, which will be used if the
backend hasn't already set pmu::attr_groups.

Subsequent patches will move backends over to using these, before adding
common fields.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/perf/arm_pmu.c
include/linux/perf/arm_pmu.h

index 193a68c..1a39899 100644 (file)
@@ -1037,6 +1037,9 @@ int arm_pmu_device_probe(struct platform_device *pdev,
                goto out_free;
        }
 
+       if (!pmu->pmu.attr_groups)
+               pmu->pmu.attr_groups = pmu->attr_groups;
+
        ret = cpu_pmu_init(pmu);
        if (ret)
                goto out_free;
index e188438..268bc63 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <linux/interrupt.h>
 #include <linux/perf_event.h>
-
+#include <linux/sysfs.h>
 #include <asm/cputype.h>
 
 /*
@@ -77,6 +77,12 @@ struct pmu_hw_events {
        struct arm_pmu          *percpu_pmu;
 };
 
+enum armpmu_attr_groups {
+       ARMPMU_ATTR_GROUP_EVENTS,
+       ARMPMU_ATTR_GROUP_FORMATS,
+       ARMPMU_NR_ATTR_GROUPS
+};
+
 struct arm_pmu {
        struct pmu      pmu;
        cpumask_t       active_irqs;
@@ -111,6 +117,8 @@ struct arm_pmu {
        struct pmu_hw_events    __percpu *hw_events;
        struct list_head        entry;
        struct notifier_block   cpu_pm_nb;
+       /* the attr_groups array must be NULL-terminated */
+       const struct attribute_group *attr_groups[ARMPMU_NR_ATTR_GROUPS + 1];
 };
 
 #define to_arm_pmu(p) (container_of(p, struct arm_pmu, pmu))