Skip to content

Commit

Permalink
ARM: perf: only register a CPU PMU when present
Browse files Browse the repository at this point in the history
Currently, an "empty" struct pmu is registered as the CPU PMU,
regardless of whether there is a physical PMU. This burdens the
accessor functions with checks to see whether a PMU is actually
present.

This patch changes initialisation to register a PMU only if there is a
supported PMU present, and removes the checks that this change makes
redundant.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Will Deacon <will.deacon@arm.com>
Reviewed-by: Jamie Iles <jamie@jamieiles.com>
Reviewed-by: Ashwin Chaugule <ashwinc@codeaurora.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
  • Loading branch information
Mark Rutland authored and Will Deacon committed Aug 31, 2011
1 parent 5f12a76 commit 4895715
Showing 1 changed file with 2 additions and 16 deletions.
18 changes: 2 additions & 16 deletions arch/arm/kernel/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,6 @@ armpmu_stop(struct perf_event *event, int flags)
{
struct hw_perf_event *hwc = &event->hw;

if (!armpmu)
return;

/*
* ARM pmu always has to update the counter, so ignore
* PERF_EF_UPDATE, see comments in armpmu_start().
Expand All @@ -270,9 +267,6 @@ armpmu_start(struct perf_event *event, int flags)
{
struct hw_perf_event *hwc = &event->hw;

if (!armpmu)
return;

/*
* ARM pmu always has to reprogram the period, so ignore
* PERF_EF_RELOAD, see the comment below.
Expand Down Expand Up @@ -567,9 +561,6 @@ static int armpmu_event_init(struct perf_event *event)
return -ENOENT;
}

if (!armpmu)
return -ENODEV;

event->destroy = hw_perf_event_destroy;

if (!atomic_inc_not_zero(&active_events)) {
Expand Down Expand Up @@ -599,9 +590,6 @@ static void armpmu_enable(struct pmu *pmu)
int idx, enabled = 0;
struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);

if (!armpmu)
return;

for (idx = 0; idx < armpmu->num_events; ++idx) {
struct perf_event *event = cpuc->events[idx];

Expand All @@ -618,8 +606,7 @@ static void armpmu_enable(struct pmu *pmu)

static void armpmu_disable(struct pmu *pmu)
{
if (armpmu)
armpmu->stop();
armpmu->stop();
}

static struct pmu pmu = {
Expand Down Expand Up @@ -738,12 +725,11 @@ init_hw_perf_events(void)
if (armpmu) {
pr_info("enabled with %s PMU driver, %d counters available\n",
armpmu->name, armpmu->num_events);
perf_pmu_register(&pmu, "cpu", PERF_TYPE_RAW);
} else {
pr_info("no hardware support available\n");
}

perf_pmu_register(&pmu, "cpu", PERF_TYPE_RAW);

return 0;
}
early_initcall(init_hw_perf_events);
Expand Down

0 comments on commit 4895715

Please sign in to comment.