aboutsummaryrefslogtreecommitdiff
path: root/drivers/perf
diff options
context:
space:
mode:
authorGravatar Christophe JAILLET <christophe.jaillet@wanadoo.fr> 2023-05-18 10:18:08 +0200
committerGravatar Will Deacon <will@kernel.org> 2023-06-05 15:01:27 +0100
commit7bd42f122c7cf1e8101519dced3e07866b81e0d2 (patch)
treeee7bbef002b3394a2e6331adac68e73244e7a138 /drivers/perf
parentperf/arm-cci: Slightly optimize cci_pmu_sync_counters() (diff)
downloadlinux-7bd42f122c7cf1e8101519dced3e07866b81e0d2.tar.gz
linux-7bd42f122c7cf1e8101519dced3e07866b81e0d2.tar.bz2
linux-7bd42f122c7cf1e8101519dced3e07866b81e0d2.zip
perf: qcom_l2_pmu: Make l2_cache_pmu_probe_cluster() more robust
If an error occurs after calling list_add(), the &l2cache_pmu->clusters list will reference some memory that will be freed when the managed resources will be released. Move the list_add() at the end of the function when everything is in fine. This is harmless because if l2_cache_pmu_probe_cluster() fails, then l2_cache_pmu_probe() will fail as well and 'l2cache_pmu' will be released as well. But it looks cleaner and could silence static checker warning. Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://lore.kernel.org/r/6a0f5bdb6b7b2ed4ef194fc49693e902ad5b95ea.1684397879.git.christophe.jaillet@wanadoo.fr Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to 'drivers/perf')
-rw-r--r--drivers/perf/qcom_l2_pmu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/perf/qcom_l2_pmu.c b/drivers/perf/qcom_l2_pmu.c
index aaca6db7d8f6..3f9a98c17a89 100644
--- a/drivers/perf/qcom_l2_pmu.c
+++ b/drivers/perf/qcom_l2_pmu.c
@@ -857,7 +857,6 @@ static int l2_cache_pmu_probe_cluster(struct device *dev, void *data)
return -ENOMEM;
INIT_LIST_HEAD(&cluster->next);
- list_add(&cluster->next, &l2cache_pmu->clusters);
cluster->cluster_id = fw_cluster_id;
irq = platform_get_irq(sdev, 0);
@@ -883,6 +882,7 @@ static int l2_cache_pmu_probe_cluster(struct device *dev, void *data)
spin_lock_init(&cluster->pmu_lock);
+ list_add(&cluster->next, &l2cache_pmu->clusters);
l2cache_pmu->num_pmus++;
return 0;