Skip to content

Commit

Permalink
ARM: perf: handle armpmu_register failing
Browse files Browse the repository at this point in the history
Currently perf_pmu_register may fail for several reasons (e.g. being
unable to allocate memory for the struct device it associates with each
PMU), and while any error is propagated by armpmu_register, it is
ignored by cpu_pmu_device_probe and not propagated to the caller.  This
also results in a leak of a struct arm_pmu.

This patch adds cleanup if armpmu_register fails, and updates the info
messages to better differentiate this type of failure from a failure to
probe the PMU type from the hardware or dt.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
  • Loading branch information
Mark Rutland authored and Will Deacon committed Jan 18, 2013
1 parent 40c390c commit 76b8a0e
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions arch/arm/kernel/perf_event_cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,17 +277,22 @@ static int cpu_pmu_device_probe(struct platform_device *pdev)
}

if (ret) {
pr_info("failed to register PMU devices!");
kfree(pmu);
return ret;
pr_info("failed to probe PMU!");
goto out_free;
}

cpu_pmu = pmu;
cpu_pmu->plat_device = pdev;
cpu_pmu_init(cpu_pmu);
armpmu_register(cpu_pmu, PERF_TYPE_RAW);
ret = armpmu_register(cpu_pmu, PERF_TYPE_RAW);

return 0;
if (!ret)
return 0;

out_free:
pr_info("failed to register PMU devices!");
kfree(pmu);
return ret;
}

static struct platform_driver cpu_pmu_driver = {
Expand Down

0 comments on commit 76b8a0e

Please sign in to comment.