| From f65d34dc605413f12ef026475132085372e29a7d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 12 Nov 2024 12:34:22 +0100 |
| Subject: drivers: perf: Fix wrong put_cpu() placement |
| |
| From: Alexandre Ghiti <alexghiti@rivosinc.com> |
| |
| [ Upstream commit 57f7c7dc78cd09622b12920d92b40c1ce11b234e ] |
| |
| Unfortunately, the wrong patch version was merged which places the |
| put_cpu() after enabling a static key, which is not safe as pointed by |
| Will [1], so move put_cpu() before to avoid this. |
| |
| Fixes: 2840dadf0dde ("drivers: perf: Fix smp_processor_id() use in preemptible code") |
| Reported-by: Atish Patra <atishp@rivosinc.com> |
| Link: https://lore.kernel.org/all/20240827125335.GD4772@willie-the-truck/ [1] |
| Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com> |
| Link: https://lore.kernel.org/r/20241112113422.617954-1-alexghiti@rivosinc.com |
| Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/perf/riscv_pmu_sbi.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c |
| index 671dc55cbd3a8..bc562c759e1e9 100644 |
| --- a/drivers/perf/riscv_pmu_sbi.c |
| +++ b/drivers/perf/riscv_pmu_sbi.c |
| @@ -1380,8 +1380,9 @@ static int pmu_sbi_device_probe(struct platform_device *pdev) |
| goto out_unregister; |
| |
| cpu = get_cpu(); |
| - |
| ret = pmu_sbi_snapshot_setup(pmu, cpu); |
| + put_cpu(); |
| + |
| if (ret) { |
| /* Snapshot is an optional feature. Continue if not available */ |
| pmu_sbi_snapshot_free(pmu); |
| @@ -1395,7 +1396,6 @@ static int pmu_sbi_device_probe(struct platform_device *pdev) |
| */ |
| static_branch_enable(&sbi_pmu_snapshot_available); |
| } |
| - put_cpu(); |
| } |
| |
| register_sysctl("kernel", sbi_pmu_sysctl_table); |
| -- |
| 2.43.0 |
| |