drivers/perf: arm_pmu: fold init into alloc
authorMark Rutland <mark.rutland@arm.com>
Tue, 11 Apr 2017 08:39:46 +0000 (09:39 +0100)
committerWill Deacon <will.deacon@arm.com>
Tue, 11 Apr 2017 15:29:53 +0000 (16:29 +0100)
Given we always want to initialise common fields on an allocated PMU,
this patch folds this common initialisation into armpmu_alloc(). This
will make it simpler to reuse this code for an ACPI-specific probe path.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Jeremy Linton <jeremy.linton@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/perf/arm_pmu.c

index 71a825df47ed74d32e69f94e7b9ad1e44b3edd1d..1cb8b1a1c122a9839ce7060a91d07ab71a4c271a 100644 (file)
@@ -494,24 +494,6 @@ static struct attribute_group armpmu_common_attr_group = {
        .attrs = armpmu_common_attrs,
 };
 
-static void armpmu_init(struct arm_pmu *armpmu)
-{
-       armpmu->pmu = (struct pmu) {
-               .pmu_enable     = armpmu_enable,
-               .pmu_disable    = armpmu_disable,
-               .event_init     = armpmu_event_init,
-               .add            = armpmu_add,
-               .del            = armpmu_del,
-               .start          = armpmu_start,
-               .stop           = armpmu_stop,
-               .read           = armpmu_read,
-               .filter_match   = armpmu_filter_match,
-               .attr_groups    = armpmu->attr_groups,
-       };
-       armpmu->attr_groups[ARMPMU_ATTR_GROUP_COMMON] =
-               &armpmu_common_attr_group;
-}
-
 /* Set at runtime when we know what CPU type we are. */
 static struct arm_pmu *__oprofile_cpu_pmu;
 
@@ -766,14 +748,6 @@ static int cpu_pmu_init(struct arm_pmu *cpu_pmu)
        if (err)
                goto out_unregister;
 
-       /*
-        * This is a CPU PMU potentially in a heterogeneous configuration (e.g.
-        * big.LITTLE). This is not an uncore PMU, and we have taken ctx
-        * sharing into account (e.g. with our pmu::filter_match callback and
-        * pmu::event_init group validation).
-        */
-       cpu_pmu->pmu.capabilities |= PERF_PMU_CAP_HETEROGENEOUS_CPUS;
-
        return 0;
 
 out_unregister:
@@ -962,6 +936,30 @@ static struct arm_pmu *armpmu_alloc(void)
                goto out_free_pmu;
        }
 
+       pmu->pmu = (struct pmu) {
+               .pmu_enable     = armpmu_enable,
+               .pmu_disable    = armpmu_disable,
+               .event_init     = armpmu_event_init,
+               .add            = armpmu_add,
+               .del            = armpmu_del,
+               .start          = armpmu_start,
+               .stop           = armpmu_stop,
+               .read           = armpmu_read,
+               .filter_match   = armpmu_filter_match,
+               .attr_groups    = pmu->attr_groups,
+               /*
+                * This is a CPU PMU potentially in a heterogeneous
+                * configuration (e.g. big.LITTLE). This is not an uncore PMU,
+                * and we have taken ctx sharing into account (e.g. with our
+                * pmu::filter_match callback and pmu::event_init group
+                * validation).
+                */
+               .capabilities   = PERF_PMU_CAP_HETEROGENEOUS_CPUS,
+       };
+
+       pmu->attr_groups[ARMPMU_ATTR_GROUP_COMMON] =
+               &armpmu_common_attr_group;
+
        for_each_possible_cpu(cpu) {
                struct pmu_hw_events *events;
 
@@ -998,8 +996,6 @@ int arm_pmu_device_probe(struct platform_device *pdev,
        if (!pmu)
                return -ENOMEM;
 
-       armpmu_init(pmu);
-
        pmu->plat_device = pdev;
 
        ret = pmu_parse_irqs(pmu);