]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/cpum_sf: Set bit PMU_F_ENABLED enabled after lpp() invocation
authorThomas Richter <tmricht@linux.ibm.com>
Mon, 7 Oct 2024 05:45:16 +0000 (07:45 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Thu, 10 Oct 2024 13:32:43 +0000 (15:32 +0200)
Set PMU enabled bit after lpp() call. This ensures the proper
task PID is loaded by the llp instruction into Program Parameter
register from where it is copied to each sampling data buffer
(SDB) sample entry after the sampling was enabled.

The barrier() instruction is not needed as cpumsf_pmu_enable()
changes a CPU specific variable. Only the CPU that task is
running on changes structure members.

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/perf_cpum_sf.c

index 5b765e3ccf0cadc837afcf25c6ba19fb6389472e..e806693c8473d54a1dcd82b11f576324403ef239 100644 (file)
@@ -942,18 +942,15 @@ static void cpumsf_pmu_enable(struct pmu *pmu)
        }
 
        /* (Re)enable the PMU and sampling facility */
-       cpuhw->flags |= PMU_F_ENABLED;
-       barrier();
-
        err = lsctl(&cpuhw->lsctl);
        if (err) {
-               cpuhw->flags &= ~PMU_F_ENABLED;
                pr_err("Loading sampling controls failed: op 1 err %i\n", err);
                return;
        }
 
        /* Load current program parameter */
        lpp(&get_lowcore()->lpp);
+       cpuhw->flags |= PMU_F_ENABLED;
 }
 
 static void cpumsf_pmu_disable(struct pmu *pmu)