summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm64/kernel/perf_event.c3
-rw-r--r--drivers/perf/arm_pmu.c10
2 files changed, 8 insertions, 5 deletions
diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
index 10db9cbaf49e..e8f5a17707d4 100644
--- a/arch/arm64/kernel/perf_event.c
+++ b/arch/arm64/kernel/perf_event.c
@@ -590,6 +590,9 @@ static void armv8pmu_idle_update(struct arm_pmu *cpu_pmu)
hw_events = this_cpu_ptr(cpu_pmu->hw_events);
+ if (!hw_events)
+ return;
+
for (idx = 0; idx < cpu_pmu->num_events; ++idx) {
if (!test_bit(idx, hw_events->used_mask))
diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index 71154ec99d3c..13b79438af1c 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -1051,6 +1051,10 @@ int arm_pmu_device_probe(struct platform_device *pdev,
pmu->plat_device = pdev;
+ ret = cpu_pmu_init(pmu);
+ if (ret)
+ goto out_free;
+
if (node && (of_id = of_match_node(of_table, pdev->dev.of_node))) {
init_fn = of_id->data;
@@ -1073,13 +1077,9 @@ int arm_pmu_device_probe(struct platform_device *pdev,
if (ret) {
pr_info("%s: failed to probe PMU!\n", of_node_full_name(node));
- goto out_free;
+ goto out_destroy;
}
- ret = cpu_pmu_init(pmu);
- if (ret)
- goto out_free;
-
ret = perf_pmu_register(&pmu->pmu, pmu->name, -1);
if (ret)
goto out_destroy;