Message ID | 1446035537-12854-1-git-send-email-mark.rutland@arm.com |
---|---|
State | Accepted |
Commit | b916b785af99088916a122cb37de1bda3fa7f70e |
Headers | show |
On Wed, Oct 28, 2015 at 12:32:17PM +0000, Mark Rutland wrote: > Nothing outside of drivers/perf/arm_pmu.c should call armpmu_register > any more, so it no longer needs to be in include/linux/perf/arm_pmu.h. > Additionally, by folding it in to arm_pmu_device_probe we can allow > drivers to override struct pmu fields without getting blatted by the > armpmu code. > > This patch folds armpmu_register into arm_pmu_device_probe. The logging > to the console is moved to after the PMU is successfully registered with > the core perf code. > > Signed-off-by: Mark Rutland <mark.rutland@arm.com> > Suggested-by: Will Deacon <will.deacon@arm.com> > Cc: Drew Richardson <drew.richardson@arm.com> > Cc: Pawel Moll <pawel.moll@arm.com> > --- > drivers/perf/arm_pmu.c | 15 ++++++--------- > include/linux/perf/arm_pmu.h | 2 -- > 2 files changed, 6 insertions(+), 11 deletions(-) > > Since v1 [1] > * Call armpmu_init before the PMU init_fn > > [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/378064.html > > diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c > index f346960..6186882 100644 > --- a/drivers/perf/arm_pmu.c > +++ b/drivers/perf/arm_pmu.c > @@ -583,14 +583,6 @@ static void armpmu_init(struct arm_pmu *armpmu) > }; > } > > -int armpmu_register(struct arm_pmu *armpmu, int type) > -{ > - armpmu_init(armpmu); > - pr_info("enabled with %s PMU driver, %d counters available\n", > - armpmu->name, armpmu->num_events); > - return perf_pmu_register(&armpmu->pmu, armpmu->name, type); > -} > - > /* Set at runtime when we know what CPU type we are. */ > static struct arm_pmu *__oprofile_cpu_pmu; > > @@ -913,6 +905,8 @@ int arm_pmu_device_probe(struct platform_device *pdev, > return -ENOMEM; > } > > + armpmu_init(pmu); > + > if (!__oprofile_cpu_pmu) > __oprofile_cpu_pmu = pmu; > > @@ -938,10 +932,13 @@ int arm_pmu_device_probe(struct platform_device *pdev, > if (ret) > goto out_free; > > - ret = armpmu_register(pmu, -1); > + ret = perf_pmu_register(&pmu->pmu, pmu->name, -1); > if (ret) > goto out_destroy; > > + pr_info("enabled with %s PMU driver, %d counters available\n", > + pmu->name, pmu->num_events); > + > return 0; > > out_destroy: > diff --git a/include/linux/perf/arm_pmu.h b/include/linux/perf/arm_pmu.h > index bfa673b..83b5e34 100644 > --- a/include/linux/perf/arm_pmu.h > +++ b/include/linux/perf/arm_pmu.h > @@ -111,8 +111,6 @@ struct arm_pmu { > > #define to_arm_pmu(p) (container_of(p, struct arm_pmu, pmu)) > > -int armpmu_register(struct arm_pmu *armpmu, int type); > - > u64 armpmu_event_update(struct perf_event *event); > > int armpmu_event_set_period(struct perf_event *event); > -- > 1.9.1 > This works great and I no longer need to copy attr_groups in armpmu_init. Thank you Mark. Drew _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c index f346960..6186882 100644 --- a/drivers/perf/arm_pmu.c +++ b/drivers/perf/arm_pmu.c @@ -583,14 +583,6 @@ static void armpmu_init(struct arm_pmu *armpmu) }; } -int armpmu_register(struct arm_pmu *armpmu, int type) -{ - armpmu_init(armpmu); - pr_info("enabled with %s PMU driver, %d counters available\n", - armpmu->name, armpmu->num_events); - return perf_pmu_register(&armpmu->pmu, armpmu->name, type); -} - /* Set at runtime when we know what CPU type we are. */ static struct arm_pmu *__oprofile_cpu_pmu; @@ -913,6 +905,8 @@ int arm_pmu_device_probe(struct platform_device *pdev, return -ENOMEM; } + armpmu_init(pmu); + if (!__oprofile_cpu_pmu) __oprofile_cpu_pmu = pmu; @@ -938,10 +932,13 @@ int arm_pmu_device_probe(struct platform_device *pdev, if (ret) goto out_free; - ret = armpmu_register(pmu, -1); + ret = perf_pmu_register(&pmu->pmu, pmu->name, -1); if (ret) goto out_destroy; + pr_info("enabled with %s PMU driver, %d counters available\n", + pmu->name, pmu->num_events); + return 0; out_destroy: diff --git a/include/linux/perf/arm_pmu.h b/include/linux/perf/arm_pmu.h index bfa673b..83b5e34 100644 --- a/include/linux/perf/arm_pmu.h +++ b/include/linux/perf/arm_pmu.h @@ -111,8 +111,6 @@ struct arm_pmu { #define to_arm_pmu(p) (container_of(p, struct arm_pmu, pmu)) -int armpmu_register(struct arm_pmu *armpmu, int type); - u64 armpmu_event_update(struct perf_event *event); int armpmu_event_set_period(struct perf_event *event);
Nothing outside of drivers/perf/arm_pmu.c should call armpmu_register any more, so it no longer needs to be in include/linux/perf/arm_pmu.h. Additionally, by folding it in to arm_pmu_device_probe we can allow drivers to override struct pmu fields without getting blatted by the armpmu code. This patch folds armpmu_register into arm_pmu_device_probe. The logging to the console is moved to after the PMU is successfully registered with the core perf code. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Suggested-by: Will Deacon <will.deacon@arm.com> Cc: Drew Richardson <drew.richardson@arm.com> Cc: Pawel Moll <pawel.moll@arm.com> --- drivers/perf/arm_pmu.c | 15 ++++++--------- include/linux/perf/arm_pmu.h | 2 -- 2 files changed, 6 insertions(+), 11 deletions(-) Since v1 [1] * Call armpmu_init before the PMU init_fn [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/378064.html -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel